@sitecore-content-sdk/react 1.2.0-canary.22 → 1.2.0-canary.24
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/cjs/components/ClientEditingChromesUpdate.js +52 -0
- package/dist/cjs/components/DesignLibrary.js +2 -2
- package/dist/cjs/components/EditingScripts.js +1 -0
- package/dist/cjs/components/ErrorBoundary.js +1 -0
- package/dist/cjs/components/Placeholder/Placeholder.js +109 -0
- package/dist/cjs/components/Placeholder/ServerPlaceholder.js +77 -0
- package/dist/cjs/components/Placeholder/index.js +25 -0
- package/dist/cjs/components/Placeholder/models.js +19 -0
- package/dist/cjs/components/Placeholder/placeholder-utils.js +187 -0
- package/dist/cjs/enhancers/withPlaceholder.js +7 -7
- package/dist/cjs/enhancers/withServerPlaceholder.js +21 -0
- package/dist/cjs/index.js +4 -1
- package/dist/esm/components/ClientEditingChromesUpdate.js +15 -0
- package/dist/esm/components/DesignLibrary.js +1 -1
- package/dist/esm/components/EditingScripts.js +1 -0
- package/dist/esm/components/ErrorBoundary.js +1 -0
- package/dist/esm/components/Placeholder/Placeholder.js +102 -0
- package/dist/esm/components/Placeholder/ServerPlaceholder.js +70 -0
- package/dist/esm/components/Placeholder/index.js +4 -0
- package/dist/esm/components/Placeholder/models.js +16 -0
- package/dist/esm/components/Placeholder/placeholder-utils.js +176 -0
- package/dist/esm/enhancers/withPlaceholder.js +7 -7
- package/dist/esm/enhancers/withServerPlaceholder.js +14 -0
- package/dist/esm/index.js +2 -1
- package/package.json +3 -3
- package/types/components/ClientEditingChromesUpdate.d.ts +6 -0
- package/types/components/ErrorBoundary.d.ts +0 -1
- package/types/components/Placeholder/Placeholder.d.ts +28 -0
- package/types/components/Placeholder/ServerPlaceholder.d.ts +10 -0
- package/types/components/Placeholder/index.d.ts +5 -0
- package/types/components/{PlaceholderCommon.d.ts → Placeholder/models.d.ts} +31 -17
- package/types/components/Placeholder/placeholder-utils.d.ts +77 -0
- package/types/components/sharedTypes/components.d.ts +6 -0
- package/types/enhancers/withPlaceholder.d.ts +2 -1
- package/types/enhancers/withServerPlaceholder.d.ts +15 -0
- package/types/index.d.ts +2 -1
- package/dist/cjs/components/Placeholder.js +0 -68
- package/dist/cjs/components/PlaceholderCommon.js +0 -176
- package/dist/esm/components/Placeholder.js +0 -62
- package/dist/esm/components/PlaceholderCommon.js +0 -169
- package/types/components/Placeholder.d.ts +0 -20
- /package/dist/cjs/components/{PlaceholderMetadata.js → Placeholder/PlaceholderMetadata.js} +0 -0
- /package/dist/esm/components/{PlaceholderMetadata.js → Placeholder/PlaceholderMetadata.js} +0 -0
- /package/types/components/{PlaceholderMetadata.d.ts → Placeholder/PlaceholderMetadata.d.ts} +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.ClientEditingChromesUpdate = void 0;
|
|
38
|
+
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
/**
|
|
41
|
+
* Updates editing chromes in app router / RSC context.
|
|
42
|
+
* This ensures all the relevant Pages editing markup is applied once all client components are loaded.
|
|
43
|
+
*/
|
|
44
|
+
const ClientEditingChromesUpdate = () => {
|
|
45
|
+
(0, react_1.useEffect)(() => {
|
|
46
|
+
if ((0, editing_1.isEditorActive)()) {
|
|
47
|
+
(0, editing_1.resetEditorChromes)();
|
|
48
|
+
}
|
|
49
|
+
}, []);
|
|
50
|
+
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
51
|
+
};
|
|
52
|
+
exports.ClientEditingChromesUpdate = ClientEditingChromesUpdate;
|
|
@@ -52,7 +52,7 @@ const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
|
52
52
|
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
53
53
|
const codegen = __importStar(require("@sitecore-content-sdk/core/codegen"));
|
|
54
54
|
const withSitecore_1 = require("../enhancers/withSitecore");
|
|
55
|
-
const
|
|
55
|
+
const Placeholder_2 = require("./Placeholder");
|
|
56
56
|
let { getDesignLibraryImportMapEvent, getDesignLibraryComponentPropsEvent, addComponentPreviewHandler, } = codegen;
|
|
57
57
|
const __mockDependencies = (mocks) => {
|
|
58
58
|
addComponentPreviewHandler = mocks.addComponentPreviewHandler;
|
|
@@ -196,7 +196,7 @@ const DesignLibrary = ({ loadImportMap }) => {
|
|
|
196
196
|
};
|
|
197
197
|
}, [isVariantGeneration, rendering]);
|
|
198
198
|
return (react_1.default.createElement("main", null, isGeneratedComponentActive ? (react_1.default.createElement(ErrorBoundary, { uid: rendering.uid, renderKey: renderKey },
|
|
199
|
-
react_1.default.createElement(
|
|
199
|
+
react_1.default.createElement(Placeholder_2.PlaceholderMetadata, { rendering: rendering },
|
|
200
200
|
react_1.default.createElement(Component, { fields: propsState.fields, params: propsState.params, key: renderKey })))) : (react_1.default.createElement("div", { id: layout_1.EDITING_COMPONENT_ID }, route && (react_1.default.createElement(Placeholder_1.Placeholder, { name: layout_1.EDITING_COMPONENT_PLACEHOLDER, rendering: route, key: renderKey }))))));
|
|
201
201
|
};
|
|
202
202
|
exports.DesignLibrary = DesignLibrary;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Placeholder = exports.PlaceholderComponent = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const withComponentMap_1 = require("../../enhancers/withComponentMap");
|
|
9
|
+
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
10
|
+
const withSitecore_1 = require("../../enhancers/withSitecore");
|
|
11
|
+
const placeholder_utils_1 = require("./placeholder-utils");
|
|
12
|
+
const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
|
|
13
|
+
const ErrorBoundary_1 = __importDefault(require("../ErrorBoundary"));
|
|
14
|
+
class PlaceholderComponent extends react_1.default.Component {
|
|
15
|
+
constructor(props) {
|
|
16
|
+
super(props);
|
|
17
|
+
this.isEmpty = false;
|
|
18
|
+
this.state = {};
|
|
19
|
+
}
|
|
20
|
+
componentDidMount() {
|
|
21
|
+
if (this.isEmpty && editing_1.PagesEditor.isActive()) {
|
|
22
|
+
editing_1.PagesEditor.resetChromes();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
componentDidCatch(error) {
|
|
26
|
+
this.setState({ error });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Renders the placeholder when it is empty. The required CSS styles are applied to the placeholder in edit mode.
|
|
30
|
+
* @param {React.ReactNode | React.ReactElement[]} node react node
|
|
31
|
+
* @returns react node
|
|
32
|
+
* @deprecated use renderEmptyPlaceholder from react/nextjs import instead
|
|
33
|
+
*/
|
|
34
|
+
renderEmptyPlaceholder(node) {
|
|
35
|
+
return (0, placeholder_utils_1.renderEmptyPlaceholder)(node);
|
|
36
|
+
}
|
|
37
|
+
render() {
|
|
38
|
+
const childProps = Object.assign({}, this.props);
|
|
39
|
+
delete childProps.componentMap;
|
|
40
|
+
if (this.state.error) {
|
|
41
|
+
if (childProps.errorComponent) {
|
|
42
|
+
return react_1.default.createElement(childProps.errorComponent, { error: this.state.error });
|
|
43
|
+
}
|
|
44
|
+
return (react_1.default.createElement("div", { className: "sc-content-sdk-placeholder-error" },
|
|
45
|
+
"A rendering error occurred: ",
|
|
46
|
+
this.state.error.message,
|
|
47
|
+
"."));
|
|
48
|
+
}
|
|
49
|
+
const renderingData = childProps.rendering;
|
|
50
|
+
const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(renderingData, this.props.name, this.props.page.mode.isEditing);
|
|
51
|
+
this.isEmpty = !placeholderRenderings.length;
|
|
52
|
+
const components = PlaceholderComponent.getRenderedComponents(this.props, placeholderRenderings);
|
|
53
|
+
if (this.isEmpty) {
|
|
54
|
+
const rendered = this.props.renderEmpty ? this.props.renderEmpty(components) : components;
|
|
55
|
+
return this.props.page.mode.isEditing ? (0, placeholder_utils_1.renderEmptyPlaceholder)(rendered) : rendered;
|
|
56
|
+
}
|
|
57
|
+
else if (this.props.render) {
|
|
58
|
+
return this.props.render(components, placeholderRenderings, childProps);
|
|
59
|
+
}
|
|
60
|
+
else if (this.props.renderEach) {
|
|
61
|
+
const renderEach = this.props.renderEach;
|
|
62
|
+
return components.map((component, index) => {
|
|
63
|
+
if (component && component.props && component.props.type === 'text/sitecore') {
|
|
64
|
+
return component;
|
|
65
|
+
}
|
|
66
|
+
return renderEach(component, index);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return components;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.PlaceholderComponent = PlaceholderComponent;
|
|
75
|
+
/**
|
|
76
|
+
* Renders the components for the placeholder based on the provided rendering data.
|
|
77
|
+
* @param {PlaceholderProps} props placeholder component props
|
|
78
|
+
* @param {ComponentRendering[]} placeholderRenderings renderings within placeholder
|
|
79
|
+
* @returns {React.ReactNode | React.ReactElement[]} rendered components
|
|
80
|
+
*/
|
|
81
|
+
PlaceholderComponent.getRenderedComponents = (props, placeholderRenderings) => {
|
|
82
|
+
const { name, missingComponentComponent, hiddenRenderingComponent } = props;
|
|
83
|
+
const transformedComponents = placeholderRenderings
|
|
84
|
+
.map((componentRendering, index) => {
|
|
85
|
+
const key = componentRendering.uid || `component-${index}`;
|
|
86
|
+
const renderedProps = (0, placeholder_utils_1.getRenderedComponentProps)(props, componentRendering, key);
|
|
87
|
+
const component = (0, placeholder_utils_1.getComponentForRendering)(componentRendering, name, props.componentMap, hiddenRenderingComponent, missingComponentComponent);
|
|
88
|
+
let rendered = react_1.default.createElement(component.component, props.modifyComponentProps ? props.modifyComponentProps(renderedProps) : renderedProps);
|
|
89
|
+
if (!component.isEmpty) {
|
|
90
|
+
const errorBoundaryKey = rendered.type + '-' + index;
|
|
91
|
+
const disableSuspense = props.disableSuspense || false;
|
|
92
|
+
rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: props.errorComponent, componentLoadingMessage: props.componentLoadingMessage, isDynamic: component.dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
|
|
93
|
+
}
|
|
94
|
+
// if in edit mode then emit shallow chromes for hydration in Pages
|
|
95
|
+
if (props.page.mode.isEditing) {
|
|
96
|
+
return (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: componentRendering }, rendered));
|
|
97
|
+
}
|
|
98
|
+
return rendered;
|
|
99
|
+
})
|
|
100
|
+
.filter((element) => element); // remove nulls
|
|
101
|
+
if (props.page.mode.isEditing) {
|
|
102
|
+
return [
|
|
103
|
+
react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: props.rendering.uid, placeholderName: name, rendering: props.rendering }, transformedComponents),
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
return transformedComponents;
|
|
107
|
+
};
|
|
108
|
+
const PlaceholderWithComponentMap = (0, withComponentMap_1.withComponentMap)(PlaceholderComponent);
|
|
109
|
+
exports.Placeholder = (0, withSitecore_1.withSitecore)()(PlaceholderWithComponentMap);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ServerPlaceholder = void 0;
|
|
7
|
+
const models_1 = require("./models");
|
|
8
|
+
const placeholder_utils_1 = require("./placeholder-utils");
|
|
9
|
+
const react_1 = __importDefault(require("react"));
|
|
10
|
+
const PlaceholderMetadata_1 = require("./PlaceholderMetadata");
|
|
11
|
+
const ErrorBoundary_1 = __importDefault(require("../ErrorBoundary"));
|
|
12
|
+
/**
|
|
13
|
+
* React Server Component implementation for Placeholder.
|
|
14
|
+
* Renders components from the layout data for the given placeholder name, with consideration for page edit mode.
|
|
15
|
+
* Pulls components from the provided component map.
|
|
16
|
+
* @param {PlaceholderProps} props Placeholder props
|
|
17
|
+
* @returns {React.ReactNode | React.ReactElement[]} rendered component(s)
|
|
18
|
+
*/
|
|
19
|
+
const ServerPlaceholder = (props) => {
|
|
20
|
+
var _a;
|
|
21
|
+
if (!props.componentMap) {
|
|
22
|
+
throw new Error('Component map is required for ServerPlaceholder');
|
|
23
|
+
}
|
|
24
|
+
// get serializable props for client rendering
|
|
25
|
+
const serializableProps = models_1.nonSerializedPlaceholderProps.reduce((finalProps, prop) => {
|
|
26
|
+
delete finalProps[prop];
|
|
27
|
+
return finalProps;
|
|
28
|
+
}, Object.assign({}, props));
|
|
29
|
+
const placeholderRenderings = (0, placeholder_utils_1.getPlaceholderRenderings)(props.rendering, props.name, (_a = props.page) === null || _a === void 0 ? void 0 : _a.mode.isEditing);
|
|
30
|
+
const components = placeholderRenderings
|
|
31
|
+
.map((rendering, index) => {
|
|
32
|
+
const { component, isEmpty, componentType, dynamic } = (0, placeholder_utils_1.getComponentForRendering)(rendering, props.name, props.componentMap, props.hiddenRenderingComponent, props.missingComponentComponent);
|
|
33
|
+
const isClient = componentType === 'client';
|
|
34
|
+
const key = rendering.uid || `component-${index}`;
|
|
35
|
+
const finalPhProps = isClient ? serializableProps : props;
|
|
36
|
+
const renderedProps = (0, placeholder_utils_1.getRenderedComponentProps)(finalPhProps, rendering, key);
|
|
37
|
+
let rendered = react_1.default.createElement(component, props.modifyComponentProps ? props.modifyComponentProps(renderedProps) : renderedProps);
|
|
38
|
+
if (!isEmpty) {
|
|
39
|
+
const errorBoundaryKey = rendered.type + '-' + index;
|
|
40
|
+
const disableSuspense = props.disableSuspense || false;
|
|
41
|
+
rendered = (react_1.default.createElement(ErrorBoundary_1.default, { "data-testid": "error-boundary", key: errorBoundaryKey, errorComponent: props.errorComponent, componentLoadingMessage: props.componentLoadingMessage, isDynamic: dynamic, disableSuspense: disableSuspense, rendering: rendered.props.rendering }, rendered));
|
|
42
|
+
}
|
|
43
|
+
// if in edit mode then emit shallow chromes for hydration in Pages
|
|
44
|
+
if (props.page.mode.isEditing) {
|
|
45
|
+
const key = rendering.uid || `component-${index}`;
|
|
46
|
+
return (react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: key, rendering: rendering }, rendered));
|
|
47
|
+
}
|
|
48
|
+
return rendered;
|
|
49
|
+
})
|
|
50
|
+
.filter((element) => element);
|
|
51
|
+
const finalRendering = props.page.mode.isEditing
|
|
52
|
+
? [
|
|
53
|
+
react_1.default.createElement(PlaceholderMetadata_1.PlaceholderMetadata, { key: props.rendering.uid, placeholderName: props.name, rendering: props.rendering }, components),
|
|
54
|
+
]
|
|
55
|
+
: components;
|
|
56
|
+
const placeholderEmpty = !placeholderRenderings.length;
|
|
57
|
+
if (placeholderEmpty) {
|
|
58
|
+
const rendered = props.renderEmpty ? props.renderEmpty(finalRendering) : finalRendering;
|
|
59
|
+
return props.page.mode.isEditing ? (0, placeholder_utils_1.renderEmptyPlaceholder)(rendered) : rendered;
|
|
60
|
+
}
|
|
61
|
+
if (props.render) {
|
|
62
|
+
return props.render(components, placeholderRenderings, serializableProps);
|
|
63
|
+
}
|
|
64
|
+
else if (props.renderEach) {
|
|
65
|
+
const renderEach = props.renderEach;
|
|
66
|
+
return finalRendering.map((component, index) => {
|
|
67
|
+
if (component && component.props && component.props.type === 'text/sitecore') {
|
|
68
|
+
return component;
|
|
69
|
+
}
|
|
70
|
+
return renderEach(component, index);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return finalRendering;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.ServerPlaceholder = ServerPlaceholder;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.PlaceholderMetadata = exports.PlaceholderComponent = exports.Placeholder = exports.ServerPlaceholder = void 0;
|
|
18
|
+
var ServerPlaceholder_1 = require("./ServerPlaceholder");
|
|
19
|
+
Object.defineProperty(exports, "ServerPlaceholder", { enumerable: true, get: function () { return ServerPlaceholder_1.ServerPlaceholder; } });
|
|
20
|
+
var Placeholder_1 = require("./Placeholder");
|
|
21
|
+
Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
|
|
22
|
+
Object.defineProperty(exports, "PlaceholderComponent", { enumerable: true, get: function () { return Placeholder_1.PlaceholderComponent; } });
|
|
23
|
+
var PlaceholderMetadata_1 = require("./PlaceholderMetadata");
|
|
24
|
+
Object.defineProperty(exports, "PlaceholderMetadata", { enumerable: true, get: function () { return PlaceholderMetadata_1.PlaceholderMetadata; } });
|
|
25
|
+
__exportStar(require("./placeholder-utils"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nonSerializedPlaceholderProps = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Prop names from placeholder that cannot be serialized and passed from server to client side components
|
|
6
|
+
*/
|
|
7
|
+
exports.nonSerializedPlaceholderProps = [
|
|
8
|
+
'renderEmpty',
|
|
9
|
+
'render',
|
|
10
|
+
'renderEach',
|
|
11
|
+
'errorComponent',
|
|
12
|
+
'componentLoadingMessage',
|
|
13
|
+
'modifyComponentProps',
|
|
14
|
+
'componentMap',
|
|
15
|
+
'page',
|
|
16
|
+
'missingComponentComponent',
|
|
17
|
+
'hiddenRenderingComponent',
|
|
18
|
+
'rendering',
|
|
19
|
+
];
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.getComponentForRendering = exports.getRenderedComponentProps = exports.renderEmptyPlaceholder = exports.getSXAParams = exports.getPlaceholderRenderings = void 0;
|
|
18
|
+
const react_1 = __importDefault(require("react"));
|
|
19
|
+
const MissingComponent_1 = require("../MissingComponent");
|
|
20
|
+
const sharedTypes_1 = require("../sharedTypes");
|
|
21
|
+
const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
22
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
23
|
+
const HiddenRendering_1 = require("../HiddenRendering");
|
|
24
|
+
const FEaaSComponent_1 = require("../FEaaSComponent");
|
|
25
|
+
const FEaaSWrapper_1 = require("../FEaaSWrapper");
|
|
26
|
+
const BYOCComponent_1 = require("../BYOCComponent");
|
|
27
|
+
const BYOCWrapper_1 = require("../BYOCWrapper");
|
|
28
|
+
/**
|
|
29
|
+
* Get the renderings for the specified placeholder from the rendering data.
|
|
30
|
+
* @param {ComponentRendering | RouteData } rendering rendering data
|
|
31
|
+
* @param {string} name placeholder name
|
|
32
|
+
* @param {boolean} isEditing whether components should be rendered in editing mode
|
|
33
|
+
* @returns {ComponentRendering[]} array of component renderings
|
|
34
|
+
*/
|
|
35
|
+
const getPlaceholderRenderings = (rendering, name, isEditing) => {
|
|
36
|
+
let result;
|
|
37
|
+
let phName = name.slice();
|
|
38
|
+
/**
|
|
39
|
+
* Process (SXA) dynamic placeholders
|
|
40
|
+
* Find and replace the matching dynamic placeholder e.g 'nameOfContainer-{*}' with the requested e.g. 'nameOfContainer-1'.
|
|
41
|
+
* For Metadata EditMode, we need to keep the raw placeholder name in place.
|
|
42
|
+
*/
|
|
43
|
+
if (rendering === null || rendering === void 0 ? void 0 : rendering.placeholders) {
|
|
44
|
+
Object.keys(rendering.placeholders).forEach((placeholder) => {
|
|
45
|
+
const patternPlaceholder = (0, layout_1.isDynamicPlaceholder)(placeholder)
|
|
46
|
+
? (0, layout_1.getDynamicPlaceholderPattern)(placeholder)
|
|
47
|
+
: null;
|
|
48
|
+
if (patternPlaceholder && patternPlaceholder.test(phName)) {
|
|
49
|
+
if (isEditing) {
|
|
50
|
+
phName = placeholder;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
rendering.placeholders[phName] = rendering.placeholders[placeholder];
|
|
54
|
+
delete rendering.placeholders[placeholder];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (rendering && rendering.placeholders && Object.keys(rendering.placeholders).length > 0) {
|
|
60
|
+
result = rendering.placeholders[phName];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
result = null;
|
|
64
|
+
}
|
|
65
|
+
if (!result) {
|
|
66
|
+
console.warn(`Placeholder '${phName}' was not found in the current rendering data`, JSON.stringify(rendering, null, 2));
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
};
|
|
71
|
+
exports.getPlaceholderRenderings = getPlaceholderRenderings;
|
|
72
|
+
/**
|
|
73
|
+
* Get SXA specific params from Sitecore rendering params
|
|
74
|
+
* @param {ComponentRendering} rendering rendering object
|
|
75
|
+
* @returns {object} converted SXA params
|
|
76
|
+
*/
|
|
77
|
+
const getSXAParams = (rendering) => {
|
|
78
|
+
if (!rendering.params)
|
|
79
|
+
return {};
|
|
80
|
+
const { GridParameters, Styles } = rendering.params;
|
|
81
|
+
return ((GridParameters || Styles) && {
|
|
82
|
+
styles: `${GridParameters || ''} ${Styles || ''}`,
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
exports.getSXAParams = getSXAParams;
|
|
86
|
+
/**
|
|
87
|
+
* Renders the placeholder when it is empty. The required CSS styles are applied to the placeholder in edit mode.
|
|
88
|
+
* @param {React.ReactNode | React.ReactElement[]} node react node
|
|
89
|
+
* @returns react node
|
|
90
|
+
*/
|
|
91
|
+
const renderEmptyPlaceholder = (node) => {
|
|
92
|
+
return react_1.default.createElement("div", { className: "sc-jss-empty-placeholder" }, node);
|
|
93
|
+
};
|
|
94
|
+
exports.renderEmptyPlaceholder = renderEmptyPlaceholder;
|
|
95
|
+
/**
|
|
96
|
+
* Get component props to be passed to the rendered component.
|
|
97
|
+
* @param {PlaceholderProps} placeholderProps current placeholder props
|
|
98
|
+
* @param {ComponentRendering} componentRendering rendering to be rendered
|
|
99
|
+
* @param {string} renderingKey unique key to pass over to rendering props
|
|
100
|
+
* @returns {RenderedProps} props to be passed to the rendered component
|
|
101
|
+
*/
|
|
102
|
+
const getRenderedComponentProps = (placeholderProps, componentRendering, renderingKey) => {
|
|
103
|
+
const { fields: placeholderFields, params: placeholderParams } = placeholderProps, passThroughProps = __rest(placeholderProps, ["fields", "params"]);
|
|
104
|
+
delete passThroughProps.missingComponentComponent;
|
|
105
|
+
delete passThroughProps.hiddenRenderingComponent;
|
|
106
|
+
delete passThroughProps.name;
|
|
107
|
+
const fields = Object.assign(Object.assign({}, (placeholderFields || {})), (componentRendering.fields || {}));
|
|
108
|
+
const params = Object.assign(Object.assign({}, (placeholderParams || {})), (componentRendering.params || {}));
|
|
109
|
+
return Object.assign(Object.assign({ key: renderingKey }, passThroughProps), { fields, params: Object.assign(Object.assign({}, params), (0, exports.getSXAParams)(componentRendering)), rendering: componentRendering });
|
|
110
|
+
};
|
|
111
|
+
exports.getRenderedComponentProps = getRenderedComponentProps;
|
|
112
|
+
/**
|
|
113
|
+
* Get component implemenation from the component map based on the rendering definition.
|
|
114
|
+
* @param {ComponentRendering} renderingDefinition rendering data
|
|
115
|
+
* @param {string} placeholderName name of current placeholder
|
|
116
|
+
* @param {ComponentMap} componentMap component map for the current app
|
|
117
|
+
* @param {React.ComponentClass} [hiddenRenderingComponent] fallback implementation in to be rendered if the rendering is hidden
|
|
118
|
+
* @param {React.ComponentClass} [missingComponentComponent] fallback implementation in case no component is found in the component map
|
|
119
|
+
* @returns {ContentSDKComponet | null} component implementation or null if no component map is provided
|
|
120
|
+
*/
|
|
121
|
+
const getComponentForRendering = (renderingDefinition, placeholderName, componentMap, hiddenRenderingComponent, missingComponentComponent) => {
|
|
122
|
+
var _a, _b;
|
|
123
|
+
if (renderingDefinition.componentName === core_1.constants.HIDDEN_RENDERING_NAME) {
|
|
124
|
+
return {
|
|
125
|
+
component: hiddenRenderingComponent !== null && hiddenRenderingComponent !== void 0 ? hiddenRenderingComponent : HiddenRendering_1.HiddenRendering,
|
|
126
|
+
isEmpty: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else if (!renderingDefinition.componentName) {
|
|
130
|
+
console.error(`Placeholder ${placeholderName} contains unknown component ${renderingDefinition.componentName}. Ensure that a React component exists for it, and that it is registered in your component-map file.`);
|
|
131
|
+
return {
|
|
132
|
+
component: () => react_1.default.createElement(react_1.default.Fragment, null),
|
|
133
|
+
isEmpty: true,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
let component = null;
|
|
137
|
+
if (!componentMap || componentMap.size === 0) {
|
|
138
|
+
console.warn(`No components were available in component map to service request for component ${renderingDefinition}`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
component = componentMap.get(renderingDefinition.componentName);
|
|
142
|
+
}
|
|
143
|
+
if (!component) {
|
|
144
|
+
// Fallback/defaults for Sitecore Component renderings (in case not defined in component map)
|
|
145
|
+
if (renderingDefinition.componentName === FEaaSComponent_1.FEAAS_COMPONENT_RENDERING_NAME) {
|
|
146
|
+
return {
|
|
147
|
+
component: FEaaSComponent_1.FEaaSComponent,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
else if (renderingDefinition.componentName === FEaaSWrapper_1.FEAAS_WRAPPER_RENDERING_NAME) {
|
|
151
|
+
return {
|
|
152
|
+
component: FEaaSWrapper_1.FEaaSWrapper,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
else if (renderingDefinition.componentName === BYOCComponent_1.BYOC_COMPONENT_RENDERING_NAME) {
|
|
156
|
+
return {
|
|
157
|
+
component: BYOCComponent_1.BYOCComponent,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
else if (renderingDefinition.componentName === BYOCWrapper_1.BYOC_WRAPPER_RENDERING_NAME) {
|
|
161
|
+
// wrapping with error boundary could cause problems in case where parent component uses withPlaceholder HOC and tries to access its children props
|
|
162
|
+
// that's why we need to mark BYOC wrapper dynamic
|
|
163
|
+
return {
|
|
164
|
+
component: BYOCWrapper_1.BYOCWrapper,
|
|
165
|
+
dynamic: true,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
component: missingComponentComponent !== null && missingComponentComponent !== void 0 ? missingComponentComponent : MissingComponent_1.MissingComponent,
|
|
170
|
+
isEmpty: true,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// Render SXA Rendering Variant if available
|
|
174
|
+
const exportName = (_a = renderingDefinition.params) === null || _a === void 0 ? void 0 : _a.FieldNames;
|
|
175
|
+
const renderedComponent = exportName && exportName !== sharedTypes_1.DEFAULT_EXPORT_NAME
|
|
176
|
+
? component[exportName]
|
|
177
|
+
: component.default ||
|
|
178
|
+
component.Default ||
|
|
179
|
+
component;
|
|
180
|
+
// all dynamic elements will have a separate render prop
|
|
181
|
+
return {
|
|
182
|
+
component: renderedComponent,
|
|
183
|
+
dynamic: !!((_b = renderedComponent.render) === null || _b === void 0 ? void 0 : _b.preload),
|
|
184
|
+
componentType: component.componentType,
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
exports.getComponentForRendering = getComponentForRendering;
|
|
@@ -5,16 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.withPlaceholder = withPlaceholder;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const PlaceholderCommon_1 = require("../components/PlaceholderCommon");
|
|
9
8
|
const withComponentMap_1 = require("./withComponentMap");
|
|
10
9
|
const withSitecore_1 = require("./withSitecore");
|
|
10
|
+
const Placeholder_1 = require("../components/Placeholder");
|
|
11
11
|
/**
|
|
12
|
+
* HOC to provide client-side placeholder functionality to a component.
|
|
12
13
|
* @param {WithPlaceholderSpec} placeholders
|
|
13
14
|
* @param {WithPlaceholderOptions} [options]
|
|
14
15
|
*/
|
|
15
16
|
function withPlaceholder(placeholders, options) {
|
|
16
17
|
return (WrappedComponent) => {
|
|
17
|
-
class WithPlaceholder extends
|
|
18
|
+
class WithPlaceholder extends Placeholder_1.PlaceholderComponent {
|
|
18
19
|
constructor(props) {
|
|
19
20
|
super(props);
|
|
20
21
|
}
|
|
@@ -42,16 +43,15 @@ function withPlaceholder(placeholders, options) {
|
|
|
42
43
|
definitelyArrayPlacholders.forEach((placeholder) => {
|
|
43
44
|
let placeholderData;
|
|
44
45
|
if (typeof placeholder !== 'string' && placeholder.placeholder && placeholder.prop) {
|
|
45
|
-
placeholderData =
|
|
46
|
+
placeholderData = (0, Placeholder_1.getPlaceholderRenderings)(renderingData, placeholder.placeholder, childProps.page.mode.isEditing);
|
|
46
47
|
if (placeholderData) {
|
|
47
|
-
childProps[placeholder.prop] = this.
|
|
48
|
+
childProps[placeholder.prop] = Placeholder_1.PlaceholderComponent.getRenderedComponents(this.props, placeholderData);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
else {
|
|
51
|
-
placeholderData =
|
|
52
|
+
placeholderData = (0, Placeholder_1.getPlaceholderRenderings)(renderingData, placeholder, childProps.page.mode.isEditing);
|
|
52
53
|
if (placeholderData) {
|
|
53
|
-
childProps[placeholder] =
|
|
54
|
-
this.getComponentsForRenderingData(placeholderData);
|
|
54
|
+
childProps[placeholder] = Placeholder_1.PlaceholderComponent.getRenderedComponents(this.props, placeholderData);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.withServerPlaceholder = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const ServerPlaceholder_1 = require("../components/Placeholder/ServerPlaceholder");
|
|
9
|
+
const withServerPlaceholder = (Component) => {
|
|
10
|
+
return (props) => {
|
|
11
|
+
const placeholders = props.rendering.placeholders;
|
|
12
|
+
const phProps = {};
|
|
13
|
+
for (const placeholder of Object.keys(placeholders)) {
|
|
14
|
+
phProps[placeholder] = (react_1.default.createElement(ServerPlaceholder_1.ServerPlaceholder, { name: placeholder, rendering: props.rendering, page: props.page, componentMap: props.componentMap }));
|
|
15
|
+
}
|
|
16
|
+
const displayName = Component.displayName || Component.name || 'Component';
|
|
17
|
+
const propsCopy = Object.assign(Object.assign({}, props), { displayName });
|
|
18
|
+
return react_1.default.createElement(Component, Object.assign({}, propsCopy, { placeholders: phProps }));
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
exports.withServerPlaceholder = withServerPlaceholder;
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SitePathService = exports.DefaultEmptyFieldEditingComponentImage = exports.DefaultEmptyFieldEditingComponentText = exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecore = exports.withSitecore = exports.SitecoreProviderReactContext = exports.SitecoreProvider = exports.File = exports.Link = exports.BYOCWrapper = exports.fetchBYOCComponentServerProps = exports.BYOCComponent = exports.DesignLibrary = exports.FEaaSWrapper = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.RichText = exports.Image = exports.Placeholder = exports.Form = exports.mediaApi = exports.ErrorPage = exports.GraphQLRequestClient = exports.DefaultRetryStrategy = exports.DictionaryService = exports.EditMode = exports.getFieldValue = exports.getChildPlaceholder = exports.LayoutService = exports.LayoutServicePageState = exports.getDesignLibraryStylesheetLinks = exports.getContentStylesheetLink = exports.resetEditorChromes = exports.isEditorActive = exports.NativeDataFetcher = exports.MemoryCacheClient = exports.ClientError = exports.enableDebug = exports.constants = void 0;
|
|
3
|
+
exports.SitePathService = exports.ClientEditingChromesUpdate = exports.DefaultEmptyFieldEditingComponentImage = exports.DefaultEmptyFieldEditingComponentText = exports.EditingScripts = exports.withEmptyFieldEditingComponent = exports.withFieldMetadata = exports.withDatasourceCheck = exports.withPlaceholder = exports.withEditorChromes = exports.useSitecore = exports.withSitecore = exports.SitecoreProviderReactContext = exports.SitecoreProvider = exports.File = exports.Link = exports.BYOCWrapper = exports.fetchBYOCComponentServerProps = exports.BYOCComponent = exports.DesignLibrary = exports.FEaaSWrapper = exports.fetchFEaaSComponentServerProps = exports.FEaaSComponent = exports.DateField = exports.Text = exports.RichText = exports.Image = exports.ServerPlaceholder = exports.Placeholder = exports.Form = exports.mediaApi = exports.ErrorPage = exports.GraphQLRequestClient = exports.DefaultRetryStrategy = exports.DictionaryService = exports.EditMode = exports.getFieldValue = exports.getChildPlaceholder = exports.LayoutService = exports.LayoutServicePageState = exports.getDesignLibraryStylesheetLinks = exports.getContentStylesheetLink = exports.resetEditorChromes = exports.isEditorActive = exports.NativeDataFetcher = exports.MemoryCacheClient = exports.ClientError = exports.enableDebug = exports.constants = void 0;
|
|
4
4
|
var core_1 = require("@sitecore-content-sdk/core");
|
|
5
5
|
Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return core_1.constants; } });
|
|
6
6
|
Object.defineProperty(exports, "enableDebug", { enumerable: true, get: function () { return core_1.enableDebug; } });
|
|
@@ -30,6 +30,7 @@ var Form_1 = require("./components/Form");
|
|
|
30
30
|
Object.defineProperty(exports, "Form", { enumerable: true, get: function () { return Form_1.Form; } });
|
|
31
31
|
var Placeholder_1 = require("./components/Placeholder");
|
|
32
32
|
Object.defineProperty(exports, "Placeholder", { enumerable: true, get: function () { return Placeholder_1.Placeholder; } });
|
|
33
|
+
Object.defineProperty(exports, "ServerPlaceholder", { enumerable: true, get: function () { return Placeholder_1.ServerPlaceholder; } });
|
|
33
34
|
var Image_1 = require("./components/Image");
|
|
34
35
|
Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return Image_1.Image; } });
|
|
35
36
|
var RichText_1 = require("./components/RichText");
|
|
@@ -75,5 +76,7 @@ Object.defineProperty(exports, "EditingScripts", { enumerable: true, get: functi
|
|
|
75
76
|
var DefaultEmptyFieldEditingComponents_1 = require("./components/DefaultEmptyFieldEditingComponents");
|
|
76
77
|
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentText", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentText; } });
|
|
77
78
|
Object.defineProperty(exports, "DefaultEmptyFieldEditingComponentImage", { enumerable: true, get: function () { return DefaultEmptyFieldEditingComponents_1.DefaultEmptyFieldEditingComponentImage; } });
|
|
79
|
+
var ClientEditingChromesUpdate_1 = require("./components/ClientEditingChromesUpdate");
|
|
80
|
+
Object.defineProperty(exports, "ClientEditingChromesUpdate", { enumerable: true, get: function () { return ClientEditingChromesUpdate_1.ClientEditingChromesUpdate; } });
|
|
78
81
|
var site_1 = require("@sitecore-content-sdk/core/site");
|
|
79
82
|
Object.defineProperty(exports, "SitePathService", { enumerable: true, get: function () { return site_1.SitePathService; } });
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { isEditorActive, resetEditorChromes } from '@sitecore-content-sdk/core/editing';
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* Updates editing chromes in app router / RSC context.
|
|
6
|
+
* This ensures all the relevant Pages editing markup is applied once all client components are loaded.
|
|
7
|
+
*/
|
|
8
|
+
export const ClientEditingChromesUpdate = () => {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (isEditorActive()) {
|
|
11
|
+
resetEditorChromes();
|
|
12
|
+
}
|
|
13
|
+
}, []);
|
|
14
|
+
return React.createElement(React.Fragment, null);
|
|
15
|
+
};
|
|
@@ -16,7 +16,7 @@ import { EDITING_COMPONENT_ID, EDITING_COMPONENT_PLACEHOLDER, } from '@sitecore-
|
|
|
16
16
|
import { DesignLibraryStatus, getDesignLibraryStatusEvent, addComponentUpdateHandler, } from '@sitecore-content-sdk/core/editing';
|
|
17
17
|
import * as codegen from '@sitecore-content-sdk/core/codegen';
|
|
18
18
|
import { useSitecore } from '../enhancers/withSitecore';
|
|
19
|
-
import { PlaceholderMetadata } from './
|
|
19
|
+
import { PlaceholderMetadata } from './Placeholder';
|
|
20
20
|
let { getDesignLibraryImportMapEvent, getDesignLibraryComponentPropsEvent, addComponentPreviewHandler, } = codegen;
|
|
21
21
|
export const __mockDependencies = (mocks) => {
|
|
22
22
|
addComponentPreviewHandler = mocks.addComponentPreviewHandler;
|