@contentful/experiences-visual-editor-react 1.42.0-dev-20250630T1149-4da2e67.0 → 1.42.0-prerelease-20250620T0958-8e54295.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/renderApp.js CHANGED
@@ -37,8 +37,8 @@ function styleInject(css, ref) {
37
37
  }
38
38
  }
39
39
 
40
- var css_248z$4 = "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";
41
- styleInject(css_248z$4);
40
+ 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";
41
+ styleInject(css_248z$b);
42
42
 
43
43
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
44
44
 
@@ -43342,11 +43342,11 @@ const ComponentPropertyValueSchema$1 = z.discriminatedUnion('type', [
43342
43342
  ]);
43343
43343
  // TODO: finalize schema structure before release
43344
43344
  // https://contentful.atlassian.net/browse/LUMOS-523
43345
- const ParameterSchema$1 = z.object({
43345
+ const PatternPropertySchema$1 = z.object({
43346
43346
  type: z.literal('BoundValue'),
43347
43347
  path: z.string(),
43348
43348
  });
43349
- const ParametersSchema$1 = z.record(propertyKeySchema$1, ParameterSchema$1);
43349
+ const ParametersSchema$1 = z.record(propertyKeySchema$1, PatternPropertySchema$1);
43350
43350
  const BreakpointSchema$1 = z
43351
43351
  .object({
43352
43352
  id: propertyKeySchema$1,
@@ -43432,25 +43432,21 @@ const THUMBNAIL_IDS$1 = [
43432
43432
  // TODO: finalize schema structure before release
43433
43433
  // https://contentful.atlassian.net/browse/LUMOS-523
43434
43434
  const VariableMappingSchema$1 = z.object({
43435
- parameterId: propertyKeySchema$1,
43435
+ parameterDefinitionId: propertyKeySchema$1,
43436
43436
  type: z.literal('ContentTypeMapping'),
43437
43437
  pathsByContentType: z.record(z.string(), z.object({ path: z.string() })),
43438
43438
  });
43439
43439
  // TODO: finalize schema structure before release
43440
43440
  // https://contentful.atlassian.net/browse/LUMOS-523
43441
43441
  const ParameterDefinitionSchema$1 = z.object({
43442
- defaultSource: z
43443
- .strictObject({
43444
- type: z.enum(['Entry']),
43445
- contentTypeId: z.string(),
43446
- link: z.strictObject({
43447
- sys: z.strictObject({
43448
- type: z.literal('Link'),
43449
- id: z.string(),
43450
- linkType: z.enum(['Entry']),
43451
- }),
43442
+ defaultValue: z
43443
+ .record(z.string(), z.object({
43444
+ sys: z.object({
43445
+ type: z.literal('Link'),
43446
+ id: z.string(),
43447
+ linkType: z.enum(['Entry']),
43452
43448
  }),
43453
- })
43449
+ }))
43454
43450
  .optional(),
43455
43451
  contentTypes: z.record(z.string(), z.object({
43456
43452
  sys: z.object({
@@ -56854,9 +56850,9 @@ const cloneDeepAsPOJO = (obj) => {
56854
56850
  return JSON.parse(JSON.stringify(obj));
56855
56851
  };
56856
56852
 
56857
- var css_248z$3 = ".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";
56853
+ 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";
56858
56854
  var styles$3 = {"hitbox":"render-module_hitbox__l4ysJ","hitboxLower":"render-module_hitboxLower__tgsA1","canvasBottomSpacer":"render-module_canvasBottomSpacer__JuxVh","container":"render-module_container__-C3d7"};
56859
- styleInject(css_248z$3);
56855
+ styleInject(css_248z$a);
56860
56856
 
56861
56857
  // TODO: In order to support integrations without React, we should extract this heavy logic into simple
56862
56858
  // functions that we can reuse in other frameworks.
@@ -58249,6 +58245,9 @@ function getSchemaWithNodeType(nodeType) {
58249
58245
 
58250
58246
  } (dist));
58251
58247
 
58248
+ 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";
58249
+ styleInject(css_248z$8);
58250
+
58252
58251
  /**
58253
58252
  * These modes are ONLY intended to be internally used within the context of
58254
58253
  * editing an experience inside of Contentful Studio. i.e. these modes
@@ -58266,6 +58265,21 @@ var PostMessageMethods$1;
58266
58265
  PostMessageMethods["REQUESTED_ENTITIES"] = "REQUESTED_ENTITIES";
58267
58266
  })(PostMessageMethods$1 || (PostMessageMethods$1 = {}));
58268
58267
 
58268
+ 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";
58269
+ styleInject(css_248z$7);
58270
+
58271
+ var css_248z$6 = ".cf-heading {\n white-space: pre-line;\n}\n";
58272
+ styleInject(css_248z$6);
58273
+
58274
+ 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";
58275
+ styleInject(css_248z$5);
58276
+
58277
+ var css_248z$4 = ".cf-text {\n white-space: pre-line;\n}\n\n.cf-text-link .cf-text {\n margin: 0;\n}\n";
58278
+ styleInject(css_248z$4);
58279
+
58280
+ 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";
58281
+ styleInject(css_248z$3);
58282
+
58269
58283
  /**
58270
58284
  * These modes are ONLY intended to be internally used within the context of
58271
58285
  * editing an experience inside of Contentful Studio. i.e. these modes
@@ -58478,11 +58492,11 @@ const ComponentPropertyValueSchema = z.discriminatedUnion('type', [
58478
58492
  ]);
58479
58493
  // TODO: finalize schema structure before release
58480
58494
  // https://contentful.atlassian.net/browse/LUMOS-523
58481
- const ParameterSchema = z.object({
58495
+ const PatternPropertySchema = z.object({
58482
58496
  type: z.literal('BoundValue'),
58483
58497
  path: z.string(),
58484
58498
  });
58485
- const ParametersSchema = z.record(propertyKeySchema, ParameterSchema);
58499
+ const ParametersSchema = z.record(propertyKeySchema, PatternPropertySchema);
58486
58500
  const BreakpointSchema = z
58487
58501
  .object({
58488
58502
  id: propertyKeySchema,
@@ -58568,25 +58582,21 @@ const THUMBNAIL_IDS = [
58568
58582
  // TODO: finalize schema structure before release
58569
58583
  // https://contentful.atlassian.net/browse/LUMOS-523
58570
58584
  const VariableMappingSchema = z.object({
58571
- parameterId: propertyKeySchema,
58585
+ parameterDefinitionId: propertyKeySchema,
58572
58586
  type: z.literal('ContentTypeMapping'),
58573
58587
  pathsByContentType: z.record(z.string(), z.object({ path: z.string() })),
58574
58588
  });
58575
58589
  // TODO: finalize schema structure before release
58576
58590
  // https://contentful.atlassian.net/browse/LUMOS-523
58577
58591
  const ParameterDefinitionSchema = z.object({
58578
- defaultSource: z
58579
- .strictObject({
58580
- type: z.enum(['Entry']),
58581
- contentTypeId: z.string(),
58582
- link: z.strictObject({
58583
- sys: z.strictObject({
58584
- type: z.literal('Link'),
58585
- id: z.string(),
58586
- linkType: z.enum(['Entry']),
58587
- }),
58592
+ defaultValue: z
58593
+ .record(z.string(), z.object({
58594
+ sys: z.object({
58595
+ type: z.literal('Link'),
58596
+ id: z.string(),
58597
+ linkType: z.enum(['Entry']),
58588
58598
  }),
58589
- })
58599
+ }))
58590
58600
  .optional(),
58591
58601
  contentTypes: z.record(z.string(), z.object({
58592
58602
  sys: z.object({
@@ -58816,6 +58826,9 @@ var VisualEditorMode;
58816
58826
  VisualEditorMode["InjectScript"] = "injectScript";
58817
58827
  })(VisualEditorMode || (VisualEditorMode = {}));
58818
58828
 
58829
+ 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";
58830
+ styleInject(css_248z$2$1);
58831
+
58819
58832
  const Flex = reactExports.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) => {
58820
58833
  return (React$1.createElement("div", { id: id, ref: ref, style: {
58821
58834
  display: 'flex',
@@ -58838,6 +58851,12 @@ const Flex = reactExports.forwardRef(({ id, children, onMouseEnter, onMouseUp, o
58838
58851
  });
58839
58852
  Flex.displayName = 'Flex';
58840
58853
 
58854
+ 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";
58855
+ styleInject(css_248z$1$1);
58856
+
58857
+ 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";
58858
+ styleInject(css_248z$9);
58859
+
58841
58860
  const ColumnWrapper = reactExports.forwardRef((props, ref) => {
58842
58861
  return (React$1.createElement("div", { ref: ref, ...props, style: {
58843
58862
  ...(props.style || {}),