@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260320043430 → 0.8.1-dev.20260320053940

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 CHANGED
@@ -2101,7 +2101,7 @@ var DataList = (props) => {
2101
2101
  }
2102
2102
  }
2103
2103
  }, [props.dataset]);
2104
- function getNestedProperty(obj, path) {
2104
+ function getNestedProperty2(obj, path) {
2105
2105
  if (path.includes(".")) {
2106
2106
  return path.split(".").reduce((prev, curr) => prev ? prev[curr] : null, obj);
2107
2107
  } else if (Array.isArray(obj[path])) {
@@ -2385,7 +2385,7 @@ var DataList = (props) => {
2385
2385
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("tbody", { className: "divide-y divide-gray-200 ", children: props.dataset?.result?.map((dataitem, index) => {
2386
2386
  let validityClass = "";
2387
2387
  console.log("dataitem", dataitem);
2388
- if (props.recordValidityColumnName && getNestedProperty(dataitem, props.recordValidityColumnName) == false) {
2388
+ if (props.recordValidityColumnName && getNestedProperty2(dataitem, props.recordValidityColumnName) == false) {
2389
2389
  validityClass = "bg-alert-200";
2390
2390
  }
2391
2391
  return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("tr", { className: validityClass, children: props?.columns?.map((column, colindex) => {
@@ -2403,7 +2403,7 @@ var DataList = (props) => {
2403
2403
  ViewControl_default,
2404
2404
  {
2405
2405
  controlType: column.controlType,
2406
- value: getNestedProperty(
2406
+ value: getNestedProperty2(
2407
2407
  dataitem,
2408
2408
  column.name
2409
2409
  ),
@@ -2420,7 +2420,7 @@ var DataList = (props) => {
2420
2420
  ViewControl_default,
2421
2421
  {
2422
2422
  controlType: column.controlType,
2423
- value: getNestedProperty(dataitem, column.name) || column.emptyValueLabel,
2423
+ value: getNestedProperty2(dataitem, column.name) || column.emptyValueLabel,
2424
2424
  format: column.format,
2425
2425
  customProps: column.customProps
2426
2426
  }
@@ -2430,7 +2430,7 @@ var DataList = (props) => {
2430
2430
  ViewControl_default,
2431
2431
  {
2432
2432
  controlType: column.controlType,
2433
- value: getNestedProperty(dataitem, column.name),
2433
+ value: getNestedProperty2(dataitem, column.name),
2434
2434
  format: column.format,
2435
2435
  customProps: column.customProps
2436
2436
  }
@@ -2535,7 +2535,7 @@ var DataList = (props) => {
2535
2535
  var DataList_default = DataList;
2536
2536
 
2537
2537
  // src/components/pageRenderingEngine/PageBodyRenderer.tsx
2538
- var import_react49 = __toESM(require("react"));
2538
+ var import_react52 = __toESM(require("react"));
2539
2539
 
2540
2540
  // src/components/pageRenderingEngine/nodes/ParagraphNode.tsx
2541
2541
  var import_react37 = __toESM(require("react"));
@@ -2548,19 +2548,57 @@ var TextNode = (props) => {
2548
2548
  };
2549
2549
  function cssStringToJson(cssString) {
2550
2550
  const styleObject = {};
2551
- const matches = cssString.match(/([\w-]+)\s*:\s*([^;]+)\s*;/);
2552
- if (matches && matches.length === 3) {
2553
- const property = matches[1].trim();
2554
- const value = matches[2].trim();
2555
- {
2556
- }
2557
- styleObject[property] = value;
2551
+ const matches = cssString?.match(/([\w-]+)\s*:\s*([^;]+)\s*;/g);
2552
+ if (matches) {
2553
+ matches.forEach((match) => {
2554
+ const parts = match.match(/([\w-]+)\s*:\s*([^;]+)\s*;/);
2555
+ if (parts && parts.length === 3) {
2556
+ const property = parts[1].trim();
2557
+ const value = parts[2].trim();
2558
+ styleObject[property] = value;
2559
+ }
2560
+ });
2558
2561
  }
2559
2562
  return styleObject;
2560
2563
  }
2561
- const Formats = ["", "font-semibold"];
2562
- const styles = cssStringToJson(props.node.style || "");
2563
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { ...styles }, className: props.node.format < Formats.length ? Formats[props.node.format] : "", children: props.node.text });
2564
+ function toCamelCase(str) {
2565
+ return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
2566
+ }
2567
+ function convertKeysToCamelCase(obj) {
2568
+ if (Array.isArray(obj)) {
2569
+ return obj.map(convertKeysToCamelCase);
2570
+ } else if (obj !== null && typeof obj === "object") {
2571
+ return Object.fromEntries(
2572
+ Object.entries(obj).filter(([_, value]) => value !== "").map(([key, value]) => [
2573
+ toCamelCase(key),
2574
+ convertKeysToCamelCase(value)
2575
+ ])
2576
+ );
2577
+ }
2578
+ return obj;
2579
+ }
2580
+ function getFormatClass(format) {
2581
+ const classes = [];
2582
+ if (format === 1) classes.push("font-medium");
2583
+ if (format === 2) classes.push("italic");
2584
+ if (format === 3) classes.push("font-medium italic");
2585
+ if (format === 8) classes.push("underline");
2586
+ if (format === 9) classes.push("font-medium underline");
2587
+ if (format === 10) classes.push("italic underline");
2588
+ if (format === 11) classes.push("font-medium italic underline");
2589
+ if (format === 256) classes.push("lowercase");
2590
+ if (format === 512) classes.push("uppercase");
2591
+ if (format === 1024) classes.push("capitalize");
2592
+ return classes.join(" ");
2593
+ }
2594
+ const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));
2595
+ function replacePlaceholders(template, dataItem) {
2596
+ return template.replace(/{(\w+)}/g, (_, key) => {
2597
+ return key in dataItem ? dataItem[key] : `{${key}}`;
2598
+ });
2599
+ }
2600
+ const displayText = props.linkText ? props.linkText : props.node.text;
2601
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { ...styles }, className: getFormatClass(props.node.format), children: props.dataitem && props.linkText ? displayText : props.dataitem ? replacePlaceholders(props.node.text, props.dataitem) : props.node.text });
2564
2602
  };
2565
2603
  var TextNode_default = TextNode;
2566
2604
 
@@ -2646,39 +2684,171 @@ var EquationNode = ({ node }) => {
2646
2684
  };
2647
2685
  var EquationNode_default = EquationNode;
2648
2686
 
2649
- // src/components/pageRenderingEngine/nodes/ParagraphNode.tsx
2687
+ // src/components/pageRenderingEngine/nodes/DatafieldNode.tsx
2650
2688
  var import_jsx_runtime46 = require("react/jsx-runtime");
2689
+ function getNestedProperty(obj, path) {
2690
+ if (!obj || !path) return null;
2691
+ if (path.includes(".")) {
2692
+ return path.split(".").reduce((prev, curr) => prev ? prev[curr] : null, obj);
2693
+ } else if (Array.isArray(obj[path])) {
2694
+ return obj[path].map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { children: item }, index));
2695
+ } else {
2696
+ return obj[path];
2697
+ }
2698
+ }
2699
+ var DatafieldNode = (props) => {
2700
+ function cssStringToJson(cssString) {
2701
+ const styleObject = {};
2702
+ const matches = cssString?.match(/([\w-]+)\s*:\s*([^;]+)\s*;/g);
2703
+ if (matches) {
2704
+ matches.forEach((match) => {
2705
+ const parts = match.match(/([\w-]+)\s*:\s*([^;]+)\s*;/);
2706
+ if (parts && parts.length === 3) {
2707
+ const property = parts[1].trim();
2708
+ const value2 = parts[2].trim();
2709
+ styleObject[property] = value2;
2710
+ }
2711
+ });
2712
+ }
2713
+ return styleObject;
2714
+ }
2715
+ function toCamelCase(str) {
2716
+ return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
2717
+ }
2718
+ function convertKeysToCamelCase(obj) {
2719
+ if (!obj || typeof obj !== "object") return obj;
2720
+ return Object.fromEntries(
2721
+ Object.entries(obj).map(([key, value2]) => [toCamelCase(key), value2])
2722
+ );
2723
+ }
2724
+ const Formats = [
2725
+ "",
2726
+ "font-medium",
2727
+ "italic",
2728
+ "font-medium italic",
2729
+ "",
2730
+ "",
2731
+ "",
2732
+ "",
2733
+ "underline",
2734
+ "font-medium underline",
2735
+ "italic underline",
2736
+ "italic underline font-medium"
2737
+ ];
2738
+ const styles = convertKeysToCamelCase(cssStringToJson(props.node.style));
2739
+ const fieldName = props.node.fieldName;
2740
+ const value = props.dataitem ? getNestedProperty(props.dataitem, fieldName) : null;
2741
+ console.log(fieldName, value, "haha");
2742
+ const isEmptyValue = value === null || value === void 0 || value === "" || Array.isArray(value) && value.length === 0 || typeof value === "object" && Object.keys(value).length === 0;
2743
+ const maxLines = props.node.maxLines;
2744
+ if (maxLines && Number(maxLines) > 0) {
2745
+ Object.assign(styles, {
2746
+ display: "-webkit-box",
2747
+ overflow: "hidden",
2748
+ WebkitBoxOrient: "vertical",
2749
+ WebkitLineClamp: String(maxLines)
2750
+ });
2751
+ }
2752
+ const dataType = props.node.dataType;
2753
+ if (isEmptyValue) {
2754
+ return null;
2755
+ }
2756
+ if (dataType == "rawContent") {
2757
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2758
+ PageBodyRenderer_default,
2759
+ {
2760
+ rawBody: value ?? `@databound[${fieldName}]`,
2761
+ routeParameters: props.routeParameters,
2762
+ query: props.query,
2763
+ session: props.session,
2764
+ host: props.host,
2765
+ path: props.path,
2766
+ apiBaseUrl: props.apiBaseUrl,
2767
+ breadcrumb: props.breadcrumb,
2768
+ donotApplyContainerClass: true
2769
+ }
2770
+ );
2771
+ }
2772
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2773
+ "span",
2774
+ {
2775
+ className: `datafield-node ${props.node.format < Formats.length ? Formats[props.node.format] : ""}`,
2776
+ style: styles,
2777
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2778
+ ViewControl_default,
2779
+ {
2780
+ controlType: dataType,
2781
+ value: value ?? `@databound[${fieldName}]`
2782
+ }
2783
+ )
2784
+ }
2785
+ );
2786
+ };
2787
+ var DatafieldNode_default = DatafieldNode;
2788
+
2789
+ // src/components/pageRenderingEngine/nodes/ParagraphNode.tsx
2790
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2651
2791
  var ParagraphNode = (props) => {
2652
2792
  const NodeTypes2 = {
2653
2793
  ["text"]: TextNode_default,
2654
2794
  ["linebreak"]: LineBreakNode_default,
2655
2795
  ["link"]: LinkNode_default,
2796
+ ["datafield"]: DatafieldNode_default,
2656
2797
  ["equation"]: EquationNode_default,
2657
2798
  ["svg-icon"]: SVGIconNode_default
2658
2799
  };
2659
2800
  const FormatClass = {
2660
- "center": "text-center"
2801
+ "center": "text-center",
2802
+ "right": "text-right"
2661
2803
  };
2662
2804
  {
2663
2805
  }
2664
2806
  let formatClasses = FormatClass[props.node.format] || "";
2665
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "my-1 " + formatClasses, children: [
2666
- props.node.children && props.node.children.map((node, index) => {
2807
+ const isInlineOnlyParent = props.parentTag === "summary";
2808
+ const hasChildren = props.node.children && props.node.children.length > 0;
2809
+ if (isInlineOnlyParent) {
2810
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: hasChildren && props.node.children.map((node, index) => {
2667
2811
  const SelectedNode = NodeTypes2[node.type];
2668
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_react37.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(SelectedNode, { node }) }, index);
2812
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react37.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2813
+ SelectedNode,
2814
+ {
2815
+ node,
2816
+ dataitem: props.dataitem,
2817
+ session: props.session,
2818
+ apiBaseUrl: props.apiBaseUrl,
2819
+ routeParameters: props.routeParameters
2820
+ }
2821
+ ) }, index);
2822
+ }) });
2823
+ }
2824
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: " " + formatClasses, children: [
2825
+ hasChildren && props.node.children.map((node, index) => {
2826
+ const SelectedNode = NodeTypes2[node.type];
2827
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react37.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2828
+ SelectedNode,
2829
+ {
2830
+ node,
2831
+ dataitem: props.dataitem,
2832
+ session: props.session,
2833
+ apiBaseUrl: props.apiBaseUrl,
2834
+ routeParameters: props.routeParameters
2835
+ }
2836
+ ) }, index);
2669
2837
  }),
2670
- props.node.children.length == 0 && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "py-0.5 lg:py-1.5" })
2838
+ !hasChildren && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "py-1.5 lg:py-2" })
2671
2839
  ] });
2672
2840
  };
2673
2841
  var ParagraphNode_default = ParagraphNode;
2674
2842
 
2675
2843
  // src/components/pageRenderingEngine/nodes/HeadingNode.tsx
2676
2844
  var import_react38 = __toESM(require("react"));
2677
- var import_jsx_runtime47 = require("react/jsx-runtime");
2845
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2678
2846
  var HeadingNode = (props) => {
2679
2847
  const NodeTypes2 = {
2680
2848
  ["text"]: TextNode_default,
2681
- ["link"]: LinkNode_default
2849
+ ["link"]: LinkNode_default,
2850
+ // ["linebreak"]: LineBreakNodeNew,
2851
+ ["datafield"]: DatafieldNode_default
2682
2852
  };
2683
2853
  const HeadingTag = `${props.node.tag}`;
2684
2854
  const FormatClass = {
@@ -2687,12 +2857,12 @@ var HeadingNode = (props) => {
2687
2857
  {
2688
2858
  }
2689
2859
  let formatClasses = FormatClass[props.node.format] || "";
2690
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: import_react38.default.createElement(
2860
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: import_react38.default.createElement(
2691
2861
  HeadingTag,
2692
2862
  { className: formatClasses },
2693
2863
  props.node.children && props.node.children.map((childNode, index) => {
2694
2864
  const SelectedNode = NodeTypes2[childNode.type];
2695
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react38.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SelectedNode, { node: childNode }) }, index);
2865
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_react38.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectedNode, { node: childNode, dataitem: props.dataitem, session: props.session, apiBaseUrl: props.apiBaseUrl, routeParameters: props.routeParameters }) }, index);
2696
2866
  })
2697
2867
  ) });
2698
2868
  };
@@ -2703,34 +2873,54 @@ var import_react40 = __toESM(require("react"));
2703
2873
 
2704
2874
  // src/components/pageRenderingEngine/nodes/ListItemNode.tsx
2705
2875
  var import_react39 = __toESM(require("react"));
2706
- var import_jsx_runtime48 = require("react/jsx-runtime");
2876
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2707
2877
  var ListItemNode = (props) => {
2708
2878
  const NodeTypes2 = {
2709
- ["text"]: TextNode_default,
2710
- ["linebreak"]: LineBreakNode_default,
2711
- ["link"]: LinkNode_default
2879
+ text: TextNode_default,
2880
+ linebreak: LineBreakNode_default,
2881
+ link: LinkNode_default,
2882
+ list: ListNode_default
2712
2883
  };
2713
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("li", { children: props.node.children && props.node.children.map((node, index) => {
2884
+ let foundFirstBreak = false;
2885
+ const firstTextChild = props.node.children?.find((c) => c.type === "text");
2886
+ let liStyle = {};
2887
+ if (firstTextChild?.style) {
2888
+ const match = firstTextChild.style.match(/font-size\s*:\s*([^;]+);?/);
2889
+ if (match) {
2890
+ liStyle.fontSize = match[1].trim();
2891
+ }
2892
+ }
2893
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("li", { style: liStyle, children: props.node.children && props.node.children.map((node, index) => {
2714
2894
  const SelectedNode = NodeTypes2[node.type];
2715
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_react39.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectedNode, { node }) }, index);
2895
+ if (node.type === "linebreak") {
2896
+ if (!foundFirstBreak) {
2897
+ foundFirstBreak = true;
2898
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {}, index);
2899
+ } else {
2900
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "py-1 lg:py-2" }, index);
2901
+ }
2902
+ } else {
2903
+ foundFirstBreak = false;
2904
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react39.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectedNode, { node, dataitem: props.dataitem, routeParameters: props.routeParameters }) }, index);
2905
+ }
2716
2906
  }) });
2717
2907
  };
2718
2908
  var ListItemNode_default = ListItemNode;
2719
2909
 
2720
2910
  // src/components/pageRenderingEngine/nodes/ListNode.tsx
2721
- var import_jsx_runtime49 = require("react/jsx-runtime");
2911
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2722
2912
  var ListNode = (props) => {
2723
2913
  const NodeTypes2 = {
2724
2914
  listitem: ListItemNode_default
2725
2915
  };
2726
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_react40.default.Fragment, { children: [
2727
- props.node.listType == "bullet" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ul", { children: props.node.children && props.node.children.map((node, index) => {
2916
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react40.default.Fragment, { children: [
2917
+ props.node.listType == "bullet" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("ul", { children: props.node.children && props.node.children.map((node, index) => {
2728
2918
  const SelectedNode = NodeTypes2[node.type];
2729
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react40.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectedNode, { node }) }, index);
2919
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react40.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(SelectedNode, { node, dataitem: props.dataitem, routeParameters: props.routeParameters }) }, index);
2730
2920
  }) }),
2731
- props.node.listType == "number" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("ol", { children: props.node.children && props.node.children.map((node, index) => {
2921
+ props.node.listType == "number" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("ol", { children: props.node.children && props.node.children.map((node, index) => {
2732
2922
  const SelectedNode = NodeTypes2[node.type];
2733
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react40.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectedNode, { node }) }, index);
2923
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react40.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(SelectedNode, { node, dataitem: props.dataitem, routeParameters: props.routeParameters }) }, index);
2734
2924
  }) })
2735
2925
  ] });
2736
2926
  };
@@ -2738,56 +2928,118 @@ var ListNode_default = ListNode;
2738
2928
 
2739
2929
  // src/components/pageRenderingEngine/nodes/QuoteNode.tsx
2740
2930
  var import_react41 = __toESM(require("react"));
2741
- var import_jsx_runtime50 = require("react/jsx-runtime");
2931
+ var import_jsx_runtime51 = require("react/jsx-runtime");
2742
2932
  var QuoteNode = (props) => {
2743
2933
  const NodeTypes2 = {
2744
2934
  ["text"]: TextNode_default,
2745
2935
  ["linebreak"]: LineBreakNode_default,
2746
2936
  ["link"]: LinkNode_default
2747
2937
  };
2748
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("blockquote", { children: props.node.children && props.node.children.map((node, index) => {
2938
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("blockquote", { children: props.node.children && props.node.children.map((node, index) => {
2749
2939
  const SelectedNode = NodeTypes2[node.type];
2750
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react41.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(SelectedNode, { node }) }, index);
2940
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react41.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(SelectedNode, { node, session: props.session, apiBaseUrl: props.apiBaseUrl, routeParameters: props.routeParameters }) }, index);
2751
2941
  }) });
2752
2942
  };
2753
2943
  var QuoteNode_default = QuoteNode;
2754
2944
 
2755
2945
  // src/components/pageRenderingEngine/nodes/CodeNode.tsx
2756
- var import_react42 = __toESM(require("react"));
2757
- var import_jsx_runtime51 = require("react/jsx-runtime");
2946
+ var import_react43 = __toESM(require("react"));
2947
+
2948
+ // src/components/CopyButton.tsx
2949
+ var import_react42 = require("react");
2950
+ var import_jsx_runtime52 = require("react/jsx-runtime");
2951
+ function CopyButton({ text }) {
2952
+ const [copied, setCopied] = (0, import_react42.useState)(false);
2953
+ const timeoutRef = (0, import_react42.useRef)(null);
2954
+ (0, import_react42.useEffect)(() => {
2955
+ return () => {
2956
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
2957
+ };
2958
+ }, []);
2959
+ const handleCopy = async () => {
2960
+ try {
2961
+ await navigator.clipboard.writeText(text);
2962
+ setCopied(true);
2963
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
2964
+ timeoutRef.current = setTimeout(() => setCopied(false), 2e3);
2965
+ } catch (err) {
2966
+ console.error("Failed to copy: ", err);
2967
+ }
2968
+ };
2969
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
2970
+ "button",
2971
+ {
2972
+ onClick: handleCopy,
2973
+ className: "flex gap-1 items-center hover:text-white transition",
2974
+ children: [
2975
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2976
+ "svg",
2977
+ {
2978
+ width: "16",
2979
+ height: "16",
2980
+ viewBox: "0 0 24 24",
2981
+ className: "w-4 h-4",
2982
+ fill: "currentColor",
2983
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
2984
+ "path",
2985
+ {
2986
+ fillRule: "evenodd",
2987
+ clipRule: "evenodd",
2988
+ d: "M12 4C10.8954 4 10 4.89543 10 6H14C14 4.89543 13.1046 4 12 4ZM8.53513 4C9.22675 2.8044 10.5194 2 12 2C13.4806 2 14.7733 2.8044 15.4649 4H17C18.6569 4 20 5.34315 20 7V19C20 20.6569 18.6569 22 17 22H7C5.34315 22 4 20.6569 4 19V7C4 5.34315 5.34315 4 7 4H8.53513ZM8 6H7C6.44772 6 6 6.44772 6 7V19C6 19.5523 6.44772 20 7 20H17C17.5523 20 18 19.5523 18 19V7C18 6.44772 17.5523 6 17 6H16C16 7.10457 15.1046 8 14 8H10C8.89543 8 8 7.10457 8 6Z"
2989
+ }
2990
+ )
2991
+ }
2992
+ ),
2993
+ copied ? "Copied!" : "Copy code"
2994
+ ]
2995
+ }
2996
+ );
2997
+ }
2998
+
2999
+ // src/components/pageRenderingEngine/nodes/CodeNode.tsx
3000
+ var import_jsx_runtime53 = require("react/jsx-runtime");
2758
3001
  var CodeNode = (props) => {
2759
3002
  const NodeTypes2 = {
2760
3003
  ["text"]: TextNode_default,
2761
3004
  ["linebreak"]: LineBreakNode_default,
2762
3005
  ["link"]: LinkNode_default
2763
3006
  };
2764
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("code", { children: props.node.children && props.node.children.map((node, index) => {
2765
- const SelectedNode = NodeTypes2[node.type];
2766
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react42.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(SelectedNode, { node }) }, index);
2767
- }) });
3007
+ const textContent = props.node?.children?.map((node) => {
3008
+ if (node.type === "text") return node.text || "";
3009
+ if (node.type === "linebreak") return "\n";
3010
+ if (node.type === "link") return node.text || node.url || "";
3011
+ return "";
3012
+ }).join("") ?? "";
3013
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "code-block", children: [
3014
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center relative text-gray-200 bg-gray-800 px-4 py-2.5 text-xs font-sans justify-between rounded-t-md", children: [
3015
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: "Code Snippet" }),
3016
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CopyButton, { text: textContent })
3017
+ ] }),
3018
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("code", { className: "block bg-gray-900 text-gray-100 p-4 rounded-b-md text-sm whitespace-pre-wrap", children: props.node.children && props.node.children.map((node, index) => {
3019
+ const SelectedNode = NodeTypes2[node.type];
3020
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react43.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(SelectedNode, { node, session: props.session, apiBaseUrl: props.apiBaseUrl, routeParameters: props.routeParameters }) }, index);
3021
+ }) })
3022
+ ] });
2768
3023
  };
2769
3024
  var CodeNode_default = CodeNode;
2770
3025
 
2771
3026
  // src/components/pageRenderingEngine/nodes/HorizontalRuleNode.tsx
2772
- var import_jsx_runtime52 = require("react/jsx-runtime");
3027
+ var import_jsx_runtime54 = require("react/jsx-runtime");
2773
3028
  var HorizontalRuleNode = (props) => {
2774
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("hr", {});
3029
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("hr", {});
2775
3030
  };
2776
3031
  var HorizontalRuleNode_default = HorizontalRuleNode;
2777
3032
 
2778
- // src/components/pageRenderingEngine/nodes/LayoutContainerNode.tsx
2779
- var import_react45 = __toESM(require("react"));
2780
-
2781
3033
  // src/components/pageRenderingEngine/nodes/LayoutItemNode.tsx
2782
- var import_react44 = __toESM(require("react"));
3034
+ var import_react49 = __toESM(require("react"));
2783
3035
 
2784
3036
  // src/components/pageRenderingEngine/nodes/ImageNode.tsx
2785
- var import_react43 = __toESM(require("react"));
2786
- var import_jsx_runtime53 = require("react/jsx-runtime");
3037
+ var import_react44 = __toESM(require("react"));
3038
+ var import_jsx_runtime55 = require("react/jsx-runtime");
2787
3039
  var ImageNode = (props) => {
2788
3040
  const { node, apiBaseUrl = "" } = props;
2789
3041
  let imageUrl = node.imageUrl.startsWith("http") ? node.imageUrl : `${apiBaseUrl}/digitalassets/storefront/${node.imageUrl}`;
2790
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react43.default.Fragment, { children: node.width ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { style: { width: node.width }, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3042
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react44.default.Fragment, { children: node.width ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { style: { width: node.width }, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2791
3043
  "img",
2792
3044
  {
2793
3045
  loading: "lazy",
@@ -2797,7 +3049,7 @@ var ImageNode = (props) => {
2797
3049
  height: node.intrinsicHeight,
2798
3050
  alt: node.title
2799
3051
  }
2800
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3052
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2801
3053
  "img",
2802
3054
  {
2803
3055
  loading: "lazy",
@@ -2811,8 +3063,204 @@ var ImageNode = (props) => {
2811
3063
  };
2812
3064
  var ImageNode_default = ImageNode;
2813
3065
 
3066
+ // src/components/pageRenderingEngine/nodes/WidgetNode.tsx
3067
+ var import_react45 = require("react");
3068
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3069
+ var WidgetNode = (props) => {
3070
+ const getWidgetParameters = () => {
3071
+ const widgetInputParameters = { ...props.routeParameters ?? {} };
3072
+ const rawWidgetParams = props.node?.widgetParameters ?? props.node?.widgetParams;
3073
+ let widgetParameters = {};
3074
+ const isJSON = (str) => {
3075
+ if (typeof str !== "string") return false;
3076
+ str = str.trim();
3077
+ return str.startsWith("{") && str.endsWith("}") || str.startsWith("[") && str.endsWith("]");
3078
+ };
3079
+ if (rawWidgetParams) {
3080
+ if (typeof rawWidgetParams === "string" && isJSON(rawWidgetParams)) {
3081
+ widgetParameters = JSON.parse(rawWidgetParams);
3082
+ } else if (typeof rawWidgetParams === "object") {
3083
+ widgetParameters = rawWidgetParams;
3084
+ }
3085
+ }
3086
+ const resolveValue = (val) => {
3087
+ if (typeof val === "string") {
3088
+ const m = /^\{(.+)\}$/.exec(val);
3089
+ if (m) {
3090
+ const actualKey = m[1];
3091
+ return props.routeParameters?.[actualKey] ?? val;
3092
+ }
3093
+ return val;
3094
+ } else if (Array.isArray(val)) {
3095
+ return val.map(resolveValue);
3096
+ } else if (val && typeof val === "object") {
3097
+ const out = {};
3098
+ for (const k of Object.keys(val)) {
3099
+ out[k] = resolveValue(val[k]);
3100
+ }
3101
+ return out;
3102
+ }
3103
+ return val;
3104
+ };
3105
+ Object.keys(widgetParameters).forEach((key) => {
3106
+ const rawVal = widgetParameters[key];
3107
+ if (rawVal === "route") {
3108
+ if (key === "itemPath") {
3109
+ widgetInputParameters[key] = props.path;
3110
+ } else {
3111
+ widgetInputParameters[key] = widgetInputParameters[key] ?? null;
3112
+ }
3113
+ } else {
3114
+ widgetInputParameters[key] = resolveValue(rawVal);
3115
+ }
3116
+ });
3117
+ widgetInputParameters["widgetTitle"] = props.node?.widgetTitle;
3118
+ return widgetInputParameters;
3119
+ };
3120
+ const SelectedWidget = props.widgetRegistry?.[props.node.widgetCode];
3121
+ if (!SelectedWidget) {
3122
+ console.warn("Widget not found:", props.node.widgetCode);
3123
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
3124
+ "Widget not found: ",
3125
+ props.node.widgetCode
3126
+ ] });
3127
+ }
3128
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react45.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "container mt-2", children: "..." }), children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3129
+ SelectedWidget,
3130
+ {
3131
+ params: getWidgetParameters(),
3132
+ query: props.query,
3133
+ session: props.session,
3134
+ host: props.host,
3135
+ path: props.path,
3136
+ apiBaseUrl: props.apiBaseUrl
3137
+ }
3138
+ ) });
3139
+ };
3140
+ var WidgetNode_default = WidgetNode;
3141
+
3142
+ // src/components/pageRenderingEngine/nodes/IframeClient.tsx
3143
+ var import_react47 = __toESM(require("react"));
3144
+
3145
+ // src/components/IFrameLoaderView.tsx
3146
+ var import_react46 = __toESM(require("react"));
3147
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3148
+ var IFrameLoaderView = (props) => {
3149
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react46.default.Fragment, { children: [
3150
+ props.isDataFound == null && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "mt-4 bg-gray-200 rounded-md p-4 animate-pulse", children: [
3151
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center mb-4", children: [
3152
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 h-8 w-8 rounded-full animate-pulse" }),
3153
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "ml-2", children: [
3154
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 h-3 w-16 animate-pulse" }),
3155
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 h-2 w-12 animate-pulse" })
3156
+ ] })
3157
+ ] }),
3158
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-3 gap-4 mt-6", children: [
3159
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "animate-pulse", children: [
3160
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-12 mb-2" }),
3161
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-24 mb-2" }),
3162
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-32 mb-2" }),
3163
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-16 mb-2" }),
3164
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-28 mb-2" })
3165
+ ] }),
3166
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "animate-pulse", children: [
3167
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-12 mb-2" }),
3168
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-24 mb-2" }),
3169
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-32 mb-2" }),
3170
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-16 mb-2" }),
3171
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-28 mb-2" })
3172
+ ] }),
3173
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "animate-pulse", children: [
3174
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-12 mb-2" }),
3175
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-24 mb-2" }),
3176
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-32 mb-2" }),
3177
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-16 mb-2" }),
3178
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "bg-gray-300 rounded-full h-3 w-28 mb-2" })
3179
+ ] })
3180
+ ] })
3181
+ ] }) }),
3182
+ props.children
3183
+ ] });
3184
+ };
3185
+ var IFrameLoaderView_default = IFrameLoaderView;
3186
+
3187
+ // src/components/pageRenderingEngine/nodes/IframeClient.tsx
3188
+ var import_jsx_runtime58 = require("react/jsx-runtime");
3189
+ var IframeClient = ({ src }) => {
3190
+ const iframeRef = (0, import_react47.useRef)(null);
3191
+ const [iframeHeight, setIframeHeight] = (0, import_react47.useState)("100%");
3192
+ const [isDataFound, setIsDataFound] = (0, import_react47.useState)(null);
3193
+ (0, import_react47.useEffect)(() => {
3194
+ const handleReceiveMessage = (event) => {
3195
+ const eventName = event?.data?.eventName;
3196
+ const payload = event?.data?.payload;
3197
+ if (eventName === "SET_HEIGHT" && payload?.height) {
3198
+ let height = 500;
3199
+ if (payload.height > 500) {
3200
+ height = payload.height + 50;
3201
+ }
3202
+ setIframeHeight(`${height}px`);
3203
+ }
3204
+ };
3205
+ window.addEventListener("message", handleReceiveMessage);
3206
+ return () => window.removeEventListener("message", handleReceiveMessage);
3207
+ }, []);
3208
+ (0, import_react47.useEffect)(() => {
3209
+ const handleResize = () => {
3210
+ if (iframeRef.current) {
3211
+ iframeRef.current.contentWindow?.postMessage({ eventName: "RESIZE" }, "*");
3212
+ }
3213
+ };
3214
+ window.addEventListener("resize", handleResize);
3215
+ return () => window.removeEventListener("resize", handleResize);
3216
+ }, []);
3217
+ const handleIframeLoad = () => {
3218
+ setIsDataFound(true);
3219
+ };
3220
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react47.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IFrameLoaderView_default, { isDataFound, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3221
+ "iframe",
3222
+ {
3223
+ ref: iframeRef,
3224
+ src,
3225
+ className: "w-full h-full border-none",
3226
+ scrolling: "no",
3227
+ onLoad: handleIframeLoad
3228
+ }
3229
+ ) }) });
3230
+ };
3231
+ var IframeClient_default = IframeClient;
3232
+
3233
+ // src/components/pageRenderingEngine/nodes/EmbedNode.tsx
3234
+ var import_jsx_runtime59 = require("react/jsx-runtime");
3235
+ var EmbedNode = (props) => {
3236
+ let src;
3237
+ if (props.node.provider == "youtube") {
3238
+ src = `https://www.youtube-nocookie.com/embed/${props.node.embedSrc}`;
3239
+ } else if (props.node.provider == "bunny") {
3240
+ src = `https://iframe.mediadelivery.net/embed/${props.node.embedSrc}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`;
3241
+ } else {
3242
+ src = props.node.embedSrc;
3243
+ }
3244
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "aspect-video", children: src && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IframeClient_default, { src }) });
3245
+ };
3246
+ var EmbedNode_default = EmbedNode;
3247
+
3248
+ // src/components/pageRenderingEngine/nodes/VideoNode.tsx
3249
+ var import_react48 = __toESM(require("react"));
3250
+ var import_jsx_runtime60 = require("react/jsx-runtime");
3251
+ var VideoNode = (props) => {
3252
+ let src;
3253
+ if (props.node.provider == "youtube") {
3254
+ src = `https://www.youtube-nocookie.com/embed/${props.node.videoId}`;
3255
+ } else if (props.node.provider == "bunny") {
3256
+ src = `https://iframe.mediadelivery.net/embed/${props.node.videoId}?autoplay=false&loop=false&muted=false&preload=true&responsive=true`;
3257
+ }
3258
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react48.default.Fragment, { children: src && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("iframe", { className: "w-full aspect-video rounded", src, loading: "lazy", allow: "accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;", allowFullScreen: true }) });
3259
+ };
3260
+ var VideoNode_default = VideoNode;
3261
+
2814
3262
  // src/components/pageRenderingEngine/nodes/LayoutItemNode.tsx
2815
- var import_jsx_runtime54 = require("react/jsx-runtime");
3263
+ var import_jsx_runtime61 = require("react/jsx-runtime");
2816
3264
  var LayoutItemNode = (props) => {
2817
3265
  const NodeTypes2 = {
2818
3266
  ["paragraph"]: ParagraphNode_default,
@@ -2823,7 +3271,11 @@ var LayoutItemNode = (props) => {
2823
3271
  ["horizontalrule"]: HorizontalRuleNode_default,
2824
3272
  ["image"]: ImageNode_default,
2825
3273
  ["layout-container"]: LayoutContainerNode_default,
2826
- ["link"]: LinkNode_default
3274
+ ["link"]: LinkNode_default,
3275
+ ["widget"]: WidgetNode_default,
3276
+ ["youtube"]: VideoNode_default,
3277
+ ["video"]: VideoNode_default,
3278
+ ["embed"]: EmbedNode_default
2827
3279
  };
2828
3280
  let cssClasses = "";
2829
3281
  if (props.order) {
@@ -2841,6 +3293,7 @@ var LayoutItemNode = (props) => {
2841
3293
  }
2842
3294
  if (props.node.itemBorderRadius) {
2843
3295
  styles.borderRadius = props.node.itemBorderRadius;
3296
+ styles.overflow = "hidden";
2844
3297
  }
2845
3298
  function removeParagraphsAtStartAndEnd(layoutItem) {
2846
3299
  let startIndex = 0;
@@ -2857,6 +3310,8 @@ var LayoutItemNode = (props) => {
2857
3310
  }
2858
3311
  if (startIndex <= endIndex) {
2859
3312
  layoutItem.children = layoutItem.children.slice(startIndex, endIndex + 1);
3313
+ } else {
3314
+ layoutItem.children = [];
2860
3315
  }
2861
3316
  return layoutItem;
2862
3317
  }
@@ -2866,201 +3321,160 @@ var LayoutItemNode = (props) => {
2866
3321
  } else {
2867
3322
  updatedLayout = removeParagraphsAtStartAndEnd(props.node);
2868
3323
  }
2869
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "" + cssClasses, style: { ...styles }, children: updatedLayout.children.map((node, index) => {
3324
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react49.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "layout-item " + cssClasses, style: { ...styles }, children: updatedLayout.children.map((node, index) => {
2870
3325
  {
2871
3326
  }
2872
3327
  const SelectedNode = NodeTypes2[node.type];
2873
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react44.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(SelectedNode, { node }) }, index);
2874
- }) });
3328
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react49.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
3329
+ SelectedNode,
3330
+ {
3331
+ node,
3332
+ routeParameters: props.routeParameters,
3333
+ query: props.query,
3334
+ session: props.session,
3335
+ host: props.host,
3336
+ path: props.path,
3337
+ apiBaseUrl: props.apiBaseUrl
3338
+ }
3339
+ ) }, index);
3340
+ }) }) });
2875
3341
  };
2876
3342
  var LayoutItemNode_default = LayoutItemNode;
2877
3343
 
2878
- // src/components/pageRenderingEngine/nodes/LayoutContainerNode.tsx
2879
- var import_jsx_runtime55 = require("react/jsx-runtime");
2880
- var VERTICAL_ALIGNMENT_CLASSES = {
2881
- "start": "items-start",
2882
- "center": "items-center",
2883
- "end": "items-end",
2884
- "stretch": "items-stretch",
2885
- "baseline": "items-baseline"
2886
- };
2887
- var LAYOUTGRID_COLS_CLASSES = {
2888
- "1fr": "layout-grid-col-1",
2889
- "1fr 1fr": "layout-grid-col-2-equal",
2890
- "1fr 2fr": "layout-grid-col-2-widths-33-67",
2891
- "2fr 1fr": "layout-grid-col-2-widths-67-33",
2892
- "3fr 2fr": "layout-grid-col-2-widths-60-40",
2893
- "3fr 1fr": "layout-grid-col-2-widths-75-25",
2894
- "1fr 1fr 1fr": "layout-grid-col-3-equal",
2895
- "1fr 2fr 1fr": "layout-grid-col-3-widths-25-50-25",
2896
- "1fr 6fr 1fr": "layout-grid-col-3-widths-15-70-15",
2897
- "1fr 1fr 1fr 1fr": "layout-grid-col-4-equal"
3344
+ // src/components/utilities/AssetUtility.tsx
3345
+ var AssetUtility = class {
3346
+ constructor() {
3347
+ }
3348
+ static resolveUrl(apiBaseUrl, url) {
3349
+ if (!url) return void 0;
3350
+ if (url.startsWith("http")) return url;
3351
+ if (!apiBaseUrl) return url;
3352
+ return `${apiBaseUrl}/digitalassets-management/${url}`;
3353
+ }
2898
3354
  };
3355
+ var AssetUtility_default = AssetUtility;
3356
+
3357
+ // src/components/pageRenderingEngine/nodes/LayoutContainerNode.tsx
3358
+ var import_jsx_runtime62 = require("react/jsx-runtime");
2899
3359
  var LayoutContainerNode = (props) => {
2900
- const { node, apiBaseUrl = "" } = props;
2901
- let gridCssClasses = LAYOUTGRID_COLS_CLASSES[node.templateColumns];
2902
- if (node.contentVerticalAlignment) {
2903
- {
2904
- }
2905
- gridCssClasses = gridCssClasses + " " + (VERTICAL_ALIGNMENT_CLASSES[node.contentVerticalAlignment] || "");
2906
- }
2907
- let columnGap = "0.5rem";
2908
- if (node.columnGap && node.columnGap != "") {
2909
- columnGap = node.columnGap;
3360
+ const VERTICAL_ALIGNMENT_CLASSES = {
3361
+ start: "items-start",
3362
+ center: "items-center place-content-center",
3363
+ end: "items-end",
3364
+ stretch: "items-stretch",
3365
+ baseline: "items-baseline"
3366
+ };
3367
+ const LAYOUTGRID_COLS_CLASSES = {
3368
+ "1fr": "layout-grid-col-1",
3369
+ "1fr 1fr": "layout-grid-col-2-equal",
3370
+ "1fr 2fr": "layout-grid-col-2-widths-33-67",
3371
+ "2fr 1fr": "layout-grid-col-2-widths-67-33",
3372
+ "3fr 2fr": "layout-grid-col-2-widths-60-40",
3373
+ "3fr 1fr": "layout-grid-col-2-widths-75-25",
3374
+ "1fr 1fr 1fr": "layout-grid-col-3-equal",
3375
+ "1fr 2fr 1fr": "layout-grid-col-3-widths-25-50-25",
3376
+ "1fr 6fr 1fr": "layout-grid-col-3-widths-15-70-15",
3377
+ "1fr 1fr 1fr 1fr": "layout-grid-col-4-equal"
3378
+ };
3379
+ const sectionWidth = props.node.sectionWidth || "fixed";
3380
+ let gridCssClasses = LAYOUTGRID_COLS_CLASSES[props.node.templateColumns] || "";
3381
+ if (props.node.contentVerticalAlignment) {
3382
+ gridCssClasses += " " + (VERTICAL_ALIGNMENT_CLASSES[props.node.contentVerticalAlignment] || "");
2910
3383
  }
3384
+ const columnGap = props.node.columnGap || "0.5rem";
2911
3385
  const styles = {};
2912
- if (node.backgroundColor) {
2913
- styles.backgroundColor = node.backgroundColor;
2914
- }
2915
- let cssClasses = "layout_grid ";
3386
+ let cssClasses = "layout_grid";
2916
3387
  let addPadding = false;
2917
- if (node.boxShadow) {
2918
- {
2919
- }
2920
- cssClasses = cssClasses + " " + (node.boxShadow || "");
2921
- addPadding = true;
3388
+ if (props.node.backgroundColor) {
3389
+ styles.backgroundColor = props.node.backgroundColor;
2922
3390
  }
2923
- if (node.borderWidth) {
2924
- styles.borderWidth = node.borderWidth;
3391
+ if (props.node.borderWidth) {
3392
+ styles.borderWidth = props.node.borderWidth;
2925
3393
  addPadding = true;
2926
3394
  }
2927
- if (node.borderRadius) {
2928
- styles.borderRadius = node.borderRadius;
3395
+ if (props.node.borderRadius) {
3396
+ styles.borderRadius = props.node.borderRadius;
2929
3397
  }
2930
- let backgroundStyle = "";
2931
- if (node.backgroundImage) {
2932
- let resolvedPath = node.backgroundImage;
2933
- if (!resolvedPath.startsWith("http")) {
2934
- resolvedPath = `${apiBaseUrl}/digitalassets/storefront/${resolvedPath}`;
2935
- }
2936
- backgroundStyle = `url('${resolvedPath}'),`;
2937
- }
2938
- if (node.gradientColor1 && node.gradientColor2) {
2939
- backgroundStyle += `linear-gradient(to bottom, ${node.gradientColor1}, ${node.gradientColor2}),`;
3398
+ if (props.node.boxShadow && props.node.boxShadow !== "shadow-none") {
3399
+ cssClasses += " " + props.node.boxShadow;
3400
+ addPadding = true;
2940
3401
  }
2941
- if (node.backgroundColor) {
2942
- backgroundStyle += `${node.backgroundColor},`;
3402
+ const backgroundLayers = [];
3403
+ if (props.node.backgroundImage) {
3404
+ const resolved = AssetUtility_default.resolveUrl(
3405
+ props.apiBaseUrl,
3406
+ props.node.backgroundImage
3407
+ );
3408
+ if (resolved) {
3409
+ backgroundLayers.push(`url('${resolved}')`);
3410
+ addPadding = true;
3411
+ }
2943
3412
  }
2944
- if (backgroundStyle && backgroundStyle != "") {
2945
- let stringWithoutTrailingComma = backgroundStyle.replace(/,(\s*)$/, "$1");
2946
- styles.background = stringWithoutTrailingComma;
3413
+ if (props.node.gradientColor1 && props.node.gradientColor2) {
3414
+ backgroundLayers.push(
3415
+ `linear-gradient(to bottom, ${props.node.gradientColor1}, ${props.node.gradientColor2})`
3416
+ );
3417
+ addPadding = true;
3418
+ } else if (props.node.gradientColor1) {
3419
+ backgroundLayers.push(props.node.gradientColor1);
3420
+ addPadding = true;
3421
+ } else if (props.node.gradientColor2) {
3422
+ backgroundLayers.push(props.node.gradientColor2);
2947
3423
  addPadding = true;
2948
3424
  }
2949
- let sectionWidth = "fixed";
2950
- if (node.sectionWidth) {
2951
- sectionWidth = node.sectionWidth;
3425
+ if (backgroundLayers.length) {
3426
+ styles.background = backgroundLayers.join(", ");
2952
3427
  }
2953
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react45.default.Fragment, { children: [
2954
- sectionWidth == "mixed" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: cssClasses, style: { ...styles }, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "container", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "grid gap-y-8 " + gridCssClasses + (addPadding ? " px-4 py-4 lg:px-6 lg:py-6 " : ""), style: { columnGap, minHeight: node.height }, children: node.children && node.children.map((node2, index) => {
2955
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react45.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LayoutItemNode_default, { node: node2, order: props.node.smOrder == "reverse" ? node2.children.length - index : index }) }, index);
2956
- }) }) }) }),
2957
- sectionWidth == "full" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3428
+ const renderChildren = () => props.node.children?.map((node, index) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
3429
+ LayoutItemNode_default,
3430
+ {
3431
+ node,
3432
+ order: props.node.smOrder === "reverse" ? props.node.children.length - index : index,
3433
+ routeParameters: props.routeParameters,
3434
+ query: props.query,
3435
+ session: props.session,
3436
+ host: props.host,
3437
+ path: props.path,
3438
+ apiBaseUrl: props.apiBaseUrl
3439
+ },
3440
+ index
3441
+ ));
3442
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
3443
+ sectionWidth === "mixed" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: cssClasses, style: styles, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "container", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2958
3444
  "div",
2959
3445
  {
2960
- className: "grid gap-y-8 " + cssClasses + " " + gridCssClasses + (addPadding ? " p-4 lg:p-0" : ""),
3446
+ className: `grid gap-y-4 lg:gap-y-0 ${gridCssClasses} ${addPadding ? "py-8 lg:py-6" : ""}`,
3447
+ style: { columnGap, minHeight: props.node.height },
3448
+ children: renderChildren()
3449
+ }
3450
+ ) }) }),
3451
+ sectionWidth === "full" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
3452
+ "div",
3453
+ {
3454
+ className: `grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? "p-8 lg:p-0" : ""}`,
2961
3455
  style: { columnGap, ...styles },
2962
- children: node.children && node.children.map((node2, index) => {
2963
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react45.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LayoutItemNode_default, { node: node2, order: props.node.smOrder == "reverse" ? node2.children.length - index : index }) }, index);
2964
- })
3456
+ children: renderChildren()
2965
3457
  }
2966
3458
  ),
2967
- sectionWidth == "fixed" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "container", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3459
+ sectionWidth === "fixed" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "container", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2968
3460
  "div",
2969
3461
  {
2970
- className: "grid gap-y-8 " + cssClasses + " " + gridCssClasses + (addPadding ? " px-4 py-4 lg:px-6 lg:py-6 " : ""),
3462
+ className: `grid gap-y-4 lg:gap-y-0 ${cssClasses} ${gridCssClasses} ${addPadding ? "px-8 py-6 lg:px-6 lg:py-6" : ""}`,
2971
3463
  style: { columnGap, ...styles },
2972
- children: node.children && node.children.map((node2, index) => {
2973
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react45.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LayoutItemNode_default, { node: node2, order: props.node.smOrder == "reverse" ? node2.children.length - index : index }) }, index);
2974
- })
3464
+ children: renderChildren()
2975
3465
  }
2976
3466
  ) })
2977
3467
  ] });
2978
3468
  };
2979
3469
  var LayoutContainerNode_default = LayoutContainerNode;
2980
3470
 
2981
- // src/components/pageRenderingEngine/nodes/WidgetNode.tsx
2982
- var import_react46 = require("react");
2983
- var import_jsx_runtime56 = require("react/jsx-runtime");
2984
- var WidgetNode = (props) => {
2985
- const getWidgetParameters = () => {
2986
- const widgetInputParameters = { ...props.routeParameters ?? {} };
2987
- const rawWidgetParams = props.node?.widgetParameters ?? props.node?.widgetParams;
2988
- let widgetParameters = {};
2989
- const isJSON = (str) => {
2990
- if (typeof str !== "string") return false;
2991
- str = str.trim();
2992
- return str.startsWith("{") && str.endsWith("}") || str.startsWith("[") && str.endsWith("]");
2993
- };
2994
- if (rawWidgetParams) {
2995
- if (typeof rawWidgetParams === "string" && isJSON(rawWidgetParams)) {
2996
- widgetParameters = JSON.parse(rawWidgetParams);
2997
- } else if (typeof rawWidgetParams === "object") {
2998
- widgetParameters = rawWidgetParams;
2999
- }
3000
- }
3001
- const resolveValue = (val) => {
3002
- if (typeof val === "string") {
3003
- const m = /^\{(.+)\}$/.exec(val);
3004
- if (m) {
3005
- const actualKey = m[1];
3006
- return props.routeParameters?.[actualKey] ?? val;
3007
- }
3008
- return val;
3009
- } else if (Array.isArray(val)) {
3010
- return val.map(resolveValue);
3011
- } else if (val && typeof val === "object") {
3012
- const out = {};
3013
- for (const k of Object.keys(val)) {
3014
- out[k] = resolveValue(val[k]);
3015
- }
3016
- return out;
3017
- }
3018
- return val;
3019
- };
3020
- Object.keys(widgetParameters).forEach((key) => {
3021
- const rawVal = widgetParameters[key];
3022
- if (rawVal === "route") {
3023
- if (key === "itemPath") {
3024
- widgetInputParameters[key] = props.path;
3025
- } else {
3026
- widgetInputParameters[key] = widgetInputParameters[key] ?? null;
3027
- }
3028
- } else {
3029
- widgetInputParameters[key] = resolveValue(rawVal);
3030
- }
3031
- });
3032
- widgetInputParameters["widgetTitle"] = props.node?.widgetTitle;
3033
- return widgetInputParameters;
3034
- };
3035
- const SelectedWidget = props.widgetRegistry?.[props.node.widgetCode];
3036
- if (!SelectedWidget) {
3037
- console.warn("Widget not found:", props.node.widgetCode);
3038
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
3039
- "Widget not found: ",
3040
- props.node.widgetCode
3041
- ] });
3042
- }
3043
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react46.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "container mt-2", children: "..." }), children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3044
- SelectedWidget,
3045
- {
3046
- params: getWidgetParameters(),
3047
- query: props.query,
3048
- session: props.session,
3049
- host: props.host,
3050
- path: props.path,
3051
- apiBaseUrl: props.apiBaseUrl
3052
- }
3053
- ) });
3054
- };
3055
- var WidgetNode_default = WidgetNode;
3056
-
3057
3471
  // src/components/pageRenderingEngine/nodes/FormContainerNode.tsx
3058
- var import_react47 = __toESM(require("react"));
3472
+ var import_react50 = __toESM(require("react"));
3059
3473
 
3060
3474
  // src/components/pageRenderingEngine/nodes/InputControlNode.tsx
3061
- var import_jsx_runtime57 = require("react/jsx-runtime");
3475
+ var import_jsx_runtime63 = require("react/jsx-runtime");
3062
3476
  var InputControlNode = (props) => {
3063
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
3477
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
3064
3478
  InputControl_default,
3065
3479
  {
3066
3480
  name: props.node.name,
@@ -3089,19 +3503,19 @@ var InputControlNode = (props) => {
3089
3503
  var InputControlNode_default = InputControlNode;
3090
3504
 
3091
3505
  // src/components/pageRenderingEngine/nodes/FormContainerNode.tsx
3092
- var import_jsx_runtime58 = require("react/jsx-runtime");
3506
+ var import_jsx_runtime64 = require("react/jsx-runtime");
3093
3507
  var FormContainerNode = (props) => {
3094
3508
  const NodeTypes2 = {
3095
3509
  ["input-control"]: InputControlNode_default
3096
3510
  };
3097
3511
  const { node } = props;
3098
- const formRef = (0, import_react47.useRef)(null);
3512
+ const formRef = (0, import_react50.useRef)(null);
3099
3513
  const initialState = {
3100
3514
  inputValues: {},
3101
3515
  lastPropertyChanged: ""
3102
3516
  };
3103
- const [formState, dispatch] = (0, import_react47.useReducer)(FormReducer_default, initialState);
3104
- const handleInputChange = (0, import_react47.useCallback)((updatedValues) => {
3517
+ const [formState, dispatch] = (0, import_react50.useReducer)(FormReducer_default, initialState);
3518
+ const handleInputChange = (0, import_react50.useCallback)((updatedValues) => {
3105
3519
  dispatch({ type: FORM_INPUT_UPDATE, name: updatedValues.name, value: updatedValues.value });
3106
3520
  }, [dispatch]);
3107
3521
  const onValidate = async () => {
@@ -3112,7 +3526,7 @@ var FormContainerNode = (props) => {
3112
3526
  return true;
3113
3527
  }
3114
3528
  };
3115
- (0, import_react47.useEffect)(() => {
3529
+ (0, import_react50.useEffect)(() => {
3116
3530
  const fetchInitialData = async () => {
3117
3531
  if (!props.fetchData || !node.dataFetchApi) return;
3118
3532
  const response = await props.fetchData(
@@ -3129,12 +3543,12 @@ var FormContainerNode = (props) => {
3129
3543
  };
3130
3544
  fetchInitialData();
3131
3545
  }, [props.fetchData, node.dataFetchApi, props.routeParameters]);
3132
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("form", { className: "group space-y-6 pb-6 overflow-y-auto", noValidate: true, ref: formRef, children: [
3546
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("form", { className: "group space-y-6 pb-6 overflow-y-auto", noValidate: true, ref: formRef, children: [
3133
3547
  node.children && node.children.map((node2, index) => {
3134
3548
  {
3135
3549
  }
3136
3550
  const SelectedNode = NodeTypes2[node2.type];
3137
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react47.default.Fragment, { children: SelectedNode && node2.type == "input-control" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react50.default.Fragment, { children: SelectedNode && node2.type == "input-control" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
3138
3552
  InputControlNode_default,
3139
3553
  {
3140
3554
  value: formState.inputValues[node2.name],
@@ -3143,34 +3557,15 @@ var FormContainerNode = (props) => {
3143
3557
  }
3144
3558
  ) }, index);
3145
3559
  }),
3146
- node.children.length == 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "py-0.5 lg:py-1.5" })
3560
+ node.children.length == 0 && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "py-0.5 lg:py-1.5" })
3147
3561
  ] });
3148
3562
  };
3149
3563
  var FormContainerNode_default = FormContainerNode;
3150
3564
 
3151
3565
  // src/components/pageRenderingEngine/nodes/DivContainer.tsx
3152
- var import_react48 = __toESM(require("react"));
3566
+ var import_react51 = __toESM(require("react"));
3153
3567
  var import_link3 = __toESM(require("next/link"));
3154
-
3155
- // src/components/utilities/AssetUtility.tsx
3156
- var AssetUtility = class {
3157
- constructor() {
3158
- }
3159
- static resolveUrl(apiBaseUrl, url) {
3160
- if (url) {
3161
- if (url.startsWith("http")) {
3162
- return url;
3163
- } else {
3164
- return `${apiBaseUrl}/digitalassets-management/${url}`;
3165
- }
3166
- }
3167
- return void 0;
3168
- }
3169
- };
3170
- var AssetUtility_default = AssetUtility;
3171
-
3172
- // src/components/pageRenderingEngine/nodes/DivContainer.tsx
3173
- var import_jsx_runtime59 = require("react/jsx-runtime");
3568
+ var import_jsx_runtime65 = require("react/jsx-runtime");
3174
3569
  var DivContainer = (props) => {
3175
3570
  const { cssProperties: styles, hoverCssProperties: hoverStyles, mobileCssProperties: mobileStyles } = props.node;
3176
3571
  const updatedStyles = convertKeysToCamelCase(styles);
@@ -3184,8 +3579,10 @@ var DivContainer = (props) => {
3184
3579
  ["horizontalrule"]: HorizontalRuleNode_default,
3185
3580
  ["layout-container"]: LayoutContainerNode_default,
3186
3581
  ["widget"]: WidgetNode_default,
3582
+ ["embed"]: EmbedNode_default,
3187
3583
  ["div-container"]: DivContainer,
3188
3584
  ["text"]: TextNode_default,
3585
+ ["datafield"]: DatafieldNode_default,
3189
3586
  ["svg-icon"]: SVGIconNode_default
3190
3587
  };
3191
3588
  function toCamelCase(str) {
@@ -3287,9 +3684,9 @@ ${mobileCssRules.join("\n")}
3287
3684
  return css2;
3288
3685
  };
3289
3686
  const css = generateCssString(updatedStyle, hoverStyles, mobileStyles);
3290
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react48.default.Fragment, { children: [
3291
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("style", { dangerouslySetInnerHTML: { __html: css } }),
3292
- props.node.href && props.node.href !== "" ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_link3.default, { href: props.node.href, className: "block", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3687
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react51.default.Fragment, { children: [
3688
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("style", { dangerouslySetInnerHTML: { __html: css } }),
3689
+ props.node.href && props.node.href !== "" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_link3.default, { href: props.node.href, className: "block", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
3293
3690
  "div",
3294
3691
  {
3295
3692
  id: guid,
@@ -3297,7 +3694,7 @@ ${mobileCssRules.join("\n")}
3297
3694
  className: containerPaddingClass,
3298
3695
  children: props.node.children?.map((node, index) => {
3299
3696
  const SelectedNode = NodeTypes2[node.type];
3300
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react48.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3697
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react51.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
3301
3698
  SelectedNode,
3302
3699
  {
3303
3700
  node,
@@ -3312,9 +3709,9 @@ ${mobileCssRules.join("\n")}
3312
3709
  ) }, index);
3313
3710
  })
3314
3711
  }
3315
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { id: guid, style: { ...backgroundStyle }, className: containerPaddingClass, children: props.node.children && props.node.children.map((node, index) => {
3712
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { id: guid, style: { ...backgroundStyle }, className: containerPaddingClass, children: props.node.children && props.node.children.map((node, index) => {
3316
3713
  const SelectedNode = NodeTypes2[node.type];
3317
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react48.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3714
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react51.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
3318
3715
  SelectedNode,
3319
3716
  {
3320
3717
  node,
@@ -3333,7 +3730,7 @@ ${mobileCssRules.join("\n")}
3333
3730
  var DivContainer_default = DivContainer;
3334
3731
 
3335
3732
  // src/components/pageRenderingEngine/PageBodyRenderer.tsx
3336
- var import_jsx_runtime60 = require("react/jsx-runtime");
3733
+ var import_jsx_runtime66 = require("react/jsx-runtime");
3337
3734
  var NodeTypes = {
3338
3735
  ["paragraph"]: ParagraphNode_default,
3339
3736
  ["heading"]: HeadingNode_default,
@@ -3346,7 +3743,8 @@ var NodeTypes = {
3346
3743
  ["widget"]: WidgetNode_default,
3347
3744
  ["form-container"]: FormContainerNode_default,
3348
3745
  ["div-container"]: DivContainer_default,
3349
- ["svg-icon"]: SVGIconNode_default
3746
+ ["svg-icon"]: SVGIconNode_default,
3747
+ ["embed"]: EmbedNode_default
3350
3748
  };
3351
3749
  var PageBodyRenderer = (props) => {
3352
3750
  let pageBodyTree;
@@ -3360,11 +3758,11 @@ var PageBodyRenderer = (props) => {
3360
3758
  if (pageBodyTree && pageBodyTree.root) {
3361
3759
  rootNode = pageBodyTree.root;
3362
3760
  }
3363
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react49.default.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
3761
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react52.default.Fragment, { children: rootNode && rootNode?.children?.map((node, index) => {
3364
3762
  {
3365
3763
  }
3366
3764
  const SelectedNode = NodeTypes[node.type];
3367
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react49.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react49.default.Fragment, { children: node.type == "layout-container" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react49.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3765
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react52.default.Fragment, { children: SelectedNode && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react52.default.Fragment, { children: node.type == "layout-container" ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react52.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
3368
3766
  SelectedNode,
3369
3767
  {
3370
3768
  node,
@@ -3377,7 +3775,7 @@ var PageBodyRenderer = (props) => {
3377
3775
  apiBaseUrl: props.apiBaseUrl,
3378
3776
  widgetRegistry: props.widgetRegistry
3379
3777
  }
3380
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react49.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3778
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react52.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
3381
3779
  SelectedNode,
3382
3780
  {
3383
3781
  node,