@contentful/experiences-visual-editor-react 1.42.0-beta.0 → 1.42.0-dev-20250617T0920-3f313ab.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/index.js +45 -18
- package/dist/index.js.map +1 -1
- package/dist/renderApp.js +45 -18
- package/dist/renderApp.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -12,8 +12,8 @@ import { v4 } from 'uuid';
|
|
|
12
12
|
import { createPortal } from 'react-dom';
|
|
13
13
|
import classNames from 'classnames';
|
|
14
14
|
|
|
15
|
-
var css_248z$
|
|
16
|
-
styleInject(css_248z$
|
|
15
|
+
var css_248z$b = "html,\nbody {\n margin: 0;\n padding: 0;\n}\n\n/*\n * All of these variables are tokens from Forma-36 and should not be adjusted as these\n * are global variables that may affect multiple places.\n * As our customers may use other design libraries, we try to avoid overlapping global\n * variables by always using the prefix `--exp-builder-` inside this SDK.\n */\n\n:root {\n /* Color tokens from Forma 36: https://f36.contentful.com/tokens/color-system */\n --exp-builder-blue100: #e8f5ff;\n --exp-builder-blue200: #ceecff;\n --exp-builder-blue300: #98cbff;\n --exp-builder-blue400: #40a0ff;\n --exp-builder-blue500: #036fe3;\n --exp-builder-blue600: #0059c8;\n --exp-builder-blue700: #0041ab;\n --exp-builder-blue800: #003298;\n --exp-builder-blue900: #002a8e;\n --exp-builder-gray100: #f7f9fa;\n --exp-builder-gray200: #e7ebee;\n --exp-builder-gray300: #cfd9e0;\n --exp-builder-gray400: #aec1cc;\n --exp-builder-gray500: #67728a;\n --exp-builder-gray600: #5a657c;\n --exp-builder-gray700: #414d63;\n --exp-builder-gray800: #1b273a;\n --exp-builder-gray900: #111b2b;\n --exp-builder-purple600: #6c3ecf;\n --exp-builder-red200: #ffe0e0;\n --exp-builder-red800: #7f0010;\n --exp-builder-color-white: #ffffff;\n --exp-builder-glow-primary: 0px 0px 0px 3px #e8f5ff;\n\n /* RGB colors for applying opacity */\n --exp-builder-blue100-rgb: 232, 245, 255;\n --exp-builder-blue300-rgb: 152, 203, 255;\n\n /* Spacing tokens from Forma 36: https://f36.contentful.com/tokens/spacing */\n --exp-builder-spacing-s: 0.75rem;\n --exp-builder-spacing-2xs: 0.25rem;\n\n /* Typography tokens from Forma 36: https://f36.contentful.com/tokens/typography */\n --exp-builder-font-size-l: 1rem;\n --exp-builder-font-size-m: 0.875rem;\n --exp-builder-font-stack-primary: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\n --exp-builder-line-height-condensed: 1.25;\n}\n";
|
|
16
|
+
styleInject(css_248z$b);
|
|
17
17
|
|
|
18
18
|
const INCOMING_EVENTS$1 = {
|
|
19
19
|
RequestEditorMode: 'requestEditorMode',
|
|
@@ -721,11 +721,11 @@ const ComponentPropertyValueSchema$1 = z.discriminatedUnion('type', [
|
|
|
721
721
|
]);
|
|
722
722
|
// TODO: finalize schema structure before release
|
|
723
723
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
724
|
-
const
|
|
724
|
+
const PatternPropertySchema$1 = z.object({
|
|
725
725
|
type: z.literal('BoundValue'),
|
|
726
726
|
path: z.string(),
|
|
727
727
|
});
|
|
728
|
-
const
|
|
728
|
+
const PatternPropertiesSchema$1 = z.record(propertyKeySchema$1, PatternPropertySchema$1);
|
|
729
729
|
const BreakpointSchema$1 = z
|
|
730
730
|
.object({
|
|
731
731
|
id: propertyKeySchema$1,
|
|
@@ -742,7 +742,7 @@ const BaseComponentTreeNodeSchema$1 = z.object({
|
|
|
742
742
|
displayName: z.string().optional(),
|
|
743
743
|
slotId: z.string().optional(),
|
|
744
744
|
variables: z.record(propertyKeySchema$1, ComponentPropertyValueSchema$1),
|
|
745
|
-
|
|
745
|
+
patternProperties: PatternPropertiesSchema$1.optional(),
|
|
746
746
|
});
|
|
747
747
|
const ComponentVariableSchema$1 = z.object({
|
|
748
748
|
displayName: z.string().optional(),
|
|
@@ -811,13 +811,13 @@ const THUMBNAIL_IDS$1 = [
|
|
|
811
811
|
// TODO: finalize schema structure before release
|
|
812
812
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
813
813
|
const VariableMappingSchema$1 = z.object({
|
|
814
|
-
|
|
814
|
+
patternPropertyDefinitionId: propertyKeySchema$1,
|
|
815
815
|
type: z.literal('ContentTypeMapping'),
|
|
816
816
|
pathsByContentType: z.record(z.string(), z.object({ path: z.string() })),
|
|
817
817
|
});
|
|
818
818
|
// TODO: finalize schema structure before release
|
|
819
819
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
820
|
-
const
|
|
820
|
+
const PatternPropertyDefinitionSchema$1 = z.object({
|
|
821
821
|
defaultValue: z
|
|
822
822
|
.record(z.string(), z.object({
|
|
823
823
|
sys: z.object({
|
|
@@ -835,7 +835,7 @@ const ParameterDefinitionSchema$1 = z.object({
|
|
|
835
835
|
}),
|
|
836
836
|
})),
|
|
837
837
|
});
|
|
838
|
-
const
|
|
838
|
+
const PatternPropertyDefinitionsSchema$1 = z.record(propertyKeySchema$1, PatternPropertyDefinitionSchema$1);
|
|
839
839
|
const VariableMappingsSchema$1 = z.record(propertyKeySchema$1, VariableMappingSchema$1);
|
|
840
840
|
const ComponentVariablesSchema$1 = z.record(z.string().regex(/^[a-zA-Z0-9-_]{1,54}$/), // Here the key is <variableName>_<nanoidId> so we need to allow for a longer length
|
|
841
841
|
ComponentVariableSchema$1);
|
|
@@ -844,7 +844,7 @@ const ComponentSettingsSchema$1 = z.object({
|
|
|
844
844
|
thumbnailId: z.enum(THUMBNAIL_IDS$1).optional(),
|
|
845
845
|
category: z.string().max(50, 'Category must contain at most 50 characters').optional(),
|
|
846
846
|
variableMappings: VariableMappingsSchema$1.optional(),
|
|
847
|
-
|
|
847
|
+
patternPropertyDefinitions: PatternPropertyDefinitionsSchema$1.optional(),
|
|
848
848
|
});
|
|
849
849
|
z.object({
|
|
850
850
|
componentTree: localeWrapper$1(ComponentTreeSchema$1),
|
|
@@ -3162,9 +3162,9 @@ const cloneDeepAsPOJO = (obj) => {
|
|
|
3162
3162
|
return JSON.parse(JSON.stringify(obj));
|
|
3163
3163
|
};
|
|
3164
3164
|
|
|
3165
|
-
var css_248z$
|
|
3165
|
+
var css_248z$a = ".render-module_hitbox__l4ysJ {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 10px;\n z-index: 1000000;\n}\n\n.render-module_hitboxLower__tgsA1 {\n position: absolute;\n bottom: -20px;\n left: 0;\n width: 100%;\n height: 20px;\n z-index: 1000000;\n}\n\n.render-module_canvasBottomSpacer__JuxVh {\n position: absolute;\n width: 100%;\n height: 50px;\n}\n\n.render-module_container__-C3d7 {\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\nbody {\n margin: 0;\n}\n\nhtml {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n\nhtml::-webkit-scrollbar {\n display: none;\n}\n";
|
|
3166
3166
|
var styles$3 = {"hitbox":"render-module_hitbox__l4ysJ","hitboxLower":"render-module_hitboxLower__tgsA1","canvasBottomSpacer":"render-module_canvasBottomSpacer__JuxVh","container":"render-module_container__-C3d7"};
|
|
3167
|
-
styleInject(css_248z$
|
|
3167
|
+
styleInject(css_248z$a);
|
|
3168
3168
|
|
|
3169
3169
|
// TODO: In order to support integrations without React, we should extract this heavy logic into simple
|
|
3170
3170
|
// functions that we can reuse in other frameworks.
|
|
@@ -3331,6 +3331,9 @@ const useEditorStore = create((set, get) => ({
|
|
|
3331
3331
|
},
|
|
3332
3332
|
}));
|
|
3333
3333
|
|
|
3334
|
+
var css_248z$8 = "/* Initially added with PR #253 for each component, this is now a global setting\n * It is recommended on MDN to use this as a default for layouting.\n*/\n* {\n box-sizing: border-box;\n}\n";
|
|
3335
|
+
styleInject(css_248z$8);
|
|
3336
|
+
|
|
3334
3337
|
/**
|
|
3335
3338
|
* These modes are ONLY intended to be internally used within the context of
|
|
3336
3339
|
* editing an experience inside of Contentful Studio. i.e. these modes
|
|
@@ -3348,6 +3351,21 @@ var PostMessageMethods$1;
|
|
|
3348
3351
|
PostMessageMethods["REQUESTED_ENTITIES"] = "REQUESTED_ENTITIES";
|
|
3349
3352
|
})(PostMessageMethods$1 || (PostMessageMethods$1 = {}));
|
|
3350
3353
|
|
|
3354
|
+
var css_248z$7 = "/* If the label is empty, still render the normal height by adding this pseudo element */\n.cf-button:empty::before {\n content: '';\n display: inline-block;\n}\n";
|
|
3355
|
+
styleInject(css_248z$7);
|
|
3356
|
+
|
|
3357
|
+
var css_248z$6 = ".cf-heading {\n white-space: pre-line;\n}\n";
|
|
3358
|
+
styleInject(css_248z$6);
|
|
3359
|
+
|
|
3360
|
+
var css_248z$5 = ".cf-richtext {\n white-space: pre-line;\n}\n\n.cf-richtext > *:first-child {\n margin-top: 0;\n}\n\n.cf-richtext > *:last-child {\n margin-bottom: 0;\n}\n";
|
|
3361
|
+
styleInject(css_248z$5);
|
|
3362
|
+
|
|
3363
|
+
var css_248z$4 = ".cf-text {\n white-space: pre-line;\n}\n\n.cf-text-link .cf-text {\n margin: 0;\n}\n";
|
|
3364
|
+
styleInject(css_248z$4);
|
|
3365
|
+
|
|
3366
|
+
var css_248z$3 = "@import url(https://fonts.googleapis.com/css2?family=Archivo:ital,wght@0,400;0,500;0,600;1,400;1,600&display=swap);\n\n:root {\n /* All sizing comments based of 16px base body font size */\n\n /* color */\n --cf-color-white: #fff;\n --cf-color-black: #000;\n --cf-color-gray100: #f7f9fa;\n --cf-color-gray400: #aec1cc;\n --cf-color-gray400-rgb: 174, 193, 204;\n\n /* spacing */\n --cf-spacing-0: 0rem; /* 0px */\n --cf-spacing-1: 0.125rem; /* 2px */\n --cf-spacing-2: 0.25rem; /* 4px */\n --cf-spacing-3: 0.375rem; /* 6px */\n --cf-spacing-4: 0.5rem; /* 8px */\n --cf-spacing-5: 0.625rem; /* 10px */\n --cf-spacing-6: 0.75rem; /* 12px */\n --cf-spacing-7: 0.875rem; /* 14px */\n --cf-spacing-8: 1rem; /* 16px */\n --cf-spacing-9: 1.25rem; /* 20px */\n --cf-spacing-10: 1.5rem; /* 24px */\n --cf-spacing-11: 1.75rem; /* 28px */\n --cf-spacing-12: 2rem; /* 32px */\n --cf-spacing-13: 2.25rem; /* 36px */\n\n /* font-size */\n --cf-text-xs: 0.75rem; /* 12px */\n --cf-text-sm: 0.875rem; /* 14px */\n --cf-text-base: 1rem; /* 16px */\n --cf-text-lg: 1.125rem; /* 18px */\n --cf-text-xl: 1.25rem; /* 20px */\n --cf-text-2xl: 1.5rem; /* 24px */\n --cf-text-3xl: 2rem; /* 32px */\n --cf-text-4xl: 2.75rem; /* 44px */\n\n /* font-weight */\n --cf-font-light: 300;\n --cf-font-normal: 400;\n --cf-font-medium: 500;\n --cf-font-semibold: 600;\n --cf-font-bold: 700;\n --cf-font-extra-bold: 800;\n --cf-font-black: 900;\n\n /* border-radius */\n --cf-border-radius-none: 0px; /* none */\n --cf-border-radius-sm: 0.125rem; /* 2px */\n --cf-border-radius: 0.25rem; /* 4px */\n --cf-border-radius-md: 0.375rem; /* 6px */\n --cf-border-radius-lg: 0.5rem; /* 8px */\n --cf-border-radius-xl: 0.75rem; /* 12px */\n --cf-border-radius-2xl: 1rem; /* 16px */\n --cf-border-radius-3xl: 1.5rem; /* 24px */\n --cf-border-radius-full: 9999px; /* full */\n\n /* font-family */\n --cf-font-family-sans: Archivo, Helvetica, Arial, sans-serif;\n --cf-font-family-serif: Georgia, Cambria, Times New Roman, Times, serif;\n\n /* max widths */\n --cf-max-width-full: 100%;\n\n /* component specific colors */\n --cf-button-bg: var(--cf-color-black);\n --cf-button-color: var(--cf-color-white);\n --cf-text-color: var(--cf-color-black);\n}\n\ndiv.cf-placeholder-wrapper {\n /* Required for the absolute positioned icon to render in the center */\n position: relative;\n}\n\nimg.cf-placeholder-image {\n background-color: var(--cf-color-gray100);\n outline-offset: -2px;\n outline: 2px solid rgba(var(--cf-color-gray400-rgb), 0.5);\n width: 100%;\n height: 100%;\n}\n\nsvg.cf-placeholder-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: var(--cf-text-3xl);\n width: var(--cf-text-3xl);\n max-height: 100%;\n max-width: 100%;\n}\n\nsvg.cf-placeholder-icon path {\n fill: var(--cf-color-gray400);\n}\n";
|
|
3367
|
+
styleInject(css_248z$3);
|
|
3368
|
+
|
|
3351
3369
|
/**
|
|
3352
3370
|
* These modes are ONLY intended to be internally used within the context of
|
|
3353
3371
|
* editing an experience inside of Contentful Studio. i.e. these modes
|
|
@@ -3560,11 +3578,11 @@ const ComponentPropertyValueSchema = z.discriminatedUnion('type', [
|
|
|
3560
3578
|
]);
|
|
3561
3579
|
// TODO: finalize schema structure before release
|
|
3562
3580
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
3563
|
-
const
|
|
3581
|
+
const PatternPropertySchema = z.object({
|
|
3564
3582
|
type: z.literal('BoundValue'),
|
|
3565
3583
|
path: z.string(),
|
|
3566
3584
|
});
|
|
3567
|
-
const
|
|
3585
|
+
const PatternPropertiesSchema = z.record(propertyKeySchema, PatternPropertySchema);
|
|
3568
3586
|
const BreakpointSchema = z
|
|
3569
3587
|
.object({
|
|
3570
3588
|
id: propertyKeySchema,
|
|
@@ -3581,7 +3599,7 @@ const BaseComponentTreeNodeSchema = z.object({
|
|
|
3581
3599
|
displayName: z.string().optional(),
|
|
3582
3600
|
slotId: z.string().optional(),
|
|
3583
3601
|
variables: z.record(propertyKeySchema, ComponentPropertyValueSchema),
|
|
3584
|
-
|
|
3602
|
+
patternProperties: PatternPropertiesSchema.optional(),
|
|
3585
3603
|
});
|
|
3586
3604
|
const ComponentVariableSchema = z.object({
|
|
3587
3605
|
displayName: z.string().optional(),
|
|
@@ -3650,13 +3668,13 @@ const THUMBNAIL_IDS = [
|
|
|
3650
3668
|
// TODO: finalize schema structure before release
|
|
3651
3669
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
3652
3670
|
const VariableMappingSchema = z.object({
|
|
3653
|
-
|
|
3671
|
+
patternPropertyDefinitionId: propertyKeySchema,
|
|
3654
3672
|
type: z.literal('ContentTypeMapping'),
|
|
3655
3673
|
pathsByContentType: z.record(z.string(), z.object({ path: z.string() })),
|
|
3656
3674
|
});
|
|
3657
3675
|
// TODO: finalize schema structure before release
|
|
3658
3676
|
// https://contentful.atlassian.net/browse/LUMOS-523
|
|
3659
|
-
const
|
|
3677
|
+
const PatternPropertyDefinitionSchema = z.object({
|
|
3660
3678
|
defaultValue: z
|
|
3661
3679
|
.record(z.string(), z.object({
|
|
3662
3680
|
sys: z.object({
|
|
@@ -3674,7 +3692,7 @@ const ParameterDefinitionSchema = z.object({
|
|
|
3674
3692
|
}),
|
|
3675
3693
|
})),
|
|
3676
3694
|
});
|
|
3677
|
-
const
|
|
3695
|
+
const PatternPropertyDefinitionsSchema = z.record(propertyKeySchema, PatternPropertyDefinitionSchema);
|
|
3678
3696
|
const VariableMappingsSchema = z.record(propertyKeySchema, VariableMappingSchema);
|
|
3679
3697
|
const ComponentVariablesSchema = z.record(z.string().regex(/^[a-zA-Z0-9-_]{1,54}$/), // Here the key is <variableName>_<nanoidId> so we need to allow for a longer length
|
|
3680
3698
|
ComponentVariableSchema);
|
|
@@ -3683,7 +3701,7 @@ const ComponentSettingsSchema = z.object({
|
|
|
3683
3701
|
thumbnailId: z.enum(THUMBNAIL_IDS).optional(),
|
|
3684
3702
|
category: z.string().max(50, 'Category must contain at most 50 characters').optional(),
|
|
3685
3703
|
variableMappings: VariableMappingsSchema.optional(),
|
|
3686
|
-
|
|
3704
|
+
patternPropertyDefinitions: PatternPropertyDefinitionsSchema.optional(),
|
|
3687
3705
|
});
|
|
3688
3706
|
z.object({
|
|
3689
3707
|
componentTree: localeWrapper(ComponentTreeSchema),
|
|
@@ -3894,6 +3912,9 @@ var VisualEditorMode;
|
|
|
3894
3912
|
VisualEditorMode["InjectScript"] = "injectScript";
|
|
3895
3913
|
})(VisualEditorMode || (VisualEditorMode = {}));
|
|
3896
3914
|
|
|
3915
|
+
var css_248z$2$1 = ".contentful-container {\n position: relative;\n display: flex;\n pointer-events: all;\n}\n\n.contentful-container::-webkit-scrollbar {\n display: none; /* Safari and Chrome */\n}\n\n.cf-single-column-wrapper {\n position: relative;\n}\n\n.cf-container-wrapper {\n position: relative;\n width: 100%;\n}\n\n.contentful-container:after {\n content: '';\n display: block;\n position: absolute;\n pointer-events: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-x: clip;\n font-family: var(--exp-builder-font-stack-primary);\n font-size: 12px;\n color: var(--exp-builder-gray400);\n z-index: 1;\n}\n\n.contentful-section-label:after {\n content: 'Section';\n}\n\n.contentful-container-label:after {\n content: 'Container';\n}\n\n/* used by ContentfulSectionAsHyperlink.tsx */\n\n.contentful-container-link,\n.contentful-container-link:active,\n.contentful-container-link:visited,\n.contentful-container-link:hover,\n.contentful-container-link:read-write,\n.contentful-container-link:focus-visible {\n color: inherit;\n text-decoration: unset;\n outline: unset;\n}\n";
|
|
3916
|
+
styleInject(css_248z$2$1);
|
|
3917
|
+
|
|
3897
3918
|
const Flex = forwardRef(({ id, children, onMouseEnter, onMouseUp, onMouseLeave, onMouseDown, onClick, flex, flexBasis, flexShrink, flexDirection, gap, justifyContent, justifyItems, justifySelf, alignItems, alignSelf, alignContent, order, flexWrap, flexGrow, className, cssStyles, ...props }, ref) => {
|
|
3898
3919
|
return (React.createElement("div", { id: id, ref: ref, style: {
|
|
3899
3920
|
display: 'flex',
|
|
@@ -3916,6 +3937,12 @@ const Flex = forwardRef(({ id, children, onMouseEnter, onMouseUp, onMouseLeave,
|
|
|
3916
3937
|
});
|
|
3917
3938
|
Flex.displayName = 'Flex';
|
|
3918
3939
|
|
|
3940
|
+
var css_248z$1$1 = ".cf-divider {\n display: contents;\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.cf-divider hr {\n border: none;\n}\n\n/* For the editor mode add this 10px tolerance to make it easier picking up the divider component.\n * Using the DND zone as precondition makes sure that we don't render this pseudo element in delivery. */\n\n[data-ctfl-zone-id='root'] .cf-divider::before {\n content: \"\";\n position: absolute;\n top: -5px;\n left: -5px;\n bottom: -5px;\n right: -5px;\n pointer-events: all;\n}\n";
|
|
3941
|
+
styleInject(css_248z$1$1);
|
|
3942
|
+
|
|
3943
|
+
var css_248z$9 = ".cf-columns {\n display: flex;\n gap: 24px;\n grid-template-columns: repeat(12, 1fr);\n flex-direction: column;\n min-height: 0; /* NEW */\n min-width: 0; /* NEW; needed for Firefox */\n}\n\n@media (min-width: 768px) {\n .cf-columns {\n display: grid;\n }\n}\n\n.cf-single-column-wrapper {\n position: relative;\n display: flex;\n}\n\n.cf-single-column {\n pointer-events: all;\n}\n\n.cf-single-column-wrapper:after {\n content: '';\n display: block;\n position: absolute;\n pointer-events: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-x: clip;\n font-family: var(--exp-builder-font-stack-primary);\n font-size: 12px;\n color: var(--exp-builder-gray400);\n z-index: 1;\n}\n\n.cf-single-column-label:after {\n content: 'Column';\n}\n";
|
|
3944
|
+
styleInject(css_248z$9);
|
|
3945
|
+
|
|
3919
3946
|
const ColumnWrapper = forwardRef((props, ref) => {
|
|
3920
3947
|
return (React.createElement("div", { ref: ref, ...props, style: {
|
|
3921
3948
|
...(props.style || {}),
|