diy-template-components 4.0.1 → 4.0.5

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/build/index.es.js CHANGED
@@ -7,6 +7,19 @@ import koreanLocale from 'moment/locale/ko';
7
7
  import ReactDOMServer from 'react-dom/server';
8
8
  import { createTheming, createUseStyles as createUseStyles$1, useTheme as useTheme$1 } from 'react-jss';
9
9
 
10
+ function insertStyle(css) {
11
+ if (!css || typeof window === 'undefined') {
12
+ return;
13
+ }
14
+ const style = document.createElement('style');
15
+ style.setAttribute('type', 'text/css');
16
+ style.innerHTML = css;
17
+ document.head.appendChild(style);
18
+ return css;
19
+ }
20
+
21
+ insertStyle("/* Brush stroke underline - for rich text content (color via --brush-color inline style) */\n.brush-stroke {\n position: relative;\n display: inline-block;\n white-space: pre-wrap;\n}\n\n.brush-stroke::after {\n content: \"\";\n position: absolute;\n top: 90%;\n left: 0;\n height: 0.5em;\n width: 100%;\n z-index: -1;\n border: solid var(--brush-width, 0.15em) var(--brush-color, #FFFFFF);\n border-color: var(--brush-color, #FFFFFF) transparent transparent transparent;\n border-radius: 100%;\n}\n\n/* Font size classes for rich text editor - Desktop (default) */\n.font-size-extra-small {\n font-size: 12px;\n line-height: 16px;\n}\n\n.font-size-small {\n font-size: 16px;\n line-height: 20px;\n}\n\n.font-size-medium {\n font-size: 20px;\n line-height: 24px;\n}\n\n.font-size-large {\n font-size: 24px;\n line-height: 28px;\n}\n\n.font-size-very-large {\n font-size: 32px;\n line-height: 36px;\n}\n\n.font-size-extra-large {\n font-size: 56px;\n line-height: 64px;\n}\n\n.font-size-huge {\n font-size: 72px;\n line-height: 80px;\n}\n\n/* Font size classes - Mobile */\n@media (max-width: 768px) {\n .font-size-extra-small {\n font-size: 10px;\n line-height: 14px;\n }\n .font-size-small {\n font-size: 14px;\n line-height: 18px;\n }\n .font-size-medium {\n font-size: 16px;\n line-height: 20px;\n }\n .font-size-large {\n font-size: 18px;\n line-height: 20px;\n }\n .font-size-very-large {\n font-size: 24px;\n line-height: 36px;\n }\n .font-size-extra-large {\n font-size: 40px;\n line-height: 48px;\n }\n .font-size-huge {\n font-size: 56px;\n line-height: 64px;\n }\n}");
22
+
10
23
  function _extends() {
11
24
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
12
25
  for (var e = 1; e < arguments.length; e++) {
@@ -546,7 +559,7 @@ function useLinkBuilder(data) {
546
559
  basePath,
547
560
  isMasterTemplate
548
561
  } = useContext(PageContext);
549
- if (isEdit || !data.isLink) {
562
+ if (!data || isEdit || !data.isLink) {
550
563
  return null;
551
564
  }
552
565
  if (data?.isExistingLink === false) {
@@ -566,7 +579,7 @@ function useLinkBuilder(data) {
566
579
  }
567
580
  const {
568
581
  pageId
569
- } = navList.find(el => el.slug === data?.link) || {};
582
+ } = navList?.find(el => el.slug === data?.link) || {};
570
583
  return `//${basePath}?templateId=${templateId}&pageId=${pageId}${isMasterTemplate ? '&mld=true' : ''}`;
571
584
  }
572
585
 
@@ -2283,11 +2296,6 @@ function Footer({
2283
2296
  }, "\xA9\uFE0F Leaverage Consultants Private Limited") : null);
2284
2297
  }
2285
2298
 
2286
- const borderRadius = {
2287
- small: 4,
2288
- regular: 8,
2289
- large: 12
2290
- };
2291
2299
  const generateShadows = palette => ({
2292
2300
  primary: `0 2px 8px ${palette.shadow.primary}`,
2293
2301
  secondary: `0 4px 10px ${palette.shadow.secondary}`
@@ -2444,7 +2452,41 @@ const fontWeight = {
2444
2452
  superBold: 900
2445
2453
  };
2446
2454
 
2447
- function getTheme(colorTheme = 'blue', fontFamily = 'Arial', isMobile) {
2455
+ const getBorderRadius = roundness => {
2456
+ const mapping = {
2457
+ sharp: {
2458
+ small: 0,
2459
+ regular: 0,
2460
+ large: 0
2461
+ },
2462
+ soft: {
2463
+ small: 8,
2464
+ regular: 8,
2465
+ large: 8
2466
+ },
2467
+ rounded: {
2468
+ small: 16,
2469
+ regular: 16,
2470
+ large: 16
2471
+ },
2472
+ 'extra-round': {
2473
+ small: 24,
2474
+ regular: 24,
2475
+ large: 24
2476
+ },
2477
+ pill: {
2478
+ small: 9999,
2479
+ regular: 9999,
2480
+ large: 9999
2481
+ }
2482
+ };
2483
+ return mapping[roundness] || {
2484
+ small: 16,
2485
+ regular: 16,
2486
+ large: 16
2487
+ };
2488
+ };
2489
+ function getTheme(colorTheme = 'blue', fontFamily = 'Arial', isMobile, roundness = 'rounded') {
2448
2490
  const palette = palettes[colorTheme] || palettes['blue'];
2449
2491
  const typography = {
2450
2492
  fontFamily: `"${fontFamily}", "Roboto", "Helvetica", "Arial", "sans-serif"`,
@@ -2452,7 +2494,7 @@ function getTheme(colorTheme = 'blue', fontFamily = 'Arial', isMobile) {
2452
2494
  fontWeight
2453
2495
  };
2454
2496
  const shape = {
2455
- borderRadius
2497
+ borderRadius: getBorderRadius(roundness)
2456
2498
  };
2457
2499
  return {
2458
2500
  palette,
@@ -2519,17 +2561,6 @@ function NanumSquare() {
2519
2561
  return null;
2520
2562
  }
2521
2563
 
2522
- function insertStyle(css) {
2523
- if (!css || typeof window === 'undefined') {
2524
- return;
2525
- }
2526
- const style = document.createElement('style');
2527
- style.setAttribute('type', 'text/css');
2528
- style.innerHTML = css;
2529
- document.head.appendChild(style);
2530
- return css;
2531
- }
2532
-
2533
2564
  insertStyle("@charset \"UTF-8\";\n/* Wrapper: no height/min-height – height comes only from section content, not from HOC */\n.sectionBackgroundWrapper {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n/* Section root transparent so background (image/color/gradient/video) shows through */\n.sectionBackgroundWrapper > .sectionBackgroundContent > * {\n background: transparent !important;\n}\n\n/* Video: absolute so it does not affect wrapper height; height follows section */\n.sectionBackgroundVideo {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 0;\n pointer-events: none;\n}\n\n/* YouTube embed: cover background, no UI interaction, minimal branding via URL params */\n.sectionBackgroundYoutube {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100vw;\n min-width: 100%;\n min-height: 100%;\n height: 56.25vw; /* 16:9 */\n min-height: 100vh;\n transform: translate(-50%, -50%);\n border: none;\n z-index: 0;\n pointer-events: none;\n}\n\n@media (min-aspect-ratio: 16/9) {\n .sectionBackgroundYoutube {\n width: 177.78vh;\n height: 100vh;\n min-width: 100%;\n min-height: 100%;\n }\n}\n/* Blur overlay: frosted glass so content stays readable over video/image/gradient */\n.sectionBackgroundBlur {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n pointer-events: none;\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n /* background: rgba(255, 255, 255, 0.08); */\n}\n\n/* Content wrapper: above blur so component items are clear */\n.sectionBackgroundContent {\n position: relative;\n z-index: 2;\n}\n\n/* Background layer: fills wrapper only (absolute), does not affect wrapper height */\n.sectionBackgroundLayer {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 0;\n pointer-events: none;\n}\n\n.sectionBackgroundLayer.sectionBackgroundImage {\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n}");
2534
2565
 
2535
2566
  /**
@@ -2743,33 +2774,36 @@ function withSectionBackground(WrappedSectionRenderer) {
2743
2774
  }
2744
2775
 
2745
2776
  const TYPE_TO_COMPONENT_MAP$1 = {
2746
- BANNER_CAROUSEL_RIGHT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$q; })),
2747
- GRID_CARD: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$p; })),
2748
- BANNER_CAROUSEL_CENTER: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$o; })),
2749
- BANNER_CAROUSEL_CENTER_V2: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$n; })),
2750
- BANNER_CAROUSEL_LEFT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$m; })),
2751
- FORM_SUBSCRIBE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$l; })),
2752
- TEXT_TESTIMONIAL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$k; })),
2753
- VIDEO_TESTIMONIAL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$j; })),
2754
- VIDEO_WORKSHOP_PROMOTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$2; })),
2755
- VIDEO: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$i; })),
2756
- INFO: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$h; })),
2757
- TEXT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$g; })),
2758
- IMAGE_GALLERY: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$f; })),
2759
- FAQ_LISTING: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$e; })),
2760
- COURSE_CAROUSEL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$c; })),
2761
- TEAM_CARD: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$b; })),
2762
- TEXT_GRID: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$d; })),
2763
- CONTACT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$a; })),
2764
- FORM_ENQUIRY: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$9; })),
2765
- WEBINAR_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$8; })),
2766
- COURSE_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$7; })),
2767
- COURSE_LANDING_PAGE_V2: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$1; })),
2768
- FORM_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$6; })),
2769
- TILES_SECTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$5; })),
2770
- EMAIL_DRIP_MARKET: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$4; })),
2771
- ABOUT_INSTITUTE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$3; })),
2772
- COUNTER_SECTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index; }))
2777
+ BANNER_CAROUSEL_RIGHT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$t; })),
2778
+ GRID_CARD: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$s; })),
2779
+ BANNER_CAROUSEL_CENTER: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$r; })),
2780
+ BANNER_CAROUSEL_CENTER_V2: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$q; })),
2781
+ BANNER_CAROUSEL_LEFT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$p; })),
2782
+ FORM_SUBSCRIBE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$o; })),
2783
+ TEXT_TESTIMONIAL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$n; })),
2784
+ VIDEO_TESTIMONIAL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$m; })),
2785
+ VIDEO_WORKSHOP_PROMOTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$1; })),
2786
+ VIDEO: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$l; })),
2787
+ INFO: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$k; })),
2788
+ TEXT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$j; })),
2789
+ IMAGE_GALLERY: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$i; })),
2790
+ FAQ_LISTING: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$h; })),
2791
+ COURSE_CAROUSEL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$f; })),
2792
+ TEAM_CARD: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$e; })),
2793
+ TEXT_GRID: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$g; })),
2794
+ CONTACT: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$d; })),
2795
+ FORM_ENQUIRY: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$c; })),
2796
+ WEBINAR_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$b; })),
2797
+ COURSE_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$a; })),
2798
+ COURSE_LANDING_PAGE_V2: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index; })),
2799
+ FORM_LANDING_PAGE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$9; })),
2800
+ TILES_SECTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$8; })),
2801
+ EMAIL_DRIP_MARKET: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$7; })),
2802
+ ABOUT_INSTITUTE: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$6; })),
2803
+ COUNTER_SECTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$5; })),
2804
+ TIMER_AND_CALL: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$2; })),
2805
+ STICKY_CTA: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$4; })),
2806
+ CUSTOM_HTML_SECTION: /*#__PURE__*/lazy(() => Promise.resolve().then(function () { return index$3; }))
2773
2807
  };
2774
2808
  const getCompToRender$1 = type => {
2775
2809
  const Comp = TYPE_TO_COMPONENT_MAP$1[type];
@@ -2803,35 +2837,21 @@ function SectionRenderer$1({
2803
2837
 
2804
2838
  console.log('nishu222', sectionData);
2805
2839
  let sectionBg = {};
2806
- debugger;
2807
2840
  if (sectionData?.isV2Section) {
2808
- let currentObj = sectionData?.components?.find(component => component.hasOwnProperty('sectionsBgname')?.sectionBgData || {});
2809
- sectionBg = currentObj?.sectionsBgname?.sectionBgData || {};
2841
+ sectionBg = sectionData?.bgSection?.components?.[0]?.sectionBgData || {};
2842
+ }
2843
+ if (sectionData?.type === 'STICKY_CTA') {
2844
+ sectionData = {
2845
+ ...sectionData,
2846
+ isDefaultEditor: true
2847
+ };
2810
2848
  }
2811
-
2812
- // sectionBg ={
2813
- // id:"625fb1a879d4c9001261cewqsazxs21",
2814
- // value: "imagev",
2815
- // label: "",
2816
- // type: "image",
2817
- // bgType: "video",
2818
- // name: "Image",
2819
- // isYoutubeVideo: true,
2820
- // elementType: "div",
2821
- // isV2: true,
2822
- // metadata: {
2823
- // value: "https://www.youtube.com/watch?v=bjxTIcuzB6k&list=PLe6YKWr4VVM1x2LIpiqmVvG4QgIvoDEdO",
2824
- // }
2825
- // }
2826
- console.log('nishu222333', sectionData);
2827
2849
  return /*#__PURE__*/React.createElement(Suspense, {
2828
2850
  fallback: null /*GIF maybe*/
2829
2851
  }, /*#__PURE__*/React.createElement(SectionWithBackground$1, {
2830
2852
  sectionData: sectionData,
2831
2853
  extraProps: extraProps,
2832
- sectionIndex: sectionIndex
2833
- // isSkipV2Section={sectionData?.isV2Section}
2834
- ,
2854
+ sectionIndex: sectionIndex,
2835
2855
  isSkipV2Section: sectionData?.isV2Section
2836
2856
  // componentBg={sectionData?.componentBg || { type: "image", value: "https://fastly.picsum.photos/id/4/5000/3333.jpg?hmac=ghf06FdmgiD0-G4c9DdNM8RnBIN7BO0-ZGEw47khHP4" }}
2837
2857
  ,
@@ -2841,7 +2861,8 @@ function SectionRenderer$1({
2841
2861
 
2842
2862
  const defaultTheme = {
2843
2863
  color: 'blue',
2844
- font: 'rubik'
2864
+ font: 'rubik',
2865
+ roundness: 'rounded'
2845
2866
  };
2846
2867
  const defaultLayout = {
2847
2868
  containerWidth: 1440
@@ -2915,7 +2936,7 @@ const allColors = {
2915
2936
  tertiaryskyblue: '#F2FCFF'
2916
2937
  };
2917
2938
 
2918
- const generateTheme = (theme = 'blue', fontFamily = 'Arial', isMobile) => {
2939
+ const generateTheme = (theme = 'blue', fontFamily = 'Arial', isMobile, roundness = 'rounded') => {
2919
2940
  let themeColor = theme.split('-');
2920
2941
  let color, gradient, darkMode;
2921
2942
  if (themeColor.length === 1) {
@@ -3016,7 +3037,7 @@ const generateTheme = (theme = 'blue', fontFamily = 'Arial', isMobile) => {
3016
3037
  margin: isMobile ? mobileMargin : margin
3017
3038
  };
3018
3039
  return {
3019
- ...getTheme(theme),
3040
+ ...getTheme(theme, fontFamily, isMobile, roundness),
3020
3041
  typography,
3021
3042
  spacing,
3022
3043
  colors
@@ -3028,7 +3049,8 @@ function PageRenderer$1({
3028
3049
  metadata: {
3029
3050
  theme: {
3030
3051
  color = defaultTheme.color,
3031
- font = defaultTheme.font
3052
+ font = defaultTheme.font,
3053
+ roundness = defaultTheme.roundness
3032
3054
  } = defaultTheme,
3033
3055
  layout = defaultLayout
3034
3056
  } = defaultMetadata,
@@ -3080,7 +3102,7 @@ function PageRenderer$1({
3080
3102
  countryCode,
3081
3103
  currencySymbol
3082
3104
  }), [isMobile, isLandingPages, layout, baseURLs, hashToken, isPreview, isEdit, templateId, navList, isMasterTemplate, basePath, validations, isTutorWebsite, extraProps, hideLogin, _id, countryCode, currencySymbol]);
3083
- const theme = useMemo(() => generateTheme(color, font, context.isMobile), [color, font, context.isMobile]);
3105
+ const theme = useMemo(() => generateTheme(color, font, context.isMobile, roundness), [color, font, context.isMobile, roundness]);
3084
3106
  const Wrapper = SectionWrapper || Fragment;
3085
3107
  return /*#__PURE__*/React.createElement(ThemeProvider, {
3086
3108
  theme: theme
@@ -3557,9 +3579,9 @@ function BannerCarouselRight({
3557
3579
  });
3558
3580
  const [{
3559
3581
  bannerCarousel
3560
- }] = sectionData.components;
3561
- const Wrapper = bannerCarousel.components.length > 1 ? Carousel : Fragment;
3562
- const wrapperProps = bannerCarousel.components.length > 1 ? {
3582
+ }] = sectionData?.components;
3583
+ const Wrapper = bannerCarousel?.components?.length > 1 ? Carousel : Fragment;
3584
+ const wrapperProps = bannerCarousel?.components?.length > 1 ? {
3563
3585
  buttonContainerClass: classes.absoluteButtonsBannerRight,
3564
3586
  inverted: false
3565
3587
  } : {};
@@ -3567,7 +3589,7 @@ function BannerCarouselRight({
3567
3589
  className: classes.bannerCarouselRightSection
3568
3590
  }, /*#__PURE__*/React.createElement("div", {
3569
3591
  className: classes.sectionContainer
3570
- }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, bannerCarousel.components.map((node, idx) => /*#__PURE__*/React.createElement(Section$5, {
3592
+ }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, bannerCarousel?.components?.map((node, idx) => /*#__PURE__*/React.createElement(Section$5, {
3571
3593
  nodeData: node,
3572
3594
  key: idx /* or some other unique property */,
3573
3595
  sectionIndex: sectionIndex,
@@ -3575,9 +3597,9 @@ function BannerCarouselRight({
3575
3597
  })))));
3576
3598
  }
3577
3599
 
3578
- var index$q = /*#__PURE__*/Object.freeze({
3579
- __proto__: null,
3580
- 'default': BannerCarouselRight
3600
+ var index$t = /*#__PURE__*/Object.freeze({
3601
+ __proto__: null,
3602
+ 'default': BannerCarouselRight
3581
3603
  });
3582
3604
 
3583
3605
  const useSectionStyles$8 = createUseStyles(theme => ({
@@ -3751,7 +3773,7 @@ function List({
3751
3773
  containerWidth,
3752
3774
  isMobile
3753
3775
  });
3754
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
3776
+ const [nodeData] = sectionData.components;
3755
3777
  const getNumber = val => {
3756
3778
  return val.toString().length == 1 ? '0' + val : val;
3757
3779
  };
@@ -3799,9 +3821,9 @@ function List({
3799
3821
  }))));
3800
3822
  }
3801
3823
 
3802
- var index$p = /*#__PURE__*/Object.freeze({
3803
- __proto__: null,
3804
- 'default': List
3824
+ var index$s = /*#__PURE__*/Object.freeze({
3825
+ __proto__: null,
3826
+ 'default': List
3805
3827
  });
3806
3828
 
3807
3829
  const useSectionStyles$7 = createUseStyles(theme => {
@@ -4090,15 +4112,15 @@ function BannerCarouselCenter({
4090
4112
  });
4091
4113
  const [{
4092
4114
  bannerCarousel
4093
- }] = sectionData.components;
4094
- const Wrapper = bannerCarousel.components.length > 1 ? Carousel : Fragment;
4095
- const wrapperProps = bannerCarousel.components.length > 1 ? {
4115
+ }] = sectionData?.components;
4116
+ const Wrapper = bannerCarousel?.components?.length > 1 ? Carousel : Fragment;
4117
+ const wrapperProps = bannerCarousel?.components?.length > 1 ? {
4096
4118
  buttonContainerClass: classes.absoluteButtons,
4097
4119
  inverted: true
4098
4120
  } : {};
4099
4121
  return /*#__PURE__*/React.createElement("section", {
4100
4122
  className: classes.bannerCarouselCenterSection
4101
- }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, bannerCarousel.components.map((node, idx) => /*#__PURE__*/React.createElement(Section$4, {
4123
+ }, /*#__PURE__*/React.createElement(Wrapper, wrapperProps, bannerCarousel?.components?.map((node, idx) => /*#__PURE__*/React.createElement(Section$4, {
4102
4124
  nodeData: node,
4103
4125
  isCustomWebsite: isCustomWebsite,
4104
4126
  key: idx /* or some other unique property */,
@@ -4107,9 +4129,9 @@ function BannerCarouselCenter({
4107
4129
  }))));
4108
4130
  }
4109
4131
 
4110
- var index$o = /*#__PURE__*/Object.freeze({
4111
- __proto__: null,
4112
- 'default': BannerCarouselCenter
4132
+ var index$r = /*#__PURE__*/Object.freeze({
4133
+ __proto__: null,
4134
+ 'default': BannerCarouselCenter
4113
4135
  });
4114
4136
 
4115
4137
  const useSectionStyles$6 = createUseStyles(theme => {
@@ -4402,9 +4424,9 @@ function BannerCarouselCenterv2({
4402
4424
  }))));
4403
4425
  }
4404
4426
 
4405
- var index$n = /*#__PURE__*/Object.freeze({
4406
- __proto__: null,
4407
- 'default': BannerCarouselCenterv2
4427
+ var index$q = /*#__PURE__*/Object.freeze({
4428
+ __proto__: null,
4429
+ 'default': BannerCarouselCenterv2
4408
4430
  });
4409
4431
 
4410
4432
  const useSectionStyles$5 = createUseStyles(theme => {
@@ -4629,13 +4651,13 @@ function BannerCarouselLeft({
4629
4651
  });
4630
4652
  const [{
4631
4653
  bannerCarousel
4632
- }] = sectionData.components;
4633
- const Wrapper = bannerCarousel.components.length > 1 ? Carousel : Fragment;
4654
+ }] = sectionData?.components;
4655
+ const Wrapper = bannerCarousel?.components?.length > 1 ? Carousel : Fragment;
4634
4656
  return /*#__PURE__*/React.createElement("section", {
4635
4657
  className: classes.section
4636
4658
  }, /*#__PURE__*/React.createElement("div", {
4637
4659
  className: classes.sectionContainer
4638
- }, /*#__PURE__*/React.createElement(Wrapper, null, bannerCarousel.components.map((node, idx) => /*#__PURE__*/React.createElement(Section$2, {
4660
+ }, /*#__PURE__*/React.createElement(Wrapper, null, bannerCarousel?.components?.map((node, idx) => /*#__PURE__*/React.createElement(Section$2, {
4639
4661
  nodeData: node,
4640
4662
  key: idx /* or some other unique property */,
4641
4663
  sectionIndex: sectionIndex,
@@ -4643,9 +4665,9 @@ function BannerCarouselLeft({
4643
4665
  })))));
4644
4666
  }
4645
4667
 
4646
- var index$m = /*#__PURE__*/Object.freeze({
4647
- __proto__: null,
4648
- 'default': BannerCarouselLeft
4668
+ var index$p = /*#__PURE__*/Object.freeze({
4669
+ __proto__: null,
4670
+ 'default': BannerCarouselLeft
4649
4671
  });
4650
4672
 
4651
4673
  const useSectionStyles$4 = createUseStyles(theme => ({
@@ -4924,7 +4946,7 @@ function SubscribeToNewsletter({
4924
4946
  isLandingPages,
4925
4947
  extraProps
4926
4948
  } = useContext(PageContext);
4927
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
4949
+ const [nodeData] = sectionData.components;
4928
4950
  const classes = useSectionStyles$4({
4929
4951
  containerWidth,
4930
4952
  isMobile
@@ -5039,9 +5061,9 @@ function SubscribeToNewsletter({
5039
5061
  })))))));
5040
5062
  }
5041
5063
 
5042
- var index$l = /*#__PURE__*/Object.freeze({
5043
- __proto__: null,
5044
- 'default': SubscribeToNewsletter
5064
+ var index$o = /*#__PURE__*/Object.freeze({
5065
+ __proto__: null,
5066
+ 'default': SubscribeToNewsletter
5045
5067
  });
5046
5068
 
5047
5069
  const useTestimonialStyles = createUseStyles(theme => ({
@@ -5327,9 +5349,9 @@ function Testimonials({
5327
5349
  }));
5328
5350
  }
5329
5351
 
5330
- var index$k = /*#__PURE__*/Object.freeze({
5331
- __proto__: null,
5332
- 'default': Testimonials
5352
+ var index$n = /*#__PURE__*/Object.freeze({
5353
+ __proto__: null,
5354
+ 'default': Testimonials
5333
5355
  });
5334
5356
 
5335
5357
  const loaderStyle = theme => ({
@@ -5700,7 +5722,7 @@ function VideoTestimonial({
5700
5722
  containerWidth,
5701
5723
  isMobile
5702
5724
  });
5703
- const [videoData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
5725
+ const [videoData] = sectionData.components;
5704
5726
  const Wrapper = videoData.videoCarousel.components.length > 1 ? Carousel : Fragment;
5705
5727
  return /*#__PURE__*/React.createElement("div", {
5706
5728
  className: classes.videoTestimonialSuperContainer
@@ -5731,9 +5753,9 @@ function VideoTestimonial({
5731
5753
  }))))));
5732
5754
  }
5733
5755
 
5734
- var index$j = /*#__PURE__*/Object.freeze({
5735
- __proto__: null,
5736
- 'default': VideoTestimonial
5756
+ var index$m = /*#__PURE__*/Object.freeze({
5757
+ __proto__: null,
5758
+ 'default': VideoTestimonial
5737
5759
  });
5738
5760
 
5739
5761
  const useVideoStyles = createUseStyles(theme => {
@@ -5920,7 +5942,7 @@ function Video({
5920
5942
  containerWidth
5921
5943
  }
5922
5944
  } = useContext(PageContext);
5923
- const [videoData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
5945
+ const [videoData] = sectionData.components;
5924
5946
  const cardsCount = videoData?.videoCarousel?.components?.length;
5925
5947
  const slidesToShow = isMobile ? 1 : 2;
5926
5948
  const classes = useVideoStyles({
@@ -5967,9 +5989,9 @@ function Video({
5967
5989
  }, carouselContent))));
5968
5990
  }
5969
5991
 
5970
- var index$i = /*#__PURE__*/Object.freeze({
5971
- __proto__: null,
5972
- 'default': Video
5992
+ var index$l = /*#__PURE__*/Object.freeze({
5993
+ __proto__: null,
5994
+ 'default': Video
5973
5995
  });
5974
5996
 
5975
5997
  const useSectionStyles$3 = createUseStyles(theme => ({
@@ -6127,7 +6149,7 @@ function Info({
6127
6149
  } = useContext(PageContext);
6128
6150
  const theme = useTheme();
6129
6151
  const slidesToShow = isMobile ? 1 : 4;
6130
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
6152
+ const [nodeData] = sectionData.components;
6131
6153
  const carouselList = nodeData?.contentList?.components;
6132
6154
  const cardsCount = carouselList?.length;
6133
6155
  const classes = useSectionStyles$3({
@@ -6203,9 +6225,9 @@ function Info({
6203
6225
  }, carouselContent))));
6204
6226
  }
6205
6227
 
6206
- var index$h = /*#__PURE__*/Object.freeze({
6207
- __proto__: null,
6208
- 'default': Info
6228
+ var index$k = /*#__PURE__*/Object.freeze({
6229
+ __proto__: null,
6230
+ 'default': Info
6209
6231
  });
6210
6232
 
6211
6233
  const useSectionStyles$2 = createUseStyles(theme => ({
@@ -6286,7 +6308,7 @@ const TextSection = ({
6286
6308
  containerWidth,
6287
6309
  isMobile
6288
6310
  });
6289
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
6311
+ const [nodeData] = sectionData.components;
6290
6312
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("section", {
6291
6313
  className: classes.section
6292
6314
  }, /*#__PURE__*/React.createElement("div", {
@@ -6322,9 +6344,9 @@ const TextSection = ({
6322
6344
  })))));
6323
6345
  };
6324
6346
 
6325
- var index$g = /*#__PURE__*/Object.freeze({
6326
- __proto__: null,
6327
- 'default': TextSection
6347
+ var index$j = /*#__PURE__*/Object.freeze({
6348
+ __proto__: null,
6349
+ 'default': TextSection
6328
6350
  });
6329
6351
 
6330
6352
  const usePhotoGalleryStyles = createUseStyles(theme => {
@@ -6463,7 +6485,7 @@ function PhotoGallery({
6463
6485
  containerWidth
6464
6486
  }
6465
6487
  } = useContext(PageContext);
6466
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
6488
+ const [nodeData] = sectionData.components;
6467
6489
  const carouselList = nodeData?.cardCarousel?.components;
6468
6490
  const cardsCount = carouselList?.length;
6469
6491
  const slidesToShow = isMobile ? 1 : 2;
@@ -6545,9 +6567,9 @@ function PhotoGallery({
6545
6567
  }, carouselContent))));
6546
6568
  }
6547
6569
 
6548
- var index$f = /*#__PURE__*/Object.freeze({
6549
- __proto__: null,
6550
- 'default': PhotoGallery
6570
+ var index$i = /*#__PURE__*/Object.freeze({
6571
+ __proto__: null,
6572
+ 'default': PhotoGallery
6551
6573
  });
6552
6574
 
6553
6575
  const useFaqListStyles = createUseStyles(theme => ({
@@ -6662,7 +6684,7 @@ const FAQListing = ({
6662
6684
  containerWidth,
6663
6685
  isMobile
6664
6686
  });
6665
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
6687
+ const [nodeData] = sectionData.components;
6666
6688
  return /*#__PURE__*/React.createElement("section", {
6667
6689
  className: classes.section
6668
6690
  }, /*#__PURE__*/React.createElement("div", {
@@ -6728,9 +6750,9 @@ const Accordion = ({
6728
6750
  })));
6729
6751
  };
6730
6752
 
6731
- var index$e = /*#__PURE__*/Object.freeze({
6732
- __proto__: null,
6733
- 'default': FAQListing
6753
+ var index$h = /*#__PURE__*/Object.freeze({
6754
+ __proto__: null,
6755
+ 'default': FAQListing
6734
6756
  });
6735
6757
 
6736
6758
  const useTextGridStyles = createUseStyles(theme => ({
@@ -6840,7 +6862,7 @@ const TextGrid = ({
6840
6862
  containerWidth
6841
6863
  }
6842
6864
  } = useContext(PageContext);
6843
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
6865
+ const [nodeData] = sectionData.components;
6844
6866
  const cardsCount = nodeData?.contentList?.components?.length;
6845
6867
  const slidesToShow = isMobile ? 1 : 2;
6846
6868
  const classes = useTextGridStyles({
@@ -6899,9 +6921,9 @@ const TextGrid = ({
6899
6921
  }, carouselContent))));
6900
6922
  };
6901
6923
 
6902
- var index$d = /*#__PURE__*/Object.freeze({
6903
- __proto__: null,
6904
- 'default': TextGrid
6924
+ var index$g = /*#__PURE__*/Object.freeze({
6925
+ __proto__: null,
6926
+ 'default': TextGrid
6905
6927
  });
6906
6928
 
6907
6929
  const useCourseStyles = createUseStyles(theme => {
@@ -8183,9 +8205,9 @@ function SimpleCardsContainer({
8183
8205
  }, children);
8184
8206
  }
8185
8207
 
8186
- var index$c = /*#__PURE__*/Object.freeze({
8187
- __proto__: null,
8188
- 'default': courses
8208
+ var index$f = /*#__PURE__*/Object.freeze({
8209
+ __proto__: null,
8210
+ 'default': courses
8189
8211
  });
8190
8212
 
8191
8213
  const useTeamStyles = createUseStyles(theme => {
@@ -8449,7 +8471,7 @@ function TeamCard({
8449
8471
  containerWidth
8450
8472
  }
8451
8473
  } = useContext(PageContext);
8452
- const [teamData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
8474
+ const [teamData] = sectionData.components;
8453
8475
  const cardsCount = teamData?.teamCarousel?.components?.length;
8454
8476
  const slidesToShow = isMobile ? 1 : 4;
8455
8477
  const classes = useTeamStyles({
@@ -8501,9 +8523,9 @@ function TeamCard({
8501
8523
  }, " ", getCarouselContent())));
8502
8524
  }
8503
8525
 
8504
- var index$b = /*#__PURE__*/Object.freeze({
8505
- __proto__: null,
8506
- 'default': TeamCard
8526
+ var index$e = /*#__PURE__*/Object.freeze({
8527
+ __proto__: null,
8528
+ 'default': TeamCard
8507
8529
  });
8508
8530
 
8509
8531
  const useSectionStyles$1 = createUseStyles(theme => ({
@@ -8688,7 +8710,7 @@ function FormEnquiry({
8688
8710
  containerWidth,
8689
8711
  isMobile
8690
8712
  });
8691
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
8713
+ const [nodeData] = sectionData.components;
8692
8714
  const [isSubmitted, setIsSubmitted] = useState(false);
8693
8715
  const theme = useTheme();
8694
8716
  let [btnDisabled, setBtnDisabled] = useState(false);
@@ -8922,9 +8944,9 @@ function FormEnquiry({
8922
8944
  })))))));
8923
8945
  }
8924
8946
 
8925
- var index$a = /*#__PURE__*/Object.freeze({
8926
- __proto__: null,
8927
- 'default': FormEnquiry
8947
+ var index$d = /*#__PURE__*/Object.freeze({
8948
+ __proto__: null,
8949
+ 'default': FormEnquiry
8928
8950
  });
8929
8951
 
8930
8952
  const useSectionStyles = createUseStyles(theme => ({
@@ -9145,7 +9167,7 @@ function Contact({
9145
9167
  } = useContext(PageContext);
9146
9168
  let [btnDisabled, setBtnDisabled] = useState(false);
9147
9169
  const [isSubmitted, setIsSubmitted] = useState(false);
9148
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
9170
+ const [nodeData] = sectionData.components;
9149
9171
  const classes = useSectionStyles({
9150
9172
  containerWidth,
9151
9173
  isMobile
@@ -9344,9 +9366,9 @@ function Contact({
9344
9366
  })))))));
9345
9367
  }
9346
9368
 
9347
- var index$9 = /*#__PURE__*/Object.freeze({
9348
- __proto__: null,
9349
- 'default': Contact
9369
+ var index$c = /*#__PURE__*/Object.freeze({
9370
+ __proto__: null,
9371
+ 'default': Contact
9350
9372
  });
9351
9373
 
9352
9374
  const useWebinarPromotionPage = createUseStyles(theme => {
@@ -9821,13 +9843,12 @@ function CoursePromotionPage$1({
9821
9843
  }))));
9822
9844
  }
9823
9845
 
9824
- var index$8 = /*#__PURE__*/Object.freeze({
9825
- __proto__: null,
9826
- 'default': CoursePromotionPage$1
9846
+ var index$b = /*#__PURE__*/Object.freeze({
9847
+ __proto__: null,
9848
+ 'default': CoursePromotionPage$1
9827
9849
  });
9828
9850
 
9829
9851
  const useCoursePromotionPage$1 = createUseStyles(theme => {
9830
- console.log(theme, 'themere');
9831
9852
  return {
9832
9853
  courseSuperContainer: {
9833
9854
  display: 'flex',
@@ -10408,9 +10429,9 @@ function CoursePromotionPage({
10408
10429
  }))));
10409
10430
  }
10410
10431
 
10411
- var index$7 = /*#__PURE__*/Object.freeze({
10412
- __proto__: null,
10413
- 'default': CoursePromotionPage
10432
+ var index$a = /*#__PURE__*/Object.freeze({
10433
+ __proto__: null,
10434
+ 'default': CoursePromotionPage
10414
10435
  });
10415
10436
 
10416
10437
  const useFormPageStyles = createUseStyles(theme => ({
@@ -10771,9 +10792,9 @@ const FormPage = ({
10771
10792
  })))));
10772
10793
  };
10773
10794
 
10774
- var index$6 = /*#__PURE__*/Object.freeze({
10775
- __proto__: null,
10776
- 'default': FormPage
10795
+ var index$9 = /*#__PURE__*/Object.freeze({
10796
+ __proto__: null,
10797
+ 'default': FormPage
10777
10798
  });
10778
10799
 
10779
10800
  const useTilesStyles = createUseStyles(theme => {
@@ -10871,7 +10892,7 @@ function Tiles({
10871
10892
  const classes = useTilesStyles({
10872
10893
  isMobile
10873
10894
  });
10874
- const nodeData = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
10895
+ const nodeData = sectionData.components;
10875
10896
  const tilesList = nodeData[0]?.tilesList.components;
10876
10897
  const handleClick = value => {
10877
10898
  if (!isEdit && value) {
@@ -10919,9 +10940,9 @@ function Tiles({
10919
10940
  }, TileDiv)));
10920
10941
  }
10921
10942
 
10922
- var index$5 = /*#__PURE__*/Object.freeze({
10923
- __proto__: null,
10924
- 'default': Tiles
10943
+ var index$8 = /*#__PURE__*/Object.freeze({
10944
+ __proto__: null,
10945
+ 'default': Tiles
10925
10946
  });
10926
10947
 
10927
10948
  const useEmailStyles = createUseStyles(theme => ({
@@ -11392,9 +11413,9 @@ function EmailDripMarket({
11392
11413
  })));
11393
11414
  }
11394
11415
 
11395
- var index$4 = /*#__PURE__*/Object.freeze({
11396
- __proto__: null,
11397
- 'default': EmailDripMarket
11416
+ var index$7 = /*#__PURE__*/Object.freeze({
11417
+ __proto__: null,
11418
+ 'default': EmailDripMarket
11398
11419
  });
11399
11420
 
11400
11421
  const useAboutInstituteStyles = createUseStyles(theme => ({
@@ -11618,7 +11639,7 @@ function ABOUT_INSTITUTE({
11618
11639
  containerWidth,
11619
11640
  isMobile
11620
11641
  });
11621
- const [nodeData] = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
11642
+ const [nodeData] = sectionData.components;
11622
11643
  const [highlightNodeData] = nodeData?.highlight?.components;
11623
11644
  const theme = useTheme();
11624
11645
  const ImageJSX = () => {
@@ -11760,85 +11781,936 @@ function ABOUT_INSTITUTE({
11760
11781
  }, /*#__PURE__*/React.createElement(ImageJSX, null), /*#__PURE__*/React.createElement(ContentJSX, null)), /*#__PURE__*/React.createElement(HighlightJSX, null)));
11761
11782
  }
11762
11783
 
11763
- var index$3 = /*#__PURE__*/Object.freeze({
11764
- __proto__: null,
11765
- 'default': ABOUT_INSTITUTE
11784
+ var index$6 = /*#__PURE__*/Object.freeze({
11785
+ __proto__: null,
11786
+ 'default': ABOUT_INSTITUTE
11766
11787
  });
11767
11788
 
11768
- // import TIMER_AND_CALL from '../../sections/timerAndCall';
11769
- const TYPE_TO_COMPONENT_MAP = {
11770
- BANNER_CAROUSEL_RIGHT: BannerCarouselRight,
11771
- GRID_CARD: List,
11772
- BANNER_CAROUSEL_CENTER: BannerCarouselCenter,
11773
- BANNER_CAROUSEL_CENTER_V2: BannerCarouselCenterv2,
11774
- BANNER_CAROUSEL_LEFT: BannerCarouselLeft,
11775
- FORM_SUBSCRIBE: SubscribeToNewsletter,
11776
- TEXT_TESTIMONIAL: Testimonials,
11777
- VIDEO_TESTIMONIAL: VideoTestimonial,
11778
- VIDEO: Video,
11779
- INFO: Info,
11780
- TEXT: TextSection,
11781
- IMAGE_GALLERY: PhotoGallery,
11782
- FAQ_LISTING: FAQListing,
11783
- TEXT_GRID: TextGrid,
11784
- COURSE_CAROUSEL: courses,
11785
- TEAM_CARD: TeamCard,
11786
- CONTACT: FormEnquiry,
11787
- FORM_ENQUIRY: Contact,
11788
- WEBINAR_LANDING_PAGE: CoursePromotionPage$1,
11789
- COURSE_LANDING_PAGE: CoursePromotionPage,
11790
- FORM_LANDING_PAGE: FormPage,
11791
- TILES_SECTION: Tiles,
11792
- EMAIL_DRIP_MARKET: EmailDripMarket,
11793
- ABOUT_INSTITUTE
11794
- };
11795
- const getCompToRender = type => TYPE_TO_COMPONENT_MAP[type] || (() => null);
11796
- const MemoisedSection = /*#__PURE__*/memo(({
11797
- sectionData,
11798
- extraProps,
11799
- isCustomWebsite,
11800
- sectionIndex
11801
- }) => {
11802
- console.log('extraProps in section data', extraProps);
11803
- const SectionComp = getCompToRender(sectionData.type);
11804
- return /*#__PURE__*/React.createElement(SectionComp, {
11805
- sectionData: sectionData,
11806
- extraProps: extraProps,
11807
- isCustomWebsite: isCustomWebsite,
11808
- sectionIndex: sectionIndex
11809
- });
11789
+ const useCounterSectionStyles = createUseStyles(theme => {
11790
+ return {
11791
+ section: {
11792
+ width: '100%',
11793
+ borderRadius: theme.shape?.borderRadius?.regular || '12px',
11794
+ overflow: 'hidden',
11795
+ backgroundImage: ({
11796
+ backgroundImage
11797
+ } = {}) => backgroundImage ? `url("${backgroundImage}")` : 'none',
11798
+ backgroundColor: ({
11799
+ backgroundColor
11800
+ } = {}) => backgroundColor || '#f8f8fa',
11801
+ backgroundSize: 'cover',
11802
+ backgroundPosition: 'center',
11803
+ backgroundRepeat: 'no-repeat',
11804
+ '&, & *, & *:before, & *:after': {
11805
+ fontFamily: theme?.typography?.fontFamily,
11806
+ boxSizing: 'border-box'
11807
+ }
11808
+ },
11809
+ container: {
11810
+ width: '100%',
11811
+ maxWidth: ({
11812
+ containerWidth
11813
+ } = {}) => containerWidth || '1440px',
11814
+ margin: '0 auto',
11815
+ padding: ({
11816
+ isMobile
11817
+ } = {}) => isMobile ? `${theme.spacing.padding.regular}px ${theme.spacing.padding.tiny}px` : `${theme.spacing.padding.small}px ${theme.spacing.padding.medium}px`
11818
+ },
11819
+ grid: {
11820
+ display: 'grid',
11821
+ gridTemplateColumns: 'repeat(4, 1fr)',
11822
+ gap: ({
11823
+ isMobile
11824
+ } = {}) => isMobile ? '24px' : '32px',
11825
+ alignItems: 'stretch'
11826
+ },
11827
+ counterItem: {
11828
+ display: 'flex',
11829
+ flexDirection: 'column',
11830
+ alignItems: 'center',
11831
+ justifyContent: 'center',
11832
+ textAlign: 'center'
11833
+ },
11834
+ value: {
11835
+ margin: 0,
11836
+ marginBottom: '8px',
11837
+ fontSize: '64px',
11838
+ fontWeight: theme.typography?.fontWeight?.bold,
11839
+ lineHeight: 1.1,
11840
+ color: 'rgba(247, 37, 133, 1)' ,
11841
+ wordBreak: 'break-word'
11842
+ },
11843
+ description: {
11844
+ margin: 0,
11845
+ fontSize: '20px',
11846
+ lineHeight: 1.4,
11847
+ fontWeight: '700',
11848
+ color: 'rgba(51, 51, 51, 1)' ,
11849
+ wordBreak: 'break-word'
11850
+ },
11851
+ '@media (max-width: 1024px)': {
11852
+ grid: {
11853
+ gridTemplateColumns: 'repeat(2, 1fr)',
11854
+ gap: '28px'
11855
+ }
11856
+ },
11857
+ '@media (max-width: 767px)': {
11858
+ section: {
11859
+ borderRadius: theme.shape?.borderRadius?.small || '8px'
11860
+ },
11861
+ container: {
11862
+ padding: `${theme.spacing.padding.regular}px ${theme.spacing.padding.tiny}px`
11863
+ },
11864
+ grid: {
11865
+ gridTemplateColumns: '1fr',
11866
+ gap: '24px'
11867
+ },
11868
+ value: {
11869
+ fontSize: theme.typography.fontSize.h3,
11870
+ marginBottom: '4px',
11871
+ lineHeight: 1.1
11872
+ },
11873
+ description: {
11874
+ fontSize: theme.typography.fontSize.body,
11875
+ lineHeight: 1.4
11876
+ }
11877
+ }
11878
+ };
11810
11879
  });
11811
- const SectionWithBackground = withSectionBackground(MemoisedSection);
11812
- function SectionRenderer({
11880
+
11881
+ function CounterSection({
11813
11882
  sectionData,
11814
- extraProps,
11815
- isCustomWebsite,
11816
11883
  sectionIndex
11817
11884
  }) {
11818
- let sectionBg = {};
11819
- if (sectionData?.isV2Section) {
11820
- let currentObj = sectionData?.components?.find(component => component.hasOwnProperty('sectionsBgname')?.sectionBgData || {});
11821
- sectionBg = currentObj?.sectionsBgname?.sectionBgData || {};
11822
- }
11823
- return /*#__PURE__*/React.createElement(SectionWithBackground, {
11824
- sectionData: sectionData,
11825
- extraProps: extraProps,
11826
- isCustomWebsite: isCustomWebsite,
11827
- sectionIndex: sectionIndex,
11828
- isSkipV2Section: sectionData?.isV2Section,
11829
- componentBg: sectionBg || {}
11885
+ const {
11886
+ layout: {
11887
+ containerWidth
11888
+ },
11889
+ isMobile
11890
+ } = useContext(PageContext);
11891
+ console.log('llll', sectionData);
11892
+ sectionData.components = sectionData.components;
11893
+ const metadata = sectionData.metadata || {};
11894
+ const backgroundImage = metadata.backgroundImage || '';
11895
+ const backgroundColor = metadata.backgroundColor || '#f8f8fa';
11896
+ const classes = useCounterSectionStyles({
11897
+ containerWidth,
11898
+ isMobile,
11899
+ backgroundImage: backgroundImage || null,
11900
+ backgroundColor
11830
11901
  });
11831
- }
11832
-
11833
- function PageRenderer({
11834
- pageData: {
11835
- metadata: {
11836
- theme: {
11837
- color = defaultTheme.color,
11838
- font = defaultTheme.font
11839
- } = defaultTheme,
11840
- layout = defaultLayout
11841
- } = defaultMetadata,
11902
+ const cardData = sectionData?.components[0];
11903
+ const [sectionComponent] = sectionData.components || [];
11904
+ const counterSection = sectionComponent?.counterSection;
11905
+ counterSection?.components || [];
11906
+ if (!cardData) return null;
11907
+ return /*#__PURE__*/React.createElement("section", {
11908
+ className: classes.section
11909
+ }, /*#__PURE__*/React.createElement("div", {
11910
+ className: classes.container
11911
+ }, /*#__PURE__*/React.createElement("div", {
11912
+ className: classes.grid
11913
+ }, cardData?.contentList?.components?.map((item, index) => /*#__PURE__*/React.createElement("div", {
11914
+ key: item._id || index,
11915
+ className: classes.counterItem
11916
+ }, item.contentHeading?.metadata?.value != null && item.contentHeading?.metadata?.value !== '' && /*#__PURE__*/React.createElement("h2", {
11917
+ ref: item.contentHeading?.refSetter,
11918
+ className: classes.value,
11919
+ dangerouslySetInnerHTML: {
11920
+ __html: item.contentHeading.metadata.value
11921
+ }
11922
+ }), item.contentPara?.metadata?.value != null && item.contentPara?.metadata?.value !== '' && /*#__PURE__*/React.createElement("p", {
11923
+ ref: item.contentPara?.refSetter,
11924
+ className: classes.description,
11925
+ dangerouslySetInnerHTML: {
11926
+ __html: item.contentPara.metadata.value
11927
+ }
11928
+ }))))));
11929
+ }
11930
+
11931
+ var index$5 = /*#__PURE__*/Object.freeze({
11932
+ __proto__: null,
11933
+ 'default': CounterSection
11934
+ });
11935
+
11936
+ const BREAKPOINTS = {
11937
+ mobile: 0,
11938
+ tablet: 768,
11939
+ desktop: 1024
11940
+ };
11941
+
11942
+ /**
11943
+ * Get current breakpoint from window width
11944
+ */
11945
+ const getBreakpoint = width => {
11946
+ if (width >= BREAKPOINTS.desktop) return 'desktop';
11947
+ if (width >= BREAKPOINTS.tablet) return 'tablet';
11948
+ return 'mobile';
11949
+ };
11950
+ const stickyBarBase = {
11951
+ position: 'fixed',
11952
+ left: 0,
11953
+ right: 0,
11954
+ bottom: 0,
11955
+ zIndex: 9998,
11956
+ display: 'flex',
11957
+ alignItems: 'center',
11958
+ justifyContent: 'center',
11959
+ backgroundColor: '#F8F9FB',
11960
+ boxShadow: '0 -2px 8px rgba(0, 0, 0, 0.06)',
11961
+ borderTop: '1px solid #E5E7EB'
11962
+ };
11963
+ const stickyBarResponsive = {
11964
+ mobile: {
11965
+ ...stickyBarBase,
11966
+ padding: '12px 16px',
11967
+ gap: '12px',
11968
+ flexDirection: 'column',
11969
+ alignItems: 'stretch'
11970
+ },
11971
+ tablet: {
11972
+ ...stickyBarBase,
11973
+ padding: '14px 24px',
11974
+ gap: '16px',
11975
+ flexDirection: 'row',
11976
+ alignItems: 'center'
11977
+ },
11978
+ desktop: {
11979
+ ...stickyBarBase,
11980
+ padding: '16px 32px',
11981
+ gap: '24px',
11982
+ flexDirection: 'row',
11983
+ alignItems: 'center'
11984
+ }
11985
+ };
11986
+ const getStickyBarStyle = breakpoint => stickyBarResponsive[breakpoint] || stickyBarResponsive.mobile;
11987
+ const stickyTextBase = {
11988
+ color: '#343A40',
11989
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
11990
+ margin: 0
11991
+ };
11992
+ const stickyTextResponsive = {
11993
+ mobile: {
11994
+ ...stickyTextBase,
11995
+ fontSize: '13px',
11996
+ lineHeight: 1.4,
11997
+ textAlign: 'center'
11998
+ },
11999
+ tablet: {
12000
+ ...stickyTextBase,
12001
+ fontSize: '14px',
12002
+ lineHeight: 1.45,
12003
+ textAlign: 'left'
12004
+ },
12005
+ desktop: {
12006
+ ...stickyTextBase,
12007
+ fontSize: '15px',
12008
+ lineHeight: 1.5,
12009
+ textAlign: 'left'
12010
+ }
12011
+ };
12012
+ const getStickyTextStyle = breakpoint => stickyTextResponsive[breakpoint] || stickyTextResponsive.mobile;
12013
+ const stickyButtonBase = {
12014
+ backgroundColor: '#3366FF',
12015
+ color: '#FFFFFF',
12016
+ border: 'none',
12017
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
12018
+ fontWeight: 600,
12019
+ textTransform: 'uppercase',
12020
+ letterSpacing: '0.02em',
12021
+ cursor: 'pointer',
12022
+ whiteSpace: 'nowrap',
12023
+ flexShrink: 0
12024
+ };
12025
+ const stickyButtonResponsive = {
12026
+ mobile: {
12027
+ ...stickyButtonBase,
12028
+ padding: '10px 20px',
12029
+ fontSize: '12px',
12030
+ borderRadius: '6px'
12031
+ },
12032
+ tablet: {
12033
+ ...stickyButtonBase,
12034
+ padding: '12px 24px',
12035
+ fontSize: '13px',
12036
+ borderRadius: '8px'
12037
+ },
12038
+ desktop: {
12039
+ ...stickyButtonBase,
12040
+ padding: '14px 28px',
12041
+ fontSize: '14px',
12042
+ borderRadius: '8px'
12043
+ }
12044
+ };
12045
+ const getStickyButtonStyle = breakpoint => stickyButtonResponsive[breakpoint] || stickyButtonResponsive.mobile;
12046
+
12047
+ // --- Floating (WhatsApp) type ---
12048
+
12049
+ const floatingButtonBase = {
12050
+ position: 'fixed',
12051
+ bottom: 24,
12052
+ right: 24,
12053
+ width: 'fit-content',
12054
+ marginLeft: 'auto',
12055
+ zIndex: 9999,
12056
+ display: 'inline-flex',
12057
+ alignItems: 'center',
12058
+ gap: '10px',
12059
+ padding: '12px 20px',
12060
+ backgroundColor: '#FFFFFF',
12061
+ border: '1px solid #E5E7EB',
12062
+ borderRadius: '9999px',
12063
+ boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',
12064
+ cursor: 'pointer',
12065
+ textDecoration: 'none',
12066
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
12067
+ fontWeight: 700,
12068
+ fontSize: '14px',
12069
+ textTransform: 'uppercase',
12070
+ letterSpacing: '0.02em',
12071
+ color: '#000000',
12072
+ transition: 'box-shadow 0.2s ease, transform 0.2s ease'
12073
+ };
12074
+ const floatingButtonResponsive = {
12075
+ mobile: {
12076
+ ...floatingButtonBase,
12077
+ bottom: 16,
12078
+ left: 16,
12079
+ padding: '10px 16px',
12080
+ gap: '8px',
12081
+ fontSize: '12px'
12082
+ },
12083
+ tablet: {
12084
+ ...floatingButtonBase,
12085
+ bottom: 20,
12086
+ left: 20,
12087
+ padding: '12px 18px',
12088
+ gap: '10px',
12089
+ fontSize: '13px'
12090
+ },
12091
+ desktop: {
12092
+ ...floatingButtonBase,
12093
+ bottom: 24,
12094
+ left: 24,
12095
+ padding: '12px 20px',
12096
+ gap: '10px',
12097
+ fontSize: '14px'
12098
+ }
12099
+ };
12100
+ const getFloatingButtonStyle = breakpoint => floatingButtonResponsive[breakpoint] || floatingButtonResponsive.mobile;
12101
+ const whatsAppIconSvgSize = {
12102
+ mobile: 24,
12103
+ tablet: 26,
12104
+ desktop: 28
12105
+ };
12106
+ const getWhatsAppIconSize = breakpoint => whatsAppIconSvgSize[breakpoint] ?? whatsAppIconSvgSize.mobile;
12107
+
12108
+ const DEFAULT_WHATSAPP_ICON_COLOR = '#25D366';
12109
+
12110
+ /** Build WhatsApp wa.me URL from phone number (digits only, optional + prefix). */
12111
+ function buildWhatsAppUrl(phoneNumber) {
12112
+ if (!phoneNumber || typeof phoneNumber !== 'string') return null;
12113
+ const digits = phoneNumber.replace(/\D/g, '');
12114
+ return digits.length > 0 ? `https://wa.me/${digits}` : null;
12115
+ }
12116
+
12117
+ /**
12118
+ * WhatsApp icon SVG – bubble color is dynamic via props (default #25D366)
12119
+ */
12120
+ const WhatsAppIcon = ({
12121
+ size = 28,
12122
+ color = DEFAULT_WHATSAPP_ICON_COLOR
12123
+ }) => /*#__PURE__*/React.createElement("svg", {
12124
+ width: size,
12125
+ height: size,
12126
+ viewBox: "0 0 24 24",
12127
+ fill: "none",
12128
+ xmlns: "http://www.w3.org/2000/svg",
12129
+ "aria-hidden": true
12130
+ }, /*#__PURE__*/React.createElement("path", {
12131
+ d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z",
12132
+ fill: color
12133
+ }));
12134
+
12135
+ /** Icon: image when iconImageUrl is provided, otherwise WhatsApp SVG */
12136
+ const CtaIcon = ({
12137
+ size = 28,
12138
+ color,
12139
+ iconImageUrl
12140
+ }) => {
12141
+ if (iconImageUrl && typeof iconImageUrl === 'string') {
12142
+ return /*#__PURE__*/React.createElement("img", {
12143
+ src: iconImageUrl,
12144
+ alt: "",
12145
+ width: size,
12146
+ height: size,
12147
+ style: {
12148
+ display: 'block',
12149
+ objectFit: 'contain'
12150
+ },
12151
+ "aria-hidden": true
12152
+ });
12153
+ }
12154
+ return /*#__PURE__*/React.createElement(WhatsAppIcon, {
12155
+ size: size,
12156
+ color: color ?? DEFAULT_WHATSAPP_ICON_COLOR
12157
+ });
12158
+ };
12159
+
12160
+ /**
12161
+ * Sticky CTA component.
12162
+ * Renders relative to viewport (app root), not parent section.
12163
+ * Accepts either sectionData (from pageRenderer/sectionRenderer) or flat props.
12164
+ *
12165
+ * @param {object} [sectionData] - Section payload when rendered via SectionRenderer: { type, label, components: [{ type, stickyMessage, ... }] }
12166
+ * @param {string} type - "sticky" | "floating"
12167
+ * @param {string} [stickyMessage] - Message text for sticky bar
12168
+ * @param {string} [stickyButtonText] - CTA button label (default "ENQUIRE NOW")
12169
+ * @param {string} [whatsAppPhoneNumber] - Mobile number for WhatsApp
12170
+ * @param {string} [whatsAppHref] - Optional fallback full URL when whatsAppPhoneNumber is not provided
12171
+ * @param {string} [whatsAppLabel] - Label next to icon (default "SUPPORT")
12172
+ * @param {string} [whatsAppIconColor] - WhatsApp icon color (used when iconImageUrl is not set)
12173
+ * @param {string} [whatsAppButtonBackgroundColor] - Floating button background color
12174
+ * @param {string} [iconImageUrl] - Optional image URL for the icon; when set, shows <img> instead of WhatsApp SVG
12175
+ * @param {object} [extraProps] - From SectionRenderer; extraProps.isEdit true shows in-flow edit hint
12176
+ * @param {boolean} [showEditHint] - When true, shows "Click on edit button to edit this section" in normal flow
12177
+ */
12178
+ function StickyCta({
12179
+ sectionData,
12180
+ type = 'sticky',
12181
+ stickyMessage = 'Live Masterclass will be on 26 January (Monday) from 05:00 PM',
12182
+ stickyButtonText = 'ENQUIRE NOW',
12183
+ whatsAppPhoneNumber,
12184
+ whatsAppHref,
12185
+ whatsAppLabel = 'SUPPORT',
12186
+ whatsAppIconColor,
12187
+ whatsAppButtonBackgroundColor,
12188
+ iconImageUrl
12189
+ }) {
12190
+ console.log('nishu03333', sectionData);
12191
+ const node = sectionData?.components?.[0];
12192
+ const contentList = node?.contentList?.components || [];
12193
+ const showEditHint = sectionData?.isDefaultEditor ?? false;
12194
+ const propsFromSection = node ? {
12195
+ type: node?.title?.metadata?.value ?? type,
12196
+ stickyMessage: contentList[1]?.contentPara?.metadata?.value ?? stickyMessage,
12197
+ stickyButtonText: contentList[1]?.contentHeading?.metadata?.value ?? stickyButtonText,
12198
+ whatsAppPhoneNumber: node.subheading?.metadata?.value ?? whatsAppPhoneNumber,
12199
+ whatsAppHref: node.whatsAppHref ?? whatsAppHref,
12200
+ whatsAppLabel: contentList[0]?.contentHeading?.metadata?.value ?? whatsAppLabel,
12201
+ whatsAppIconColor: node.whatsAppIconColor ?? whatsAppIconColor,
12202
+ whatsAppButtonBackgroundColor: node.whatsAppButtonBackgroundColor ?? whatsAppButtonBackgroundColor,
12203
+ iconImageUrl: contentList[0]?.contentPara?.metadata?.value ?? iconImageUrl
12204
+ } : null;
12205
+ const p = propsFromSection ?? {
12206
+ type,
12207
+ stickyMessage,
12208
+ stickyButtonText,
12209
+ whatsAppPhoneNumber,
12210
+ whatsAppHref,
12211
+ whatsAppLabel,
12212
+ whatsAppIconColor,
12213
+ whatsAppButtonBackgroundColor,
12214
+ iconImageUrl
12215
+ };
12216
+ const whatsAppUrl = p?.whatsAppPhoneNumber ? p?.whatsAppPhoneNumber : buildWhatsAppUrl(p?.whatsAppPhoneNumber);
12217
+ const [breakpoint, setBreakpoint] = useState(() => typeof window !== 'undefined' ? getBreakpoint(window.innerWidth) : 'mobile');
12218
+ useEffect(() => {
12219
+ if (typeof window === 'undefined') return;
12220
+ const onResize = () => setBreakpoint(getBreakpoint(window.innerWidth));
12221
+ window.addEventListener('resize', onResize);
12222
+ return () => window.removeEventListener('resize', onResize);
12223
+ }, []);
12224
+ const editHintBlock = showEditHint ? /*#__PURE__*/React.createElement("div", {
12225
+ "data-section": "sticky-cta-edit-hint",
12226
+ style: {
12227
+ position: 'relative',
12228
+ width: '100%',
12229
+ padding: '12px 16px',
12230
+ textAlign: 'center',
12231
+ backgroundColor: '#f5f5f5',
12232
+ border: '1px dashed #ccc',
12233
+ borderRadius: 8,
12234
+ marginBottom: 8
12235
+ }
12236
+ }, /*#__PURE__*/React.createElement("h2", {
12237
+ style: {
12238
+ margin: 0,
12239
+ fontSize: 16,
12240
+ fontWeight: 600,
12241
+ color: '#555'
12242
+ }
12243
+ }, "Click on edit button to edit this section")) : null;
12244
+ if (p.type === 'floating') {
12245
+ const buttonStyle = {
12246
+ ...getFloatingButtonStyle(breakpoint),
12247
+ ...(p.whatsAppButtonBackgroundColor != null && {
12248
+ backgroundColor: p.whatsAppButtonBackgroundColor
12249
+ })
12250
+ };
12251
+ const iconSize = getWhatsAppIconSize(breakpoint);
12252
+ const iconColor = p.whatsAppIconColor ?? DEFAULT_WHATSAPP_ICON_COLOR;
12253
+ return /*#__PURE__*/React.createElement(React.Fragment, null, editHintBlock, /*#__PURE__*/React.createElement("a", {
12254
+ href: whatsAppUrl,
12255
+ target: "_blank",
12256
+ rel: "noopener noreferrer",
12257
+ "access-cta": "DIY",
12258
+ style: buttonStyle,
12259
+ onMouseEnter: e => {
12260
+ e.currentTarget.style.boxShadow = '0 6px 16px rgba(0, 0, 0, 0.12)';
12261
+ e.currentTarget.style.transform = 'scale(1.02)';
12262
+ },
12263
+ onMouseLeave: e => {
12264
+ e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.1)';
12265
+ e.currentTarget.style.transform = 'scale(1)';
12266
+ },
12267
+ "aria-label": `${p.whatsAppLabel} via WhatsApp`
12268
+ }, /*#__PURE__*/React.createElement(CtaIcon, {
12269
+ size: iconSize,
12270
+ color: iconColor,
12271
+ iconImageUrl: p.iconImageUrl
12272
+ }), /*#__PURE__*/React.createElement("span", null, p.whatsAppLabel)));
12273
+ }
12274
+
12275
+ // type === 'sticky' – button uses mobile number from props to build URL; click redirects to WhatsApp
12276
+ const barStyle = getStickyBarStyle(breakpoint);
12277
+ const textStyle = getStickyTextStyle(breakpoint);
12278
+ const buttonStyle = getStickyButtonStyle(breakpoint);
12279
+ return /*#__PURE__*/React.createElement(React.Fragment, null, editHintBlock, /*#__PURE__*/React.createElement("div", {
12280
+ style: barStyle,
12281
+ role: "banner"
12282
+ }, /*#__PURE__*/React.createElement("p", {
12283
+ style: textStyle
12284
+ }, p.stickyMessage), /*#__PURE__*/React.createElement("a", {
12285
+ href: whatsAppUrl,
12286
+ target: "_blank",
12287
+ rel: "noopener noreferrer",
12288
+ "access-cta-container": "DIY",
12289
+ style: {
12290
+ ...buttonStyle,
12291
+ textDecoration: 'none',
12292
+ display: 'inline-flex',
12293
+ alignItems: 'center',
12294
+ justifyContent: 'center'
12295
+ }
12296
+ }, p.stickyButtonText)));
12297
+ }
12298
+
12299
+ var index$4 = /*#__PURE__*/Object.freeze({
12300
+ __proto__: null,
12301
+ 'default': StickyCta,
12302
+ WhatsAppIcon: WhatsAppIcon
12303
+ });
12304
+
12305
+ /**
12306
+ * Styles for CustomHtmlRender section.
12307
+ * Wrapper for user-provided HTML content.
12308
+ */
12309
+
12310
+ const sectionStyle = {
12311
+ width: '100%',
12312
+ maxWidth: '100%',
12313
+ height: 'auto',
12314
+ minHeight: 'auto',
12315
+ margin: 0,
12316
+ padding: 0,
12317
+ overflow: 'visible'
12318
+ };
12319
+
12320
+ const SHADOW_WRAPPER_CLASS = 'custom-html-body-wrap';
12321
+ const SHADOW_INNER_CLASS = 'custom-html-render__shadow-inner';
12322
+
12323
+ /**
12324
+ * Parses full HTML string and extracts styles + body/content for Shadow DOM.
12325
+ * - Strips <!DOCTYPE>, <html>, <head>, <body> and uses inner content + all <style>.
12326
+ * - Scopes "body" and "html" selectors to a wrapper class so styles don't leak to the main app.
12327
+ */
12328
+ function parseHtmlForShadow(html) {
12329
+ if (typeof html !== 'string' || !html.trim()) return {
12330
+ styles: '',
12331
+ content: ''
12332
+ };
12333
+ const styleRegex = /<style[^>]*>([\s\S]*?)<\/style>/gi;
12334
+ const bodyRegex = /<body[^>]*>([\s\S]*?)<\/body>/i;
12335
+ let styles = '';
12336
+ let match;
12337
+ while ((match = styleRegex.exec(html)) !== null) {
12338
+ styles += match[1];
12339
+ }
12340
+ const bodyMatch = html.match(bodyRegex);
12341
+ const rawContent = bodyMatch ? bodyMatch[1].trim() : html;
12342
+
12343
+ // Scope "body" and "html" in CSS to the wrapper so they don't affect the main page.
12344
+ // Only replace as standalone selectors (word boundary) to avoid breaking values like content: "body"
12345
+ let scopedStyles = styles.replace(/\bbody\b(?=\s*[{,])/g, `.${SHADOW_WRAPPER_CLASS}`).replace(/\bhtml\b(?=\s*[{,])/g, `.${SHADOW_WRAPPER_CLASS}`);
12346
+ const content = bodyMatch ? `<div class="${SHADOW_WRAPPER_CLASS}">${rawContent}</div>` : rawContent;
12347
+ return {
12348
+ styles: scopedStyles,
12349
+ content
12350
+ };
12351
+ }
12352
+
12353
+ /**
12354
+ * Base styles inside shadow so the body wrapper has layout and can show background/padding.
12355
+ */
12356
+ const SHADOW_BASE_STYLES = `
12357
+ .${SHADOW_INNER_CLASS}, .${SHADOW_WRAPPER_CLASS} {
12358
+ display: block;
12359
+ width: 100%;
12360
+ box-sizing: border-box;
12361
+ }
12362
+ .${SHADOW_INNER_CLASS} {
12363
+ min-height: 0;
12364
+ }
12365
+ `;
12366
+
12367
+ /**
12368
+ * Resolves HTML string from section data.
12369
+ * Supports: sectionData.components[0].CustomHtml.metadata.value (API shape)
12370
+ * and sectionData.components[0].html or props.html (legacy/flat).
12371
+ */
12372
+ function getHtmlFromSectionData(sectionData, fallbackHtml = '') {
12373
+ const node = sectionData?.components?.[0];
12374
+ if (!node) return fallbackHtml;
12375
+ const fromCustomHtml = node.CustomHtml?.metadata?.value;
12376
+ if (typeof fromCustomHtml === 'string') return fromCustomHtml;
12377
+ if (typeof node.html === 'string') return node.html;
12378
+ return fallbackHtml;
12379
+ }
12380
+
12381
+ /**
12382
+ * CustomHtmlRender – renders any full HTML document or fragment in an encapsulated Shadow DOM.
12383
+ * Receives html via sectionData.components[0].CustomHtml.metadata.value (or .html) or props.html.
12384
+ * Body/html background, padding, and all other CSS apply only inside this section.
12385
+ */
12386
+ function CustomHtmlRender({
12387
+ sectionData,
12388
+ html = '',
12389
+ className,
12390
+ style = {}
12391
+ }) {
12392
+ const containerRef = useRef(null);
12393
+ const node = sectionData?.components?.[0];
12394
+ const resolvedHtml = getHtmlFromSectionData(sectionData, html);
12395
+ const p = node ? {
12396
+ html: resolvedHtml,
12397
+ className: node.className ?? className,
12398
+ style: node.style ?? style
12399
+ } : {
12400
+ html: resolvedHtml,
12401
+ className,
12402
+ style
12403
+ };
12404
+ const safeHtml = typeof p.html === 'string' ? p.html : '';
12405
+ const setSectionRef = el => {
12406
+ containerRef.current = el;
12407
+ const refSetter = node?.CustomHtml?.refSetter;
12408
+ if (refSetter) {
12409
+ if (typeof refSetter === 'function') refSetter(el);else if (refSetter && typeof refSetter === 'object') refSetter.current = el;
12410
+ }
12411
+ };
12412
+ useEffect(() => {
12413
+ if (!safeHtml.trim() || !containerRef.current) return;
12414
+ const {
12415
+ styles,
12416
+ content
12417
+ } = parseHtmlForShadow(safeHtml);
12418
+ const host = containerRef.current;
12419
+ if (!host.shadowRoot) {
12420
+ host.attachShadow({
12421
+ mode: 'open'
12422
+ });
12423
+ }
12424
+ const shadowRoot = host.shadowRoot;
12425
+ shadowRoot.innerHTML = '';
12426
+ const inner = document.createElement('div');
12427
+ inner.className = SHADOW_INNER_CLASS;
12428
+ if (SHADOW_BASE_STYLES) {
12429
+ const baseStyle = document.createElement('style');
12430
+ baseStyle.textContent = SHADOW_BASE_STYLES;
12431
+ shadowRoot.appendChild(baseStyle);
12432
+ }
12433
+ if (styles) {
12434
+ const styleEl = document.createElement('style');
12435
+ styleEl.textContent = styles;
12436
+ shadowRoot.appendChild(styleEl);
12437
+ }
12438
+ const contentWrap = document.createElement('div');
12439
+ contentWrap.innerHTML = content;
12440
+ while (contentWrap.firstChild) {
12441
+ inner.appendChild(contentWrap.firstChild);
12442
+ }
12443
+ shadowRoot.appendChild(inner);
12444
+ return () => {
12445
+ shadowRoot.innerHTML = '';
12446
+ };
12447
+ }, [safeHtml]);
12448
+ if (!safeHtml.trim()) {
12449
+ return null;
12450
+ }
12451
+ return /*#__PURE__*/React.createElement("section", {
12452
+ ref: setSectionRef,
12453
+ className: p.className,
12454
+ style: {
12455
+ ...sectionStyle,
12456
+ ...p.style
12457
+ },
12458
+ "data-section": "custom-html-render"
12459
+ });
12460
+ }
12461
+
12462
+ var index$3 = /*#__PURE__*/Object.freeze({
12463
+ __proto__: null,
12464
+ 'default': CustomHtmlRender
12465
+ });
12466
+
12467
+ const useTimerCallPageStyles = createUseStyles(theme => ({
12468
+ timerAndCallSection: {
12469
+ padding: ({
12470
+ isMobile
12471
+ } = {}) => isMobile ? '24px' : '80px 120px',
12472
+ background: theme?.colors?.white,
12473
+ '&, & *, & *:before, & *:after': {
12474
+ fontFamily: theme?.typography?.fontFamily,
12475
+ boxSizing: 'border-box'
12476
+ }
12477
+ },
12478
+ timerAndCallContainer: {
12479
+ padding: '72px',
12480
+ background: '#F4F9FF',
12481
+ borderRadius: '8px',
12482
+ boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.16)'
12483
+ },
12484
+ timerAndCallBox: {
12485
+ display: 'flex',
12486
+ flexDirection: 'column',
12487
+ gap: '42px',
12488
+ justifyContent: 'center',
12489
+ alignItems: 'center'
12490
+ },
12491
+ title: {
12492
+ fontWeight: '700',
12493
+ fontSize: '40px',
12494
+ textAlign: 'center',
12495
+ lineHeight: '45px'
12496
+ },
12497
+ offerWrapper: {
12498
+ display: 'flex',
12499
+ flexDirection: 'column',
12500
+ gap: '24px',
12501
+ justifyContent: 'center',
12502
+ alignItems: 'center'
12503
+ },
12504
+ offerEndsTitle: {
12505
+ fontWeight: '700',
12506
+ fontSize: '16px'
12507
+ },
12508
+ countdown: {
12509
+ display: 'flex',
12510
+ gap: '10px'
12511
+ },
12512
+ counterBox: {
12513
+ display: 'flex',
12514
+ flexDirection: 'column',
12515
+ justifyContent: 'center',
12516
+ alignItems: 'center',
12517
+ border: '0.56px solid #2C88FF',
12518
+ borderRadius: '8px',
12519
+ background: '#FFFFFF',
12520
+ color: '#2C88FF',
12521
+ padding: '12px 16px 12px 16px',
12522
+ fontWeight: '600',
12523
+ fontSize: '14px'
12524
+ },
12525
+ // SMALL SCREEN
12526
+ '@media screen and (max-width: 767px)': {
12527
+ timerAndCallSection: {
12528
+ padding: '24px'
12529
+ },
12530
+ timerAndCallContainer: {
12531
+ padding: '16px'
12532
+ },
12533
+ timerAndCallBox: {
12534
+ gap: '32px'
12535
+ },
12536
+ title: {
12537
+ fontSize: '24px'
12538
+ },
12539
+ offerWrapper: {
12540
+ gap: '16px'
12541
+ }
12542
+ }
12543
+ }));
12544
+
12545
+ const TimerAndCall = ({
12546
+ sectionData,
12547
+ extraProps = {}
12548
+ }) => {
12549
+ const {
12550
+ isMobile,
12551
+ fullPageData
12552
+ } = useContext(PageContext);
12553
+ const [nodeData] = sectionData?.components;
12554
+ const classes = useTimerCallPageStyles({
12555
+ isMobile
12556
+ });
12557
+ const CounterBox = ({
12558
+ value,
12559
+ text
12560
+ }) => {
12561
+ return /*#__PURE__*/React.createElement("div", {
12562
+ className: classes.counterBox
12563
+ }, /*#__PURE__*/React.createElement("div", null, value), /*#__PURE__*/React.createElement("div", null, text));
12564
+ };
12565
+ const renderer = ({
12566
+ formatted,
12567
+ completed
12568
+ }) => {
12569
+ return /*#__PURE__*/React.createElement("div", {
12570
+ className: classes.countdown
12571
+ }, /*#__PURE__*/React.createElement(CounterBox, {
12572
+ value: formatted?.hours,
12573
+ text: "Hours"
12574
+ }), /*#__PURE__*/React.createElement(CounterBox, {
12575
+ value: formatted?.minutes,
12576
+ text: "Mins"
12577
+ }), /*#__PURE__*/React.createElement(CounterBox, {
12578
+ value: formatted?.seconds,
12579
+ text: "Secs"
12580
+ }));
12581
+ };
12582
+ const CountDownJSX = offerPriceValidFor => {
12583
+ let conversions = extraProps?.conversions || 0;
12584
+ if (offerPriceValidFor && offerPriceValidFor - conversions <= 0) {
12585
+ return null;
12586
+ }
12587
+ return /*#__PURE__*/React.createElement("div", {
12588
+ className: classes.offerWrapper
12589
+ }, /*#__PURE__*/React.createElement("div", {
12590
+ className: classes.offerEndsTitle
12591
+ }, "Offer ends in"), /*#__PURE__*/React.createElement(Countdown, {
12592
+ renderer: renderer,
12593
+ date: nodeData.offerCounter?.metadata?.endDate,
12594
+ daysInHours: true
12595
+ }));
12596
+ };
12597
+ return /*#__PURE__*/React.createElement("section", {
12598
+ className: classes.timerAndCallSection
12599
+ }, /*#__PURE__*/React.createElement("div", {
12600
+ className: classes.timerAndCallContainer
12601
+ }, /*#__PURE__*/React.createElement("div", {
12602
+ className: classes.timerAndCallBox
12603
+ }, nodeData?.showOffer?.metadata?.value && nodeData.offerCounter?.metadata?.isOfferActive ? CountDownJSX(nodeData.offerCounter?.metadata?.offerPriceValidFor) : null, nodeData?.title?.metadata?.value ? /*#__PURE__*/React.createElement("div", {
12604
+ className: classes.title
12605
+ }, /*#__PURE__*/React.createElement("span", {
12606
+ ref: nodeData?.heading?.refSetter,
12607
+ dangerouslySetInnerHTML: {
12608
+ __html: nodeData?.title?.metadata?.value
12609
+ }
12610
+ })) : null, nodeData?.timerButton?.metadata?.value ? /*#__PURE__*/React.createElement(Button, {
12611
+ style: {
12612
+ width: '100%',
12613
+ fontWeight: '700',
12614
+ fontSize: '14px'
12615
+ },
12616
+ data: {
12617
+ // link: 'headerData?.loginCtaLink',
12618
+ // isLink: 1,
12619
+ value: nodeData.timerButton.metadata.value
12620
+ // isExternal: 1
12621
+ },
12622
+ onClick: extraProps?.courseBuyNow,
12623
+ type: 'primary',
12624
+ size: 'medium',
12625
+ target: null,
12626
+ name: "button",
12627
+ rel: null
12628
+ // styling={isMobile ? { margin: '0 40px' } : {}}
12629
+ }) : null)));
12630
+ };
12631
+
12632
+ var index$2 = /*#__PURE__*/Object.freeze({
12633
+ __proto__: null,
12634
+ 'default': TimerAndCall
12635
+ });
12636
+
12637
+ const TYPE_TO_COMPONENT_MAP = {
12638
+ BANNER_CAROUSEL_RIGHT: BannerCarouselRight,
12639
+ GRID_CARD: List,
12640
+ BANNER_CAROUSEL_CENTER: BannerCarouselCenter,
12641
+ BANNER_CAROUSEL_CENTER_V2: BannerCarouselCenterv2,
12642
+ BANNER_CAROUSEL_LEFT: BannerCarouselLeft,
12643
+ FORM_SUBSCRIBE: SubscribeToNewsletter,
12644
+ TEXT_TESTIMONIAL: Testimonials,
12645
+ VIDEO_TESTIMONIAL: VideoTestimonial,
12646
+ VIDEO: Video,
12647
+ INFO: Info,
12648
+ TEXT: TextSection,
12649
+ IMAGE_GALLERY: PhotoGallery,
12650
+ FAQ_LISTING: FAQListing,
12651
+ TEXT_GRID: TextGrid,
12652
+ COURSE_CAROUSEL: courses,
12653
+ TEAM_CARD: TeamCard,
12654
+ CONTACT: FormEnquiry,
12655
+ FORM_ENQUIRY: Contact,
12656
+ WEBINAR_LANDING_PAGE: CoursePromotionPage$1,
12657
+ COURSE_LANDING_PAGE: CoursePromotionPage,
12658
+ FORM_LANDING_PAGE: FormPage,
12659
+ TILES_SECTION: Tiles,
12660
+ EMAIL_DRIP_MARKET: EmailDripMarket,
12661
+ ABOUT_INSTITUTE,
12662
+ COUNTER_SECTION: CounterSection,
12663
+ STICKY_CTA: StickyCta,
12664
+ CUSTOM_HTML_SECTION: CustomHtmlRender,
12665
+ TIMER_AND_CALL: TimerAndCall
12666
+ };
12667
+ const getCompToRender = type => TYPE_TO_COMPONENT_MAP[type] || (() => null);
12668
+ const MemoisedSection = /*#__PURE__*/memo(({
12669
+ sectionData,
12670
+ extraProps,
12671
+ isCustomWebsite,
12672
+ sectionIndex
12673
+ }) => {
12674
+ console.log('extraProps in section data', extraProps);
12675
+ const SectionComp = getCompToRender(sectionData.type);
12676
+ return /*#__PURE__*/React.createElement(SectionComp, {
12677
+ sectionData: sectionData,
12678
+ extraProps: extraProps,
12679
+ isCustomWebsite: isCustomWebsite,
12680
+ sectionIndex: sectionIndex
12681
+ });
12682
+ });
12683
+ const SectionWithBackground = withSectionBackground(MemoisedSection);
12684
+ function SectionRenderer({
12685
+ sectionData,
12686
+ extraProps,
12687
+ isCustomWebsite,
12688
+ sectionIndex
12689
+ }) {
12690
+ let sectionBg = {};
12691
+ if (sectionData?.isV2Section) {
12692
+ sectionBg = sectionData?.bgSection?.components?.[0]?.sectionBgData || {};
12693
+ }
12694
+ return /*#__PURE__*/React.createElement(SectionWithBackground, {
12695
+ sectionData: sectionData,
12696
+ extraProps: extraProps,
12697
+ isCustomWebsite: isCustomWebsite,
12698
+ sectionIndex: sectionIndex,
12699
+ isSkipV2Section: sectionData?.isV2Section,
12700
+ componentBg: sectionBg || {}
12701
+ });
12702
+ }
12703
+
12704
+ function PageRenderer({
12705
+ pageData: {
12706
+ metadata: {
12707
+ theme: {
12708
+ color = defaultTheme.color,
12709
+ font = defaultTheme.font,
12710
+ roundness = defaultTheme.roundness
12711
+ } = defaultTheme,
12712
+ layout = defaultLayout
12713
+ } = defaultMetadata,
11842
12714
  sections,
11843
12715
  header,
11844
12716
  footer,
@@ -11886,7 +12758,7 @@ function PageRenderer({
11886
12758
  countryCode,
11887
12759
  currencySymbol
11888
12760
  }), [isMobile, isLandingPages, layout, baseURLs, hashToken, isPreview, isEdit, templateId, navList, isMasterTemplate, basePath, validations, isTutorWebsite, extraProps, hideLogin, _id, countryCode, currencySymbol]);
11889
- const theme = useMemo(() => generateTheme(color, font, context.isMobile), [color, font, context.isMobile]);
12761
+ const theme = useMemo(() => generateTheme(color, font, context.isMobile, roundness), [color, font, context.isMobile, roundness]);
11890
12762
  const Wrapper = SectionWrapper || Fragment;
11891
12763
  return /*#__PURE__*/React.createElement(ThemeProvider, {
11892
12764
  theme: theme
@@ -12148,30 +13020,12 @@ function VideoWorkshopPromotion({
12148
13020
  },
12149
13021
  isMobile
12150
13022
  } = useContext(PageContext);
12151
- console.log('nnnn', sectionData);
12152
13023
  const classes = useVideoWorkshopPromotionStyles({
12153
13024
  containerWidth,
12154
13025
  isMobile
12155
13026
  });
12156
- const [sectionComponent] = sectionData?.components?.slice(1) || [];
12157
- const videoWorkshopPromotion = sectionComponent?.videoWorkshopPromotion;
12158
- const [contentNode] = videoWorkshopPromotion?.components || [];
12159
- if (!contentNode) return null;
12160
- const {
12161
- testimonialCategory,
12162
- mainHeading,
12163
- subHeading,
12164
- cta,
12165
- videoThumbnail,
12166
- videoEmbed,
12167
- videoTitleOverlay,
12168
- videoCaption,
12169
- watchOnYouTube
12170
- } = contentNode;
12171
- const videoUrl = videoEmbed?.metadata?.value;
12172
- const thumbnailUrl = videoEmbed?.metadata?.thumbnail || videoThumbnail?.metadata?.value;
12173
- const showCta = cta?.metadata?.value && (cta?.validations?.isEmptyAllowed ? true : cta?.metadata?.value !== '');
12174
- const showWatchOnYouTube = watchOnYouTube?.metadata?.value && (watchOnYouTube?.validations?.isEmptyAllowed ? true : watchOnYouTube?.metadata?.value !== '');
13027
+ const wokShopData = sectionData?.components[0];
13028
+ const videoData = wokShopData?.videoCarousel?.components?.[0];
12175
13029
  return /*#__PURE__*/React.createElement("section", {
12176
13030
  className: classes.section
12177
13031
  }, /*#__PURE__*/React.createElement("div", {
@@ -12180,72 +13034,42 @@ function VideoWorkshopPromotion({
12180
13034
  className: classes.sectionInner
12181
13035
  }, /*#__PURE__*/React.createElement("div", {
12182
13036
  className: classes.textBlock
12183
- }, testimonialCategory?.metadata?.value && /*#__PURE__*/React.createElement("h5", {
12184
- ref: testimonialCategory?.refSetter,
13037
+ }, wokShopData?.videoHeading?.metadata?.value && /*#__PURE__*/React.createElement("h5", {
13038
+ ref: wokShopData?.videoHeading?.refSetter,
12185
13039
  className: classes.category,
12186
13040
  dangerouslySetInnerHTML: {
12187
- __html: testimonialCategory.metadata.value
13041
+ __html: wokShopData?.videoHeading?.metadata?.value
12188
13042
  }
12189
- }), mainHeading?.metadata?.value && /*#__PURE__*/React.createElement("h1", {
12190
- ref: mainHeading?.refSetter,
13043
+ }), wokShopData?.title?.metadata?.value && /*#__PURE__*/React.createElement("h1", {
13044
+ ref: wokShopData?.title?.refSetter,
12191
13045
  className: classes.mainHeading,
12192
13046
  dangerouslySetInnerHTML: {
12193
- __html: mainHeading.metadata.value
12194
- }
12195
- }), subHeading?.metadata?.value && /*#__PURE__*/React.createElement("p", {
12196
- ref: subHeading?.refSetter,
12197
- className: classes.subHeading,
12198
- dangerouslySetInnerHTML: {
12199
- __html: subHeading.metadata.value
13047
+ __html: wokShopData?.title?.metadata?.value
12200
13048
  }
12201
- }), showCta && /*#__PURE__*/React.createElement("div", {
13049
+ }), videoData?.videoTextContent?.metadata?.value && /*#__PURE__*/React.createElement("div", {
12202
13050
  className: classes.ctaWrap
12203
13051
  }, /*#__PURE__*/React.createElement(Button, {
12204
- ref: cta?.refSetter,
12205
- data: cta.metadata,
12206
- type: cta.metadata?.type || 'primary',
13052
+ ref: videoData?.videoTextContent?.metadata?.refSetter,
13053
+ data: videoData?.videoTextContent?.metadata,
13054
+ type: 'primary',
12207
13055
  size: isMobile ? 'small' : 'medium'
12208
13056
  }))), /*#__PURE__*/React.createElement("div", {
12209
13057
  className: classes.videoBlock
12210
13058
  }, /*#__PURE__*/React.createElement("div", {
12211
13059
  className: classes.videoWrapper
12212
13060
  }, /*#__PURE__*/React.createElement("div", {
12213
- ref: videoEmbed?.refSetter,
13061
+ ref: videoData?.videoFrame?.refSetter,
12214
13062
  className: classes.videoAspectWrap
12215
13063
  }, /*#__PURE__*/React.createElement(VideoPlayer, {
12216
- imageUrl: thumbnailUrl,
12217
- videoUrl: videoUrl,
13064
+ imageUrl: videoData?.videoFrame?.metadata?.thumbnail,
13065
+ videoUrl: videoData?.videoFrame?.metadata?.value,
12218
13066
  sectionIndex: sectionIndex
12219
- })), videoTitleOverlay?.metadata?.value && /*#__PURE__*/React.createElement("div", {
12220
- className: classes.videoTitleOverlay
12221
- }, /*#__PURE__*/React.createElement("span", {
12222
- ref: videoTitleOverlay?.refSetter,
12223
- dangerouslySetInnerHTML: {
12224
- __html: videoTitleOverlay.metadata.value
12225
- }
12226
- })), videoCaption?.metadata?.value && /*#__PURE__*/React.createElement("div", {
12227
- className: classes.videoCaption
12228
- }, /*#__PURE__*/React.createElement("p", {
12229
- ref: videoCaption?.refSetter,
12230
- dangerouslySetInnerHTML: {
12231
- __html: videoCaption.metadata.value
12232
- }
12233
- })), showWatchOnYouTube && /*#__PURE__*/React.createElement("div", {
12234
- className: classes.watchOnYouTubeWrap
12235
- }, /*#__PURE__*/React.createElement(Button, {
12236
- ref: watchOnYouTube?.refSetter,
12237
- data: {
12238
- ...watchOnYouTube.metadata,
12239
- isExternal: true
12240
- },
12241
- type: watchOnYouTube.metadata?.type || 'secondary',
12242
- size: "small"
12243
13067
  })))))));
12244
13068
  }
12245
13069
 
12246
- var index$2 = /*#__PURE__*/Object.freeze({
12247
- __proto__: null,
12248
- 'default': VideoWorkshopPromotion
13070
+ var index$1 = /*#__PURE__*/Object.freeze({
13071
+ __proto__: null,
13072
+ 'default': VideoWorkshopPromotion
12249
13073
  });
12250
13074
 
12251
13075
  const useCoursePromotionPage = createUseStyles(theme => {
@@ -12876,157 +13700,9 @@ function CoursePromotionPagev2({
12876
13700
  }))));
12877
13701
  }
12878
13702
 
12879
- var index$1 = /*#__PURE__*/Object.freeze({
12880
- __proto__: null,
12881
- 'default': CoursePromotionPagev2
12882
- });
12883
-
12884
- const useCounterSectionStyles = createUseStyles(theme => {
12885
- return {
12886
- section: {
12887
- width: '100%',
12888
- borderRadius: theme.shape?.borderRadius?.regular || '12px',
12889
- overflow: 'hidden',
12890
- backgroundImage: ({
12891
- backgroundImage
12892
- } = {}) => backgroundImage ? `url("${backgroundImage}")` : 'none',
12893
- backgroundColor: ({
12894
- backgroundColor
12895
- } = {}) => backgroundColor || '#f8f8fa',
12896
- backgroundSize: 'cover',
12897
- backgroundPosition: 'center',
12898
- backgroundRepeat: 'no-repeat',
12899
- '&, & *, & *:before, & *:after': {
12900
- fontFamily: theme?.typography?.fontFamily,
12901
- boxSizing: 'border-box'
12902
- }
12903
- },
12904
- container: {
12905
- width: '100%',
12906
- maxWidth: ({
12907
- containerWidth
12908
- } = {}) => containerWidth || '1440px',
12909
- margin: '0 auto',
12910
- padding: ({
12911
- isMobile
12912
- } = {}) => isMobile ? `${theme.spacing.padding.regular}px ${theme.spacing.padding.tiny}px` : `${theme.spacing.padding.small}px ${theme.spacing.padding.medium}px`
12913
- },
12914
- grid: {
12915
- display: 'grid',
12916
- gridTemplateColumns: 'repeat(4, 1fr)',
12917
- gap: ({
12918
- isMobile
12919
- } = {}) => isMobile ? '24px' : '32px',
12920
- alignItems: 'stretch'
12921
- },
12922
- counterItem: {
12923
- display: 'flex',
12924
- flexDirection: 'column',
12925
- alignItems: 'center',
12926
- justifyContent: 'center',
12927
- textAlign: 'center'
12928
- },
12929
- value: {
12930
- margin: 0,
12931
- marginBottom: '8px',
12932
- fontSize: theme.typography.fontSize.h2,
12933
- fontWeight: theme.typography?.fontWeight?.bold,
12934
- lineHeight: 1.1,
12935
- color: theme.palette?.primary?.main || '#1976d2',
12936
- wordBreak: 'break-word'
12937
- },
12938
- description: {
12939
- margin: 0,
12940
- fontSize: theme.typography.fontSize.body,
12941
- lineHeight: 1.4,
12942
- color: theme.palette?.font?.primary || '#4a4a4a',
12943
- wordBreak: 'break-word'
12944
- },
12945
- '@media (max-width: 1024px)': {
12946
- grid: {
12947
- gridTemplateColumns: 'repeat(2, 1fr)',
12948
- gap: '28px'
12949
- }
12950
- },
12951
- '@media (max-width: 767px)': {
12952
- section: {
12953
- borderRadius: theme.shape?.borderRadius?.small || '8px'
12954
- },
12955
- container: {
12956
- padding: `${theme.spacing.padding.regular}px ${theme.spacing.padding.tiny}px`
12957
- },
12958
- grid: {
12959
- gridTemplateColumns: '1fr',
12960
- gap: '24px'
12961
- },
12962
- value: {
12963
- fontSize: theme.typography.fontSize.h3,
12964
- marginBottom: '4px',
12965
- lineHeight: 1.1
12966
- },
12967
- description: {
12968
- fontSize: theme.typography.fontSize.body,
12969
- lineHeight: 1.4
12970
- }
12971
- }
12972
- };
12973
- });
12974
-
12975
- function CounterSection({
12976
- sectionData,
12977
- sectionIndex
12978
- }) {
12979
- const {
12980
- layout: {
12981
- containerWidth
12982
- },
12983
- isMobile
12984
- } = useContext(PageContext);
12985
- console.log('llll', sectionData);
12986
- sectionData.components = sectionData?.isV2Section ? sectionData.components.slice(1) : sectionData.components;
12987
-
12988
- // console.log("llll",sectionData);
12989
-
12990
- const metadata = sectionData.metadata || {};
12991
- const backgroundImage = metadata.backgroundImage || '';
12992
- const backgroundColor = metadata.backgroundColor || '#f8f8fa';
12993
- const classes = useCounterSectionStyles({
12994
- containerWidth,
12995
- isMobile,
12996
- backgroundImage: backgroundImage || null,
12997
- backgroundColor
12998
- });
12999
- const [sectionComponent] = sectionData.components || [];
13000
- const counterSection = sectionComponent?.counterSection;
13001
- const counters = counterSection?.components || [];
13002
- if (!counters.length) return null;
13003
- return /*#__PURE__*/React.createElement("section", {
13004
- className: classes.section
13005
- }, /*#__PURE__*/React.createElement("div", {
13006
- className: classes.container
13007
- }, /*#__PURE__*/React.createElement("div", {
13008
- className: classes.grid
13009
- }, counters.map((item, index) => /*#__PURE__*/React.createElement("div", {
13010
- key: item._id || index,
13011
- className: classes.counterItem
13012
- }, item.value?.metadata?.value != null && item.value?.metadata?.value !== '' && /*#__PURE__*/React.createElement("h2", {
13013
- ref: item.value?.refSetter,
13014
- className: classes.value,
13015
- dangerouslySetInnerHTML: {
13016
- __html: item.value.metadata.value
13017
- }
13018
- }), item.description?.metadata?.value != null && item.description?.metadata?.value !== '' && /*#__PURE__*/React.createElement("p", {
13019
- ref: item.description?.refSetter,
13020
- className: classes.description,
13021
- dangerouslySetInnerHTML: {
13022
- __html: item.description.metadata.value
13023
- }
13024
- }))))));
13025
- }
13026
-
13027
13703
  var index = /*#__PURE__*/Object.freeze({
13028
- __proto__: null,
13029
- 'default': CounterSection
13704
+ __proto__: null,
13705
+ 'default': CoursePromotionPagev2
13030
13706
  });
13031
13707
 
13032
13708
  export { Icon, PageRenderer$1 as PageRenderer, PageRenderer as PageRendererStatic, componentParser, getTheme, inverseComponentParser };