igloo-d2c-components 1.0.20 → 1.0.22

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.
Files changed (25) hide show
  1. package/dist/cjs/index.js +557 -48
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/esm/index.js +558 -50
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/types/components/CheckoutFormButton/CheckoutFormButton.d.ts +9 -0
  6. package/dist/types/components/CheckoutFormButton/styled.d.ts +2 -0
  7. package/dist/types/components/ChildInformationForm/ChildInformationForm.d.ts +4 -0
  8. package/dist/types/components/ChildInformationForm/styled.d.ts +18 -0
  9. package/dist/types/components/ContactDetailsForm/ContactDetailsForm.d.ts +4 -0
  10. package/dist/types/components/ContactDetailsForm/styled.d.ts +18 -0
  11. package/dist/types/components/CoverageAmountSlider/styled.d.ts +1 -1
  12. package/dist/types/components/DesktopHeaderMenuBar/DesktopHeaderMenuBar.d.ts +38 -0
  13. package/dist/types/components/DesktopHeaderMenuBar/index.d.ts +6 -0
  14. package/dist/types/components/DesktopHeaderMenuBar/styled.d.ts +89 -0
  15. package/dist/types/components/DesktopHeaderMenuBar/types.d.ts +92 -0
  16. package/dist/types/components/FAQAccordion/styled.d.ts +1 -1
  17. package/dist/types/components/Header/Header.d.ts +27 -1
  18. package/dist/types/components/Header/index.d.ts +1 -1
  19. package/dist/types/components/Header/styled.d.ts +2 -2
  20. package/dist/types/components/HealthInformationForm/HealthInformationForm.d.ts +4 -0
  21. package/dist/types/components/HealthInformationForm/styled.d.ts +12 -0
  22. package/dist/types/components/PersonalInformationForm/PersonalInformationForm.d.ts +4 -0
  23. package/dist/types/components/PersonalInformationForm/styled.d.ts +18 -0
  24. package/dist/types/index.d.ts +3 -1
  25. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -6,10 +6,10 @@ var React = require('react');
6
6
  var material = require('@mui/material');
7
7
  var ArrowDropDownIcon = require('@mui/icons-material/ArrowDropDown');
8
8
  var CloseIcon = require('@mui/icons-material/Close');
9
- var MenuIcon = require('@mui/icons-material/Menu');
10
9
  var AppBar = require('@mui/material/AppBar');
11
- var Container = require('@mui/material/Container');
12
10
  var styles = require('@mui/material/styles');
11
+ var MenuIcon = require('@mui/icons-material/Menu');
12
+ var Container = require('@mui/material/Container');
13
13
  var ArrowBackIcon = require('@mui/icons-material/ArrowBack');
14
14
  var InfoIcon = require('@mui/icons-material/Info');
15
15
  var AddIcon = require('@mui/icons-material/Add');
@@ -315,12 +315,18 @@ const ammetlifeTypography = Object.assign(Object.assign({}, iglooTypography), {
315
315
  * For mobile headings
316
316
  * Font: MetLife Circular Bold
317
317
  * ======================================== */
318
- // Title Large (H1) - MetLife Circular Bold 20/28
318
+ // Title Large (H1) - MetLife Circular Bold 28/38 (desktop), 20/28 (mobile)
319
+ /* ========================================
320
+ * TITLE VARIANTS (Mobile)
321
+ * For mobile headings
322
+ * Font: MetLife Circular Bold
323
+ * ======================================== */
324
+ // Title Large (H1) - MetLife Circular Bold 28/38 (desktop), 20/28 (mobile)
319
325
  titleLarge: {
320
- fontSize: '20px',
326
+ fontSize: '28px',
321
327
  fontStyle: 'normal',
322
328
  fontWeight: 700,
323
- lineHeight: '28px',
329
+ lineHeight: '38px',
324
330
  letterSpacing: 0,
325
331
  },
326
332
  // Title Medium (H2) - MetLife Circular Bold 16/24
@@ -338,6 +344,12 @@ const ammetlifeTypography = Object.assign(Object.assign({}, iglooTypography), {
338
344
  fontWeight: 700,
339
345
  lineHeight: '20px',
340
346
  letterSpacing: 0,
347
+ }, titleTiny: {
348
+ fontSize: '10px',
349
+ fontStyle: 'normal',
350
+ fontWeight: 700,
351
+ lineHeight: '20px',
352
+ letterSpacing: 0,
341
353
  },
342
354
  /* ========================================
343
355
  * BODY STRONG VARIANTS
@@ -402,6 +414,21 @@ const ammetlifeTypography = Object.assign(Object.assign({}, iglooTypography), {
402
414
  fontWeight: 400,
403
415
  lineHeight: 'normal',
404
416
  letterSpacing: 0,
417
+ }, textFieldMedium: {
418
+ fontSize: '14px',
419
+ fontStyle: 'normal',
420
+ fontWeight: 500,
421
+ lineHeight: '18px',
422
+ }, textFieldNormal: {
423
+ fontSize: '12px',
424
+ fontStyle: 'normal',
425
+ fontWeight: 400,
426
+ lineHeight: '16px',
427
+ }, optionButton: {
428
+ fontSize: '14px',
429
+ fontStyle: 'normal',
430
+ fontWeight: 700,
431
+ lineHeight: '20px',
405
432
  } });
406
433
  /**
407
434
  * Typography Registry
@@ -819,6 +846,263 @@ function Banner(_a) {
819
846
  return (jsxRuntime.jsxs(material.Box, Object.assign({ sx: Object.assign({ background, color: 'white', padding: '32px', borderRadius: '12px', textAlign: 'center' }, sx) }, props, { children: [jsxRuntime.jsx(material.Typography, Object.assign({ variant: "h4", component: "h2", gutterBottom: true, fontWeight: "bold" }, { children: title })), description && (jsxRuntime.jsx(material.Typography, Object.assign({ variant: "body1", sx: { opacity: 0.95, mb: action ? 2 : 0 } }, { children: description }))), action && jsxRuntime.jsx(material.Box, Object.assign({ sx: { mt: 2 } }, { children: action }))] })));
820
847
  }
821
848
 
849
+ /**
850
+ * Styled components for Desktop Header Menu Bar
851
+ * Based on Figma Design: Tech-Solution-V1.0 (node 1581-22604)
852
+ */
853
+ /**
854
+ * Main AppBar container
855
+ * Height: 80px, white background, centered content
856
+ */
857
+ const StyledAppBar$2 = styles.styled(AppBar)(({ theme }) => {
858
+ var _a;
859
+ return ({
860
+ backgroundColor: ((_a = theme.palette.background) === null || _a === void 0 ? void 0 : _a.paper) || '#ffffff',
861
+ boxShadow: 'none',
862
+ position: 'fixed',
863
+ top: 0,
864
+ left: 0,
865
+ right: 0,
866
+ zIndex: 1000,
867
+ height: '80px',
868
+ display: 'flex',
869
+ justifyContent: 'center',
870
+ });
871
+ });
872
+ /**
873
+ * Inner container with max-width constraint
874
+ * Max-width: 1128px, centered
875
+ */
876
+ const HeaderContainer$1 = styles.styled(material.Box)(({ theme }) => ({
877
+ display: 'flex',
878
+ alignItems: 'center',
879
+ justifyContent: 'space-between',
880
+ width: '100%',
881
+ maxWidth: '1128px',
882
+ margin: '0 auto',
883
+ padding: '0 16px',
884
+ height: '80px',
885
+ [theme.breakpoints.up('lg')]: {
886
+ padding: '0',
887
+ },
888
+ }));
889
+ /**
890
+ * Left section containing logo and menu items
891
+ */
892
+ const LeftSection = styles.styled(material.Box)({
893
+ display: 'flex',
894
+ alignItems: 'center',
895
+ gap: '32px',
896
+ height: '100%',
897
+ });
898
+ /**
899
+ * Logo container
900
+ */
901
+ const LogoContainer$2 = styles.styled(material.Box)({
902
+ display: 'flex',
903
+ alignItems: 'center',
904
+ cursor: 'pointer',
905
+ height: '100%',
906
+ });
907
+ /**
908
+ * Logo image
909
+ * Width: 126px, height: auto
910
+ */
911
+ const LogoImage$1 = styles.styled('img')({
912
+ width: '126px',
913
+ height: 'auto',
914
+ objectFit: 'contain',
915
+ });
916
+ /**
917
+ * Navigation menu container
918
+ */
919
+ const NavMenu = styles.styled(material.Box)({
920
+ display: 'flex',
921
+ alignItems: 'center',
922
+ height: '100%',
923
+ gap: '32px',
924
+ });
925
+ /**
926
+ * Individual menu item button
927
+ * Font: MetLife Circular Bold, 18px
928
+ */
929
+ const MenuItemButton = styles.styled(material.Button)(({ theme }) => {
930
+ var _a;
931
+ return ({
932
+ display: 'flex',
933
+ alignItems: 'center',
934
+ gap: '8px',
935
+ padding: '0 10px',
936
+ height: '100%',
937
+ minWidth: 'auto',
938
+ textTransform: 'none',
939
+ color: '#13131B',
940
+ fontFamily: '"Montserrat", "MetLife_Circular", sans-serif',
941
+ fontWeight: 700,
942
+ fontSize: '18px',
943
+ lineHeight: '24px',
944
+ letterSpacing: '0px',
945
+ borderRadius: 0,
946
+ '&:hover': {
947
+ backgroundColor: 'transparent',
948
+ color: ((_a = theme.palette.primary) === null || _a === void 0 ? void 0 : _a.main) || '#0090DA',
949
+ },
950
+ });
951
+ });
952
+ /**
953
+ * Menu item text
954
+ */
955
+ const MenuItemText = styles.styled(material.Typography)({
956
+ fontFamily: '"Montserrat", "MetLife_Circular", sans-serif',
957
+ fontWeight: 700,
958
+ fontSize: '18px',
959
+ lineHeight: '24px',
960
+ letterSpacing: '0px',
961
+ color: 'inherit',
962
+ });
963
+ /**
964
+ * Dropdown arrow icon
965
+ * Size: 24px
966
+ */
967
+ const DropdownIcon = styles.styled(ArrowDropDownIcon)({
968
+ width: '24px',
969
+ height: '24px',
970
+ color: '#13131B',
971
+ });
972
+ /**
973
+ * Right section containing login button
974
+ */
975
+ const RightSection = styles.styled(material.Box)({
976
+ display: 'flex',
977
+ alignItems: 'center',
978
+ height: '100%',
979
+ });
980
+ /**
981
+ * Login button (text style)
982
+ * Based on Figma: Style=Text, State=enabled, Show Icon=False
983
+ */
984
+ const LoginButton = styles.styled(material.Button)(({ theme }) => {
985
+ var _a;
986
+ return ({
987
+ display: 'flex',
988
+ alignItems: 'center',
989
+ padding: '0 10px',
990
+ height: '100%',
991
+ minWidth: 'auto',
992
+ textTransform: 'none',
993
+ color: ((_a = theme.palette.primary) === null || _a === void 0 ? void 0 : _a.main) || '#E11931',
994
+ fontFamily: '"Montserrat", "MetLife_Circular", sans-serif',
995
+ fontWeight: 700,
996
+ fontSize: '18px',
997
+ lineHeight: '24px',
998
+ letterSpacing: '0px',
999
+ borderRadius: 0,
1000
+ backgroundColor: 'transparent',
1001
+ '&:hover': {
1002
+ backgroundColor: 'transparent',
1003
+ textDecoration: 'underline',
1004
+ },
1005
+ });
1006
+ });
1007
+ /**
1008
+ * Dropdown menu container
1009
+ */
1010
+ const StyledMenu$1 = styles.styled(material.Menu)(({ theme }) => ({
1011
+ '& .MuiPaper-root': {
1012
+ borderRadius: '16px',
1013
+ marginTop: '8px',
1014
+ minWidth: '200px',
1015
+ boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',
1016
+ },
1017
+ }));
1018
+ /**
1019
+ * Dropdown menu item
1020
+ */
1021
+ const StyledMenuItem$1 = styles.styled(material.MenuItem)(({ theme }) => ({
1022
+ display: 'flex',
1023
+ alignItems: 'center',
1024
+ gap: '12px',
1025
+ padding: '16px 20px',
1026
+ fontFamily: '"Montserrat", "MetLife_Circular", sans-serif',
1027
+ fontWeight: 500,
1028
+ fontSize: '16px',
1029
+ lineHeight: '24px',
1030
+ color: '#13131B',
1031
+ '&:hover': {
1032
+ backgroundColor: 'rgba(0, 144, 218, 0.08)',
1033
+ },
1034
+ }));
1035
+ /**
1036
+ * Menu item icon
1037
+ */
1038
+ const MenuItemIcon = styles.styled('img')({
1039
+ width: '24px',
1040
+ height: '24px',
1041
+ objectFit: 'contain',
1042
+ });
1043
+
1044
+ /**
1045
+ * DesktopHeaderMenuBar Component
1046
+ *
1047
+ * A responsive desktop header with navigation menu items and dropdown support.
1048
+ *
1049
+ * @param logo - Logo image source URL
1050
+ * @param logoAlt - Alt text for the logo image
1051
+ * @param menuItems - Array of menu items to display
1052
+ * @param showLoginButton - Whether to show the login button (default: true)
1053
+ * @param loginButtonText - Text for the login button (default: 'Log in')
1054
+ * @param onLogoClick - Handler for logo click
1055
+ * @param onLoginClick - Handler for login button click
1056
+ * @param formatMessage - i18n function for translations
1057
+ */
1058
+ function DesktopHeaderMenuBar({ logo, logoAlt = 'Logo', menuItems, showLoginButton = true, loginButtonText = 'Log in', onLogoClick, onLoginClick, formatMessage = (descriptor) => descriptor.id, className, }) {
1059
+ // Track which dropdown is currently open
1060
+ const [openMenuKey, setOpenMenuKey] = React__namespace.useState(null);
1061
+ const [anchorEl, setAnchorEl] = React__namespace.useState(null);
1062
+ const handleMenuClick = (event, item) => {
1063
+ var _a;
1064
+ if (item.hasDropdown && item.subItems && item.subItems.length > 0) {
1065
+ // Toggle dropdown
1066
+ if (openMenuKey === item.key) {
1067
+ handleCloseMenu();
1068
+ }
1069
+ else {
1070
+ setAnchorEl(event.currentTarget);
1071
+ setOpenMenuKey(item.key);
1072
+ }
1073
+ }
1074
+ else {
1075
+ // Direct navigation
1076
+ (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item);
1077
+ }
1078
+ };
1079
+ const handleCloseMenu = () => {
1080
+ setAnchorEl(null);
1081
+ setOpenMenuKey(null);
1082
+ };
1083
+ const handleSubItemClick = (item, subItemKey) => {
1084
+ var _a;
1085
+ const subItem = (_a = item.subItems) === null || _a === void 0 ? void 0 : _a.find((si) => si.key === subItemKey);
1086
+ if (subItem === null || subItem === void 0 ? void 0 : subItem.onClick) {
1087
+ subItem.onClick();
1088
+ }
1089
+ handleCloseMenu();
1090
+ };
1091
+ const handleLogoClick = (e) => {
1092
+ e.preventDefault();
1093
+ onLogoClick === null || onLogoClick === void 0 ? void 0 : onLogoClick();
1094
+ };
1095
+ return (jsxRuntime.jsx(StyledAppBar$2, Object.assign({ className: className }, { children: jsxRuntime.jsxs(HeaderContainer$1, { children: [jsxRuntime.jsxs(LeftSection, { children: [jsxRuntime.jsx(LogoContainer$2, Object.assign({ onClick: handleLogoClick }, { children: jsxRuntime.jsx(LogoImage$1, { src: logo, alt: logoAlt }) })), jsxRuntime.jsx(NavMenu, { children: menuItems.map((item) => (jsxRuntime.jsxs(React__namespace.Fragment, { children: [jsxRuntime.jsxs(MenuItemButton, Object.assign({ onClick: (e) => handleMenuClick(e, item), "aria-haspopup": item.hasDropdown ? 'true' : undefined, "aria-expanded": item.hasDropdown ? openMenuKey === item.key : undefined, "data-testid": `menu-item-${item.key}` }, { children: [jsxRuntime.jsx(MenuItemText, { children: formatMessage({ id: item.label }) }), item.hasDropdown && jsxRuntime.jsx(DropdownIcon, {})] })), item.hasDropdown && item.subItems && (jsxRuntime.jsx(StyledMenu$1, Object.assign({ id: `menu-${item.key}`, anchorEl: anchorEl, open: openMenuKey === item.key, onClose: handleCloseMenu, anchorOrigin: {
1096
+ vertical: 'bottom',
1097
+ horizontal: 'left',
1098
+ }, transformOrigin: {
1099
+ vertical: 'top',
1100
+ horizontal: 'left',
1101
+ }, MenuListProps: {
1102
+ 'aria-labelledby': `menu-button-${item.key}`,
1103
+ } }, { children: item.subItems.map((subItem) => (jsxRuntime.jsxs(StyledMenuItem$1, Object.assign({ onClick: () => handleSubItemClick(item, subItem.key), "data-testid": `submenu-item-${subItem.key}` }, { children: [subItem.icon && (jsxRuntime.jsx(MenuItemIcon, { src: subItem.icon, alt: subItem.label })), formatMessage({ id: subItem.label })] }), subItem.key))) })))] }, item.key))) })] }), jsxRuntime.jsx(RightSection, { children: showLoginButton && (jsxRuntime.jsx(LoginButton, Object.assign({ onClick: onLoginClick, "data-testid": "header-login-button" }, { children: formatMessage({ id: loginButtonText }) }))) })] }) })));
1104
+ }
1105
+
822
1106
  const StyledAppBar$1 = styles.styled(AppBar)(({ theme, ispartnershippagemobileview, scrolled }) => {
823
1107
  var _a, _b;
824
1108
  return ({
@@ -1182,19 +1466,21 @@ const TypographyBtnText = styles.styled(material.Typography)(({ theme }) => {
1182
1466
  * />
1183
1467
  * ```
1184
1468
  */
1185
- function Header$1({ logo, alternateLogo, showAlternateLogo = false, navigationLinks, languages, currentLocale, currentLang, userToken, userFirstName, isMobile: propIsMobile, scrolled = false, isPartnershipPageMobileView = false, isPartnershipPagePCView = false, isSeoPageView = false, showGetQuoteButton = false, bannerData, ctaData, host = '', welcomeMessage, formatMessage = (descriptor) => descriptor.id, menuItems, userProfileComponent, onLogoClick, onProductMenuClick, onLanguageChange, onLoginClick, onSignupClick, onLogoutClick, onPartnershipClick, onAboutUsClick, onBlogClick, onMyProfileClick, onGetQuoteClick, onPartnershipCTAClick, }) {
1186
- var _a, _b;
1469
+ function Header$1({ logo, alternateLogo, showAlternateLogo = false, navigationLinks, languages, currentLocale, currentLang, userToken, userFirstName, isMobile: propIsMobile, scrolled = false, isPartnershipPageMobileView = false, isPartnershipPagePCView = false, isSeoPageView = false, showGetQuoteButton = false, bannerData, ctaData, host = '', welcomeMessage, formatMessage = (descriptor) => descriptor.id, menuItems, userProfileComponent, onLogoClick, onProductMenuClick, onLanguageChange, onLoginClick, onSignupClick, onLogoutClick, onPartnershipClick, onAboutUsClick, onBlogClick, onMyProfileClick, onGetQuoteClick, onPartnershipCTAClick, useNewDesktopLayout = false, desktopMenuItems = [], }) {
1470
+ var _a, _b, _c;
1187
1471
  const tenantTheme = useTenantTheme();
1188
1472
  tenantTheme === null || tenantTheme === void 0 ? void 0 : tenantTheme.theme;
1189
1473
  const muiTheme = material.useTheme();
1190
1474
  const themeBreakpoint = material.useMediaQuery((_a = muiTheme === null || muiTheme === void 0 ? void 0 : muiTheme.breakpoints) === null || _a === void 0 ? void 0 : _a.down('md'));
1191
1475
  const isMobile = propIsMobile !== undefined ? propIsMobile : themeBreakpoint;
1476
+ // For new desktop layout, always use actual viewport detection (ignore SSR/prop value)
1477
+ const isActuallyDesktop = material.useMediaQuery((_b = muiTheme === null || muiTheme === void 0 ? void 0 : muiTheme.breakpoints) === null || _b === void 0 ? void 0 : _b.up('md'));
1192
1478
  const [anchorElNav, setAnchorElNav] = React__namespace.useState(null);
1193
1479
  const [anchorElLanguage, setAnchorElLanguage] = React__namespace.useState(null);
1194
1480
  const [anchorElUserMenu, setAnchorElUserMenu] = React__namespace.useState(null);
1195
1481
  const shouldShowContent = (!isPartnershipPagePCView || (isPartnershipPagePCView && !scrolled)) &&
1196
1482
  (!isSeoPageView || (isSeoPageView && !scrolled));
1197
- const firstName1stLetter = ((_b = userFirstName === null || userFirstName === void 0 ? void 0 : userFirstName.trim()) === null || _b === void 0 ? void 0 : _b.slice(0, 1)) || '';
1483
+ const firstName1stLetter = ((_c = userFirstName === null || userFirstName === void 0 ? void 0 : userFirstName.trim()) === null || _c === void 0 ? void 0 : _c.slice(0, 1)) || '';
1198
1484
  const handleOpenNavMenu = (event) => {
1199
1485
  setAnchorElNav(event.currentTarget);
1200
1486
  };
@@ -1213,6 +1499,27 @@ function Header$1({ logo, alternateLogo, showAlternateLogo = false, navigationLi
1213
1499
  const handleCloseUserMenu = () => {
1214
1500
  setAnchorElUserMenu(null);
1215
1501
  };
1502
+ // Convert desktopMenuItems to MenuItemWithDropdown format for DesktopHeaderMenuBar
1503
+ const convertedDesktopMenuItems = desktopMenuItems.map((item) => {
1504
+ var _a;
1505
+ return ({
1506
+ key: item.key,
1507
+ label: item.label,
1508
+ hasDropdown: item.hasDropdown,
1509
+ subItems: (_a = item.subItems) === null || _a === void 0 ? void 0 : _a.map((subItem) => ({
1510
+ key: subItem.key,
1511
+ label: subItem.label,
1512
+ icon: subItem.icon,
1513
+ onClick: subItem.onClick,
1514
+ })),
1515
+ onClick: item.onClick,
1516
+ });
1517
+ });
1518
+ // Render new desktop layout when enabled and on actual desktop viewport
1519
+ // Uses isActuallyDesktop to avoid SSR/prop issues with isMobile detection
1520
+ if (useNewDesktopLayout && isActuallyDesktop) {
1521
+ return (jsxRuntime.jsx(DesktopHeaderMenuBar, { logo: logo, logoAlt: "Logo", menuItems: convertedDesktopMenuItems, showLoginButton: !userToken, loginButtonText: "Log in", onLogoClick: onLogoClick, onLoginClick: onLoginClick, formatMessage: formatMessage }));
1522
+ }
1216
1523
  return (jsxRuntime.jsx(StyledAppBar$1, Object.assign({ ispartnershippagemobileview: isPartnershipPageMobileView, scrolled: scrolled }, { children: jsxRuntime.jsx(ResponsiveB2CLayout, { children: jsxRuntime.jsx(StyledContainer, Object.assign({ ispartnershippagemobileview: isPartnershipPageMobileView, scrolled: scrolled, maxWidth: "xl" }, { children: jsxRuntime.jsxs(material.Toolbar, Object.assign({ disableGutters: true }, { children: [jsxRuntime.jsx("a", Object.assign({ href: host || '#', onClick: (e) => {
1217
1524
  e === null || e === void 0 ? void 0 : e.preventDefault();
1218
1525
  onLogoClick === null || onLogoClick === void 0 ? void 0 : onLogoClick();
@@ -1660,7 +1967,7 @@ const DrawerHeader$1 = styles.styled(material.Box)(({ theme }) => ({
1660
1967
  const DrawerContent$1 = styles.styled(material.Box)(({ theme }) => ({
1661
1968
  flex: 1,
1662
1969
  overflowY: 'auto',
1663
- paddingBottom: theme.spacing(2),
1970
+ padding: '16px 0',
1664
1971
  }));
1665
1972
  const DrawerFooter = styles.styled(material.Box)(({ theme }) => ({
1666
1973
  padding: '16px',
@@ -2872,7 +3179,7 @@ const CheckoutHeader = ({ progress, product, sectionTitle, sectionDescription, s
2872
3179
  return (jsxRuntime.jsxs(HeaderContainer, Object.assign({ sticky: sticky, sx: sx }, { children: [jsxRuntime.jsx(CheckoutProgress, Object.assign({}, progress, { progressBarTheme: progressBarTheme })), product && (jsxRuntime.jsx(material.Box, Object.assign({ sx: { padding: '0 16px 24px' } }, { children: jsxRuntime.jsx(ProductCard, Object.assign({}, product)) }))), jsxRuntime.jsxs(SectionHeader, { children: [jsxRuntime.jsx(SectionTitle$2, { children: sectionTitle }), jsxRuntime.jsx(SectionDescription, { children: sectionDescription })] })] })));
2873
3180
  };
2874
3181
 
2875
- const ButtonContainer = styles.styled(material.Box)(({ isFixed }) => ({
3182
+ const ButtonContainer = styles.styled(material.Box)(({ isFixed, desktopRightAligned }) => ({
2876
3183
  position: isFixed ? 'fixed' : 'relative',
2877
3184
  bottom: 0,
2878
3185
  left: 0,
@@ -2881,34 +3188,51 @@ const ButtonContainer = styles.styled(material.Box)(({ isFixed }) => ({
2881
3188
  padding: '16px',
2882
3189
  boxShadow: isFixed ? '0px 2px 10px 0px rgba(0, 0, 0, 0.12)' : 'none',
2883
3190
  zIndex: 999,
3191
+ // Desktop styles for right-aligned button
3192
+ '@media (min-width: 900px)': desktopRightAligned
3193
+ ? {
3194
+ display: 'flex',
3195
+ justifyContent: 'flex-end',
3196
+ maxWidth: '938px',
3197
+ margin: '0 auto',
3198
+ padding: '24px 24px',
3199
+ backgroundColor: 'transparent',
3200
+ boxShadow: 'none',
3201
+ position: 'relative',
3202
+ }
3203
+ : {},
2884
3204
  }));
2885
- const StyledButton = styles.styled('button')(({ theme, isDisabled }) => {
2886
- var _a, _b;
2887
- return ({
2888
- width: '100%',
2889
- height: '48px',
2890
- borderRadius: '24px',
2891
- border: 'none',
3205
+ const StyledButton = styles.styled('button')(({ isDisabled, desktopWidth }) => ({
3206
+ width: '100%',
3207
+ height: '48px',
3208
+ borderRadius: '24px',
3209
+ border: 'none',
3210
+ backgroundColor: isDisabled
3211
+ ? '#E1E2EB'
3212
+ : '#0090DA',
3213
+ color: isDisabled ? '#929094' : '#fff',
3214
+ fontFamily: 'Montserrat',
3215
+ fontSize: '14px',
3216
+ fontWeight: 500,
3217
+ lineHeight: '18px',
3218
+ cursor: isDisabled ? 'not-allowed' : 'pointer',
3219
+ transition: 'all 0.2s ease',
3220
+ '&:hover': {
2892
3221
  backgroundColor: isDisabled
2893
3222
  ? '#E1E2EB'
2894
- : '#0090DA',
2895
- color: isDisabled ? '#929094' : '#fff',
2896
- fontFamily: 'Montserrat',
2897
- fontSize: '14px',
2898
- fontWeight: 500,
2899
- lineHeight: '18px',
2900
- cursor: isDisabled ? 'not-allowed' : 'pointer',
2901
- transition: 'all 0.2s ease',
2902
- '&:hover': {
2903
- backgroundColor: isDisabled
2904
- ? '#E1E2EB'
2905
- : ((_b = (_a = theme === null || theme === void 0 ? void 0 : theme.palette) === null || _a === void 0 ? void 0 : _a.primary) === null || _b === void 0 ? void 0 : _b.dark) || '#2a2a33',
2906
- },
2907
- });
2908
- });
3223
+ : '#007bb8',
3224
+ },
3225
+ // Desktop styles for fixed width button
3226
+ '@media (min-width: 900px)': desktopWidth
3227
+ ? {
3228
+ width: desktopWidth,
3229
+ minWidth: desktopWidth,
3230
+ }
3231
+ : {},
3232
+ }));
2909
3233
 
2910
- const CheckoutFormButton = ({ text = 'Next', disabled = false, onClick, fixed = true, type = 'button', sx, loading = false, }) => {
2911
- return (jsxRuntime.jsx(ButtonContainer, Object.assign({ isFixed: fixed, sx: sx }, { children: jsxRuntime.jsx(StyledButton, Object.assign({ type: type, disabled: disabled || loading, isDisabled: disabled || loading, onClick: onClick }, { children: loading ? 'Processing...' : text })) })));
3234
+ const CheckoutFormButton = ({ text = 'Next', disabled = false, onClick, fixed = true, type = 'button', sx, loading = false, desktopRightAligned = false, desktopWidth = '180px', }) => {
3235
+ return (jsxRuntime.jsx(ButtonContainer, Object.assign({ isFixed: fixed, desktopRightAligned: desktopRightAligned, sx: sx }, { children: jsxRuntime.jsx(StyledButton, Object.assign({ type: type, disabled: disabled || loading, isDisabled: disabled || loading, desktopWidth: desktopRightAligned ? desktopWidth : undefined, onClick: onClick }, { children: loading ? 'Processing...' : text })) })));
2912
3236
  };
2913
3237
 
2914
3238
  const QuestionContainer = styles.styled(material.Box)({
@@ -2961,6 +3285,41 @@ const HealthQuestionGroup = ({ question, questionNumber, value, onChange, error,
2961
3285
  const FormContainer$3 = styles.styled(material.Box)({
2962
3286
  padding: '0 16px 24px',
2963
3287
  });
3288
+ /**
3289
+ * Desktop form container - constrains content to 938px max-width and centers it
3290
+ */
3291
+ const DesktopFormContainer$3 = styles.styled(material.Box)({
3292
+ padding: '0 16px 24px',
3293
+ '@media (min-width: 900px)': {
3294
+ maxWidth: '938px',
3295
+ margin: '0 auto',
3296
+ padding: '0 0 24px',
3297
+ },
3298
+ });
3299
+ /**
3300
+ * Fields grid container - displays fields in 2-column grid on desktop
3301
+ */
3302
+ const FieldsGridContainer$2 = styles.styled(material.Box)({
3303
+ display: 'flex',
3304
+ flexDirection: 'column',
3305
+ gap: '24px',
3306
+ '@media (min-width: 900px)': {
3307
+ display: 'grid',
3308
+ gridTemplateColumns: 'repeat(2, 1fr)',
3309
+ gap: '24px',
3310
+ '& > *': {
3311
+ minWidth: 0,
3312
+ },
3313
+ },
3314
+ });
3315
+ /**
3316
+ * Full width field - spans both columns on desktop grid
3317
+ */
3318
+ const FullWidthField$2 = styles.styled(material.Box)({
3319
+ '@media (min-width: 900px)': {
3320
+ gridColumn: '1 / -1',
3321
+ },
3322
+ });
2964
3323
  const CheckboxContainer$1 = styles.styled(material.Box)({
2965
3324
  marginTop: '12px',
2966
3325
  '& .MuiFormControlLabel-root': {
@@ -2979,33 +3338,82 @@ const CheckboxLabel$1 = styles.styled(material.Typography)({
2979
3338
  lineHeight: '18px',
2980
3339
  });
2981
3340
 
2982
- const PersonalInformationForm = ({ renderField, fields, consents, onSubmit, formRef, sx, }) => {
3341
+ const PersonalInformationForm = ({ renderField, fields, consents, onSubmit, formRef, sx, desktopGridLayout = false, }) => {
2983
3342
  const defaultBankConfirmationLabel = 'I confirm this bank account is mine and consent to AmMetLife crediting payouts to it';
2984
3343
  const defaultMarketingLabel = 'I/We consent to AmMetLife Insurance Berhad using my personal data for marketing and communication via digital platforms such as email, WhatsApp, and mobile';
2985
- return (jsxRuntime.jsx(FormContainer$3, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.full_name), fields.full_name.helperText && (jsxRuntime.jsx(material.Typography, Object.assign({ variant: "caption", sx: {
3344
+ const Container = desktopGridLayout ? DesktopFormContainer$3 : FormContainer$3;
3345
+ const FieldsWrapper = desktopGridLayout ? FieldsGridContainer$2 : material.Box;
3346
+ const fieldsWrapperProps = desktopGridLayout
3347
+ ? {}
3348
+ : { sx: { display: 'flex', flexDirection: 'column', gap: '24px' } };
3349
+ return (jsxRuntime.jsx(Container, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(FieldsWrapper, Object.assign({}, fieldsWrapperProps, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.full_name), fields.full_name.helperText && (jsxRuntime.jsx(material.Typography, Object.assign({ variant: "caption", sx: {
2986
3350
  display: 'block',
2987
3351
  mt: 0.5,
2988
3352
  ml: 2,
2989
3353
  color: '#5F5E62',
2990
3354
  fontSize: '12px',
2991
3355
  fontFamily: 'Montserrat',
2992
- } }, { children: fields.full_name.helperText })))] }), renderField(fields.nric), renderField(fields.date_of_birth), renderField(fields.gender), renderField(fields.salutation), renderField(fields.nationality), renderField(fields.occupation), renderField(fields.industry), renderField(fields.crediting_bank_name), renderField(fields.crediting_bank_account_number), jsxRuntime.jsxs(CheckboxContainer$1, { children: [jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.bank_account_confirmation.checked, onChange: (e) => consents.bank_account_confirmation.onChange(e.target.checked), name: "bank_account_confirmation" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.bank_account_confirmation.label ||
3356
+ } }, { children: fields.full_name.helperText })))] }), renderField(fields.nric), renderField(fields.date_of_birth), renderField(fields.gender), renderField(fields.salutation), renderField(fields.nationality), renderField(fields.occupation), renderField(fields.industry), renderField(fields.crediting_bank_name), renderField(fields.crediting_bank_account_number), desktopGridLayout ? (jsxRuntime.jsx(FullWidthField$2, { children: jsxRuntime.jsxs(CheckboxContainer$1, { children: [jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.bank_account_confirmation.checked, onChange: (e) => consents.bank_account_confirmation.onChange(e.target.checked), name: "bank_account_confirmation" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.bank_account_confirmation.label ||
3357
+ defaultBankConfirmationLabel }) }), consents.bank_account_confirmation.error && (jsxRuntime.jsx(material.Typography, Object.assign({ sx: {
3358
+ color: 'error.main',
3359
+ fontSize: '12px',
3360
+ mt: 0.5,
3361
+ ml: 4,
3362
+ } }, { children: consents.bank_account_confirmation.error })))] }) })) : (jsxRuntime.jsxs(CheckboxContainer$1, { children: [jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.bank_account_confirmation.checked, onChange: (e) => consents.bank_account_confirmation.onChange(e.target.checked), name: "bank_account_confirmation" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.bank_account_confirmation.label ||
2993
3363
  defaultBankConfirmationLabel }) }), consents.bank_account_confirmation.error && (jsxRuntime.jsx(material.Typography, Object.assign({ sx: {
2994
3364
  color: 'error.main',
2995
3365
  fontSize: '12px',
2996
3366
  mt: 0.5,
2997
3367
  ml: 4,
2998
- } }, { children: consents.bank_account_confirmation.error })))] }), jsxRuntime.jsx(CheckboxContainer$1, { children: jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.marketing_consent.checked, onChange: (e) => consents.marketing_consent.onChange(e.target.checked), name: "marketing_consent" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.marketing_consent.label || defaultMarketingLabel }) }) })] })) })));
3368
+ } }, { children: consents.bank_account_confirmation.error })))] })), desktopGridLayout ? (jsxRuntime.jsx(FullWidthField$2, { children: jsxRuntime.jsx(CheckboxContainer$1, { children: jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.marketing_consent.checked, onChange: (e) => consents.marketing_consent.onChange(e.target.checked), name: "marketing_consent" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.marketing_consent.label || defaultMarketingLabel }) }) }) })) : (jsxRuntime.jsx(CheckboxContainer$1, { children: jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: consents.marketing_consent.checked, onChange: (e) => consents.marketing_consent.onChange(e.target.checked), name: "marketing_consent" }), label: jsxRuntime.jsx(CheckboxLabel$1, { children: consents.marketing_consent.label || defaultMarketingLabel }) }) }))] })) })));
2999
3369
  };
3000
3370
 
3001
3371
  const FormContainer$2 = styles.styled(material.Box)({
3002
3372
  padding: '0 16px 24px',
3003
3373
  });
3374
+ /**
3375
+ * Desktop form container - constrains content to 938px max-width and centers it
3376
+ */
3377
+ const DesktopFormContainer$2 = styles.styled(material.Box)({
3378
+ padding: '0 16px 24px',
3379
+ '@media (min-width: 900px)': {
3380
+ maxWidth: '938px',
3381
+ margin: '0 auto',
3382
+ padding: '0 0 24px',
3383
+ },
3384
+ });
3385
+ /**
3386
+ * Fields grid container - displays fields in 2-column grid on desktop
3387
+ */
3388
+ const FieldsGridContainer$1 = styles.styled(material.Box)({
3389
+ display: 'flex',
3390
+ flexDirection: 'column',
3391
+ gap: '24px',
3392
+ '@media (min-width: 900px)': {
3393
+ display: 'grid',
3394
+ gridTemplateColumns: 'repeat(2, 1fr)',
3395
+ gap: '24px',
3396
+ '& > *': {
3397
+ minWidth: 0,
3398
+ },
3399
+ },
3400
+ });
3401
+ /**
3402
+ * Full width field - spans both columns on desktop grid
3403
+ */
3404
+ const FullWidthField$1 = styles.styled(material.Box)({
3405
+ '@media (min-width: 900px)': {
3406
+ gridColumn: '1 / -1',
3407
+ },
3408
+ });
3004
3409
  const CheckboxContainer = styles.styled(material.Box)({
3005
3410
  marginTop: '12px',
3006
3411
  '& .MuiFormControlLabel-root': {
3007
3412
  alignItems: 'flex-start',
3008
3413
  marginLeft: 0,
3414
+ '@media (min-width: 900px)': {
3415
+ alignItems: 'center',
3416
+ },
3009
3417
  },
3010
3418
  '& .MuiCheckbox-root': {
3011
3419
  padding: '4px 8px 4px 0',
@@ -3026,9 +3434,36 @@ const SectionTitle$1 = styles.styled(material.Typography)({
3026
3434
  lineHeight: '24px',
3027
3435
  });
3028
3436
 
3029
- const ContactDetailsForm = ({ renderField, fields, mailingFields, mailingAddressSame, onSubmit, formRef, sx, }) => {
3437
+ const ContactDetailsForm = ({ renderField, fields, mailingFields, mailingAddressSame, onSubmit, formRef, sx, desktopGridLayout = false, }) => {
3030
3438
  const defaultMailingLabel = 'My mailing address is not the same as residential';
3031
- return (jsxRuntime.jsx(FormContainer$2, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.phone_number), fields.phone_number.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3439
+ const Container = desktopGridLayout ? DesktopFormContainer$2 : FormContainer$2;
3440
+ // Helper to render field with or without full width wrapper
3441
+ const renderFieldWithLayout = (field, fullWidth = false) => {
3442
+ if (desktopGridLayout && fullWidth) {
3443
+ return jsxRuntime.jsx(FullWidthField$1, { children: renderField(field) });
3444
+ }
3445
+ return renderField(field);
3446
+ };
3447
+ // Helper to render field with helper text
3448
+ const renderFieldWithHelperText = (field, fullWidth = false) => {
3449
+ const content = (jsxRuntime.jsxs(material.Box, { children: [renderField(field), field.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3450
+ display: 'block',
3451
+ mt: 0.5,
3452
+ color: '#5F5E62',
3453
+ fontSize: '12px',
3454
+ fontFamily: 'Montserrat',
3455
+ } }, { children: field.helperText })))] }));
3456
+ if (desktopGridLayout && fullWidth) {
3457
+ return jsxRuntime.jsx(FullWidthField$1, { children: content });
3458
+ }
3459
+ return content;
3460
+ };
3461
+ return (jsxRuntime.jsx(Container, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: desktopGridLayout ? (jsxRuntime.jsxs(FieldsGridContainer$1, { children: [renderFieldWithHelperText(fields.phone_number, false), renderFieldWithLayout(fields.email_address, false), jsxRuntime.jsx(FullWidthField$1, { children: jsxRuntime.jsx(material.Divider, { sx: { borderColor: 'rgba(0,0,0,0.1)' } }) }), jsxRuntime.jsx(FullWidthField$1, { children: jsxRuntime.jsx(SectionTitle$1, { children: "Residential address" }) }), renderFieldWithHelperText(fields.residential_address_line1, false), renderFieldWithHelperText(fields.residential_address_line2, false), renderField(fields.postal_code), renderField(fields.city), renderField(fields.state), jsxRuntime.jsx(FullWidthField$1, { children: jsxRuntime.jsx(material.Divider, { sx: { borderColor: 'rgba(0,0,0,0.1)' } }) }), (mailingAddressSame === null || mailingAddressSame === void 0 ? void 0 : mailingAddressSame.checked) && mailingFields && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(FullWidthField$1, { children: jsxRuntime.jsx(SectionTitle$1, { children: "Mailing address" }) }), renderFieldWithHelperText(mailingFields.mailing_address_line1, false), renderFieldWithHelperText(mailingFields.mailing_address_line2, false), renderField(mailingFields.mailing_postal_code), renderField(mailingFields.mailing_city), renderField(mailingFields.mailing_state)] })), mailingAddressSame && (jsxRuntime.jsx(FullWidthField$1, { children: jsxRuntime.jsx(CheckboxContainer, { children: jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: mailingAddressSame.checked, onChange: (e) => mailingAddressSame.onChange(e.target.checked), name: "mailing_not_same_as_residential", sx: {
3462
+ color: '#929094',
3463
+ '&.Mui-checked': {
3464
+ color: '#317abc',
3465
+ },
3466
+ } }), label: jsxRuntime.jsx(CheckboxLabel, { children: mailingAddressSame.label || defaultMailingLabel }) }) }) }))] })) : (jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.phone_number), fields.phone_number.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3032
3467
  display: 'block',
3033
3468
  mt: 0.5,
3034
3469
  ml: 2,
@@ -3064,23 +3499,96 @@ const ContactDetailsForm = ({ renderField, fields, mailingFields, mailingAddress
3064
3499
  '&.Mui-checked': {
3065
3500
  color: '#317abc',
3066
3501
  },
3067
- } }), label: jsxRuntime.jsx(CheckboxLabel, { children: mailingAddressSame.label || defaultMailingLabel }) }) }))] })) })));
3502
+ } }), label: jsxRuntime.jsx(CheckboxLabel, { children: mailingAddressSame.label || defaultMailingLabel }) }) }))] }))) })));
3068
3503
  };
3069
3504
 
3070
3505
  const FormContainer$1 = styles.styled(material.Box)({
3071
3506
  padding: '0 16px 24px',
3072
3507
  });
3508
+ /**
3509
+ * Desktop form container - constrains content to 938px max-width and centers it
3510
+ */
3511
+ const DesktopFormContainer$1 = styles.styled(material.Box)({
3512
+ padding: '0 16px 24px',
3513
+ '@media (min-width: 900px)': {
3514
+ maxWidth: '938px',
3515
+ margin: '0 auto',
3516
+ padding: '0 0 24px',
3517
+ },
3518
+ });
3519
+ /**
3520
+ * Measurement fields grid - displays weight and height side by side on desktop
3521
+ */
3522
+ const MeasurementFieldsGrid = styles.styled(material.Box)({
3523
+ display: 'flex',
3524
+ flexDirection: 'column',
3525
+ gap: '24px',
3526
+ '@media (min-width: 900px)': {
3527
+ display: 'grid',
3528
+ gridTemplateColumns: 'repeat(2, 1fr)',
3529
+ gap: '24px',
3530
+ },
3531
+ });
3073
3532
 
3074
- const HealthInformationForm = ({ renderField, measurementFields, healthQuestions, onSubmit, formRef, sx, }) => {
3075
- return (jsxRuntime.jsx(FormContainer$1, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [renderField(measurementFields.weight), renderField(measurementFields.height), healthQuestions.map((question, index) => (jsxRuntime.jsx(HealthQuestionGroup, { question: question.question, questionNumber: question.questionNumber, value: question.value, onChange: question.onChange, error: question.error, labels: question.labels }, question.name || index)))] })) })));
3533
+ const HealthInformationForm = ({ renderField, measurementFields, healthQuestions, onSubmit, formRef, sx, desktopGridLayout = false, }) => {
3534
+ const Container = desktopGridLayout ? DesktopFormContainer$1 : FormContainer$1;
3535
+ return (jsxRuntime.jsx(Container, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [desktopGridLayout ? (jsxRuntime.jsxs(MeasurementFieldsGrid, { children: [renderField(measurementFields.weight), renderField(measurementFields.height)] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [renderField(measurementFields.weight), renderField(measurementFields.height)] })), healthQuestions.map((question, index) => (jsxRuntime.jsx(HealthQuestionGroup, { question: question.question, questionNumber: question.questionNumber, value: question.value, onChange: question.onChange, error: question.error, labels: question.labels }, question.name || index)))] })) })));
3076
3536
  };
3077
3537
 
3078
3538
  const FormContainer = styles.styled(material.Box)({
3079
3539
  padding: '0 16px 24px',
3080
3540
  });
3541
+ /**
3542
+ * Desktop form container - constrains content to 938px max-width and centers it
3543
+ */
3544
+ const DesktopFormContainer = styles.styled(material.Box)({
3545
+ padding: '0 16px 24px',
3546
+ '@media (min-width: 900px)': {
3547
+ maxWidth: '938px',
3548
+ margin: '0 auto',
3549
+ padding: '0 0 24px',
3550
+ },
3551
+ });
3552
+ /**
3553
+ * Fields grid container - displays fields in 2-column grid on desktop
3554
+ */
3555
+ const FieldsGridContainer = styles.styled(material.Box)({
3556
+ display: 'flex',
3557
+ flexDirection: 'column',
3558
+ gap: '24px',
3559
+ '@media (min-width: 900px)': {
3560
+ display: 'grid',
3561
+ gridTemplateColumns: 'repeat(2, 1fr)',
3562
+ gap: '24px',
3563
+ '& > *': {
3564
+ minWidth: 0,
3565
+ },
3566
+ },
3567
+ });
3568
+ /**
3569
+ * Full width field - spans both columns on desktop grid
3570
+ */
3571
+ const FullWidthField = styles.styled(material.Box)({
3572
+ '@media (min-width: 900px)': {
3573
+ gridColumn: '1 / -1',
3574
+ },
3575
+ });
3081
3576
 
3082
- const ChildInformationForm = ({ renderField, fields, onSubmit, formRef, sx, }) => {
3083
- return (jsxRuntime.jsx(FormContainer, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.full_name), fields.full_name.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3577
+ const ChildInformationForm = ({ renderField, fields, onSubmit, formRef, sx, desktopGridLayout = false, }) => {
3578
+ const Container = desktopGridLayout ? DesktopFormContainer : FormContainer;
3579
+ // Desktop layout with 2-column grid
3580
+ if (desktopGridLayout) {
3581
+ return (jsxRuntime.jsx(Container, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(FieldsGridContainer, { children: [jsxRuntime.jsxs(FullWidthField, { children: [renderField(fields.full_name), fields.full_name.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3582
+ display: 'block',
3583
+ mt: 0.5,
3584
+ ml: 2,
3585
+ color: '#5F5E62',
3586
+ fontSize: '12px',
3587
+ fontFamily: 'Montserrat',
3588
+ } }, { children: fields.full_name.helperText })))] }), fields.nric && (jsxRuntime.jsx(FullWidthField, { children: renderField(fields.nric) })), renderField(fields.date_of_birth), renderField(fields.gender), renderField(fields.nationality)] }) })));
3589
+ }
3590
+ // Mobile layout - single column
3591
+ return (jsxRuntime.jsx(Container, Object.assign({ ref: formRef, component: "form", onSubmit: onSubmit, sx: sx }, { children: jsxRuntime.jsxs(material.Box, Object.assign({ sx: { display: 'flex', flexDirection: 'column', gap: '24px' } }, { children: [jsxRuntime.jsxs(material.Box, { children: [renderField(fields.full_name), fields.full_name.helperText && (jsxRuntime.jsx(material.Box, Object.assign({ component: "span", sx: {
3084
3592
  display: 'block',
3085
3593
  mt: 0.5,
3086
3594
  ml: 2,
@@ -3277,8 +3785,8 @@ const BenefitTitle = material.styled(material.Typography)(({ theme }) => ({
3277
3785
  lineHeight: '20px',
3278
3786
  margin: 0,
3279
3787
  [theme.breakpoints.up('md')]: {
3280
- fontSize: '16px',
3281
- lineHeight: '22px',
3788
+ fontSize: '18px',
3789
+ lineHeight: '24px',
3282
3790
  },
3283
3791
  }));
3284
3792
  const BenefitDescription = material.styled(material.Typography)(({ theme }) => ({
@@ -3287,7 +3795,7 @@ const BenefitDescription = material.styled(material.Typography)(({ theme }) => (
3287
3795
  lineHeight: '18px',
3288
3796
  margin: 0,
3289
3797
  [theme.breakpoints.up('md')]: {
3290
- fontSize: '15px',
3798
+ fontSize: '16px',
3291
3799
  lineHeight: '20px',
3292
3800
  },
3293
3801
  }));
@@ -3465,6 +3973,7 @@ exports.CheckoutProgress = CheckoutProgress;
3465
3973
  exports.ChildInformationForm = ChildInformationForm;
3466
3974
  exports.ContactDetailsForm = ContactDetailsForm;
3467
3975
  exports.CoverageAmountSlider = CoverageAmountSlider;
3976
+ exports.DesktopHeaderMenuBar = DesktopHeaderMenuBar;
3468
3977
  exports.FAQAccordion = FAQAccordion;
3469
3978
  exports.Footer = Footer;
3470
3979
  exports.Header = Header$1;