@shohojdhara/atomix 0.4.4 → 0.4.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.
Files changed (45) hide show
  1. package/dist/atomix.css +25 -5
  2. package/dist/atomix.css.map +1 -1
  3. package/dist/atomix.min.css +1 -1
  4. package/dist/atomix.min.css.map +1 -1
  5. package/dist/charts.js +2 -6
  6. package/dist/charts.js.map +1 -1
  7. package/dist/core.d.ts +4 -4
  8. package/dist/core.js +12 -16
  9. package/dist/core.js.map +1 -1
  10. package/dist/forms.js +2 -6
  11. package/dist/forms.js.map +1 -1
  12. package/dist/heavy.js +7 -11
  13. package/dist/heavy.js.map +1 -1
  14. package/dist/index.d.ts +40 -16
  15. package/dist/index.esm.js +305 -331
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.js +335 -347
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.min.js +1 -1
  20. package/dist/index.min.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/components/AtomixGlass/AtomixGlass.tsx +0 -1
  23. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +3 -8
  24. package/src/components/Breadcrumb/Breadcrumb.tsx +5 -5
  25. package/src/components/Breadcrumb/BreadcrumbCompound.test.tsx +2 -2
  26. package/src/components/Button/Button.tsx +6 -6
  27. package/src/components/Card/Card.tsx +3 -3
  28. package/src/components/Dropdown/Dropdown.tsx +5 -3
  29. package/src/components/Footer/Footer.tsx +124 -166
  30. package/src/components/Footer/FooterLink.tsx +16 -19
  31. package/src/components/Footer/FooterSection.tsx +40 -39
  32. package/src/components/Footer/FooterSocialLink.tsx +59 -58
  33. package/src/components/Footer/README.md +1 -1
  34. package/src/components/Hero/Hero.tsx +72 -142
  35. package/src/components/Navigation/Menu/MegaMenu.tsx +17 -12
  36. package/src/components/Navigation/Menu/Menu.tsx +49 -24
  37. package/src/components/Navigation/Nav/NavItem.tsx +5 -3
  38. package/src/components/Navigation/SideMenu/SideMenu.tsx +2 -2
  39. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -4
  40. package/src/components/Slider/Slider.tsx +7 -4
  41. package/src/lib/composables/useFooter.ts +117 -20
  42. package/src/lib/composables/useSlider.ts +3 -1
  43. package/src/lib/types/components.ts +44 -12
  44. package/src/styles/06-components/_components.atomix-glass.scss +38 -5
  45. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +0 -222
package/dist/index.js CHANGED
@@ -2221,7 +2221,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2221
2221
  }, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseDown: onMouseDown, onMouseUp: onMouseUp, isHovered: isHovered = !1, isActive: isActive = !1, overLight: overLight = !1, overLightConfig: overLightConfig = {}, borderRadius: borderRadius = 0, padding: padding = "0 0", glassSize: glassSize = {
2222
2222
  width: 0,
2223
2223
  height: 0
2224
- }, onClick: onClick, mode: mode = "standard", effectiveWithoutEffects: effectiveWithoutEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", withLiquidBlur: withLiquidBlur = !1, elasticity: elasticity = 0, contentRef: contentRef}, ref) => {
2224
+ }, onClick: onClick, mode: mode = "standard", effectiveWithoutEffects: effectiveWithoutEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", withLiquidBlur: withLiquidBlur = !1, contentRef: contentRef}, ref) => {
2225
2225
  // Generate a stable, deterministic ID for SSR compatibility
2226
2226
  // Use a module-level counter that's consistent across server and client
2227
2227
  const filterId = React.useMemo((() => "atomix-glass-filter-" + ++idCounter), []), [shaderMapUrl, setShaderMapUrl] = React.useState(""), shaderGeneratorRef = React.useRef(null), shaderUtilsRef = React.useRef(null), shaderDebounceTimeoutRef = React.useRef(null);
@@ -2419,7 +2419,6 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2419
2419
  children: [ jsxRuntime.jsxs("div", {
2420
2420
  className: ATOMIX_GLASS.FILTER_CLASS,
2421
2421
  style: {
2422
- zIndex: 1,
2423
2422
  position: "absolute",
2424
2423
  inset: 0
2425
2424
  },
@@ -2455,9 +2454,7 @@ const sharedShaderCache = new Map, AtomixGlassContainer = React.forwardRef((({c
2455
2454
  className: ATOMIX_GLASS.CONTENT_CLASS,
2456
2455
  style: {
2457
2456
  position: "relative",
2458
- textShadow: "var(--atomix-glass-container-text-shadow)",
2459
- // Ensure content is always above the filter layer (zIndex 1)
2460
- zIndex: elasticity > 0 ? 100 : 2
2457
+ textShadow: "var(--atomix-glass-container-text-shadow)"
2461
2458
  },
2462
2459
  children: children
2463
2460
  }) ]
@@ -3330,7 +3327,6 @@ function useAtomixGlass({glassRef: glassRef, contentRef: contentRef, wrapperRef:
3330
3327
  effectiveWithoutEffects: effectiveWithoutEffects,
3331
3328
  effectiveReducedMotion: effectiveReducedMotion,
3332
3329
  shaderVariant: shaderVariant,
3333
- elasticity: elasticity,
3334
3330
  withLiquidBlur: withLiquidBlur,
3335
3331
  children: children
3336
3332
  }), Boolean(onClick) && jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -4124,7 +4120,7 @@ const BreadcrumbItem = React.forwardRef((({children: children, href: href, acti
4124
4120
 
4125
4121
  BreadcrumbItem.displayName = "BreadcrumbItem";
4126
4122
 
4127
- const Breadcrumb = React.memo((function({items: items, divider: divider, className: className = "", "aria-label": ariaLabel = "Breadcrumb", LinkComponent: LinkComponent, style: style, children: children}) {
4123
+ const Breadcrumb = React.memo((function({items: items, divider: divider, className: className = "", "aria-label": ariaLabel = "Breadcrumb", linkComponent: linkComponent, style: style, children: children}) {
4128
4124
  const breadcrumbClasses = [ BREADCRUMB.CLASSES.BASE, className ].filter(Boolean).join(" ");
4129
4125
  let content;
4130
4126
  if (items && items.length > 0)
@@ -4138,7 +4134,7 @@ const Breadcrumb = React.memo((function({items: items, divider: divider, classN
4138
4134
  onClick: item.onClick,
4139
4135
  className: item.className,
4140
4136
  style: item.style,
4141
- linkAs: LinkComponent,
4137
+ linkAs: linkComponent,
4142
4138
  children: item.label
4143
4139
  }, index);
4144
4140
  })); else {
@@ -4148,7 +4144,7 @@ const Breadcrumb = React.memo((function({items: items, divider: divider, classN
4148
4144
  if ( React.isValidElement(child)) {
4149
4145
  const isLast = index === childrenCount - 1, childProps = child.props, {active: active, linkAs: linkAs, ...otherProps} = childProps, newProps = {
4150
4146
  active: active ?? (!!isLast || void 0),
4151
- linkAs: linkAs ?? LinkComponent
4147
+ linkAs: linkAs ?? linkComponent
4152
4148
  };
4153
4149
 
4154
4150
  return React.cloneElement(child, newProps);
@@ -4324,7 +4320,7 @@ class ThemeNaming {
4324
4320
 
4325
4321
  ThemeNaming.prefix = "atomix";
4326
4322
 
4327
- const Button = React__default.default.memo( React.forwardRef((({label: label, children: children, onClick: onClick, variant: variant = "primary", size: size = "md", disabled: disabled = !1, loading: loading = !1, loadingText: loadingText, icon: icon, iconName: iconName, iconSize: iconSize = "sm", iconPosition: iconPosition = "start", iconOnly: iconOnly = !1, rounded: rounded = !1, fullWidth: fullWidth = !1, block: block = !1, active: active = !1, selected: selected = !1, type: type = "button", className: className = "", as: Component = "button", href: href, target: target, glass: glass, onHover: onHover, onFocus: onFocus, onBlur: onBlur, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, "aria-expanded": ariaExpanded, "aria-controls": ariaControls, tabIndex: tabIndex, style: style, LinkComponent: LinkComponent, ...props}, ref) => {
4323
+ const Button = React__default.default.memo( React.forwardRef((({label: label, children: children, onClick: onClick, variant: variant = "primary", size: size = "md", disabled: disabled = !1, loading: loading = !1, loadingText: loadingText, icon: icon, iconName: iconName, iconSize: iconSize = "sm", iconPosition: iconPosition = "start", iconOnly: iconOnly = !1, rounded: rounded = !1, fullWidth: fullWidth = !1, block: block = !1, active: active = !1, selected: selected = !1, type: type = "button", className: className = "", as: Component = "button", href: href, target: target, glass: glass, onHover: onHover, onFocus: onFocus, onBlur: onBlur, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, "aria-expanded": ariaExpanded, "aria-controls": ariaControls, tabIndex: tabIndex, style: style, linkComponent: linkComponent, ...props}, ref) => {
4328
4324
  const isDisabled = disabled || loading, shouldRenderAsLink = Boolean(href && !isDisabled), iconElement = iconName ? jsxRuntime.jsx(Icon, {
4329
4325
  name: iconName,
4330
4326
  size: iconSize
@@ -4375,12 +4371,12 @@ const Button = React__default.default.memo( React.forwardRef((({label: label, c
4375
4371
  let content;
4376
4372
  // Render as anchor if href is provided
4377
4373
  if (shouldRenderAsLink)
4378
- // Use custom LinkComponent if provided (e.g., Next.js Link)
4379
- if (LinkComponent) {
4380
- const LinkComp = LinkComponent, linkProps = {
4374
+ // Use custom linkComponent if provided (e.g., Next.js Link)
4375
+ if (linkComponent) {
4376
+ const LinkComp = linkComponent, linkProps = {
4381
4377
  ...buttonProps,
4382
4378
  ref: ref,
4383
- // LinkComponent usually forwards ref to anchor
4379
+ // linkComponent usually forwards ref to anchor
4384
4380
  href: href,
4385
4381
  to: href,
4386
4382
  target: target,
@@ -4678,7 +4674,7 @@ header: header, image: image, imageAlt: imageAlt = "", title: title, text: text,
4678
4674
  // Interaction
4679
4675
  onClick: onClick, onHover: onHover, onFocus: onFocus, href: href, target: target,
4680
4676
  // Custom Link
4681
- LinkComponent: LinkComponent,
4677
+ linkComponent: linkComponent,
4682
4678
  // Glass
4683
4679
  glass: glass,
4684
4680
  // Accessibility
@@ -4763,8 +4759,8 @@ className: className = "", style: style, ...rest}, ref) => {
4763
4759
  // Render as anchor if href is provided
4764
4760
  if (href && !isDisabled) {
4765
4761
  let anchorElement;
4766
- if (LinkComponent) {
4767
- const LinkComp = LinkComponent;
4762
+ if (linkComponent) {
4763
+ const LinkComp = linkComponent;
4768
4764
  anchorElement = jsxRuntime.jsx(LinkComp, {
4769
4765
  ...commonProps,
4770
4766
  ref: ref,
@@ -9869,7 +9865,7 @@ DropdownTrigger.displayName = "DropdownTrigger";
9869
9865
  /**
9870
9866
  * DropdownItem component for menu items
9871
9867
  */
9872
- const DropdownItem = React.memo((({children: children, href: href, active: active = !1, disabled: disabled = !1, icon: icon, onClick: onClick, className: className = "", LinkComponent: LinkComponent, ...props}) => {
9868
+ const DropdownItem = React.memo((({children: children, href: href, target: target, active: active = !1, disabled: disabled = !1, icon: icon, onClick: onClick, className: className = "", linkComponent: linkComponent, ...props}) => {
9873
9869
  const {close: close} = React.useContext(DropdownContext), handleClick = e => {
9874
9870
  disabled ? e.preventDefault() : (onClick && onClick(e),
9875
9871
  // Always close the dropdown when an item is clicked
@@ -9877,6 +9873,7 @@ const DropdownItem = React.memo((({children: children, href: href, active: acti
9877
9873
  }, itemClasses = [ "c-dropdown__menu-item", active ? "is-active" : "", disabled ? "is-disabled" : "", className ].filter(Boolean).join(" "), linkProps = {
9878
9874
  href: href,
9879
9875
  to: href,
9876
+ target: target,
9880
9877
  className: itemClasses,
9881
9878
  onClick: handleClick,
9882
9879
  role: "menuitem",
@@ -9884,8 +9881,8 @@ const DropdownItem = React.memo((({children: children, href: href, active: acti
9884
9881
  ...props
9885
9882
  };
9886
9883
  return href && !disabled ? jsxRuntime.jsx("li", {
9887
- children: LinkComponent ? (() => {
9888
- const Component = LinkComponent;
9884
+ children: linkComponent ? (() => {
9885
+ const Component = linkComponent;
9889
9886
  return jsxRuntime.jsxs(Component, {
9890
9887
  ...linkProps,
9891
9888
  children: [ icon && jsxRuntime.jsx("span", {
@@ -12614,7 +12611,7 @@ const DEFAULT_ATOMIX_FONTS = [ {
12614
12611
  }
12615
12612
 
12616
12613
  function useSlider(options) {
12617
- const {slides: slides, slidesToShow: slidesToShow = 1, spaceBetween: spaceBetween = 0, loop: loop = !1, initialSlide: initialSlide = 0, direction: direction = "horizontal", speed: speed = 300, allowTouchMove: allowTouchMove = !0, threshold: threshold = 50, autoplay: autoplay, onSlideChange: onSlideChange} = options, containerRef = React.useRef(null), wrapperRef = React.useRef(null), repositioningRef = React.useRef(!1), autoplayRef = React.useRef(null), [autoplayRunning, setAutoplayRunning] = React.useState(!1), sliderStateRef = React.useRef({
12614
+ const {slides: rawSlides, slidesToShow: slidesToShow = 1, spaceBetween: spaceBetween = 0, loop: loop = !1, initialSlide: initialSlide = 0, direction: direction = "horizontal", speed: speed = 300, allowTouchMove: allowTouchMove = !0, threshold: threshold = 50, autoplay: autoplay, onSlideChange: onSlideChange} = options, slides = Array.isArray(rawSlides) ? rawSlides : [], containerRef = React.useRef(null), wrapperRef = React.useRef(null), repositioningRef = React.useRef(!1), autoplayRef = React.useRef(null), [autoplayRunning, setAutoplayRunning] = React.useState(!1), sliderStateRef = React.useRef({
12618
12615
  isTransitioning: !1,
12619
12616
  loop: loop,
12620
12617
  slides: slides,
@@ -13314,7 +13311,60 @@ const Textarea = React.memo( React.forwardRef((({value: value, defaultValue: de
13314
13311
 
13315
13312
  Textarea.displayName = "Textarea";
13316
13313
 
13317
- /**
13314
+ // ─── Platform Maps ───────────────────────────────────────────────
13315
+ const PLATFORM_ICON_MAP = {
13316
+ facebook: "FacebookLogo",
13317
+ twitter: "TwitterLogo",
13318
+ instagram: "InstagramLogo",
13319
+ linkedin: "LinkedinLogo",
13320
+ youtube: "YoutubeLogo",
13321
+ github: "GithubLogo",
13322
+ discord: "DiscordLogo",
13323
+ tiktok: "TiktokLogo",
13324
+ pinterest: "PinterestLogo",
13325
+ snapchat: "SnapchatLogo",
13326
+ whatsapp: "WhatsappLogo",
13327
+ telegram: "TelegramLogo",
13328
+ reddit: "RedditLogo",
13329
+ twitch: "TwitchLogo",
13330
+ spotify: "SpotifyLogo",
13331
+ dribbble: "DribbbleLogo",
13332
+ behance: "BehanceLogo",
13333
+ medium: "MediumLogo",
13334
+ dev: "DevToLogo",
13335
+ codepen: "CodepenLogo"
13336
+ }, PLATFORM_LABEL_MAP = {
13337
+ facebook: "Facebook",
13338
+ twitter: "Twitter",
13339
+ instagram: "Instagram",
13340
+ linkedin: "LinkedIn",
13341
+ youtube: "YouTube",
13342
+ github: "GitHub",
13343
+ discord: "Discord",
13344
+ tiktok: "TikTok",
13345
+ pinterest: "Pinterest",
13346
+ snapchat: "Snapchat",
13347
+ whatsapp: "WhatsApp",
13348
+ telegram: "Telegram",
13349
+ reddit: "Reddit",
13350
+ twitch: "Twitch",
13351
+ spotify: "Spotify",
13352
+ dribbble: "Dribbble",
13353
+ behance: "Behance",
13354
+ medium: "Medium",
13355
+ dev: "Dev.to",
13356
+ codepen: "CodePen"
13357
+ }, getPlatformIcon = platform => {
13358
+ const iconName = PLATFORM_ICON_MAP[platform];
13359
+ return iconName ? jsxRuntime.jsx(Icon, {
13360
+ name: iconName
13361
+ }) : jsxRuntime.jsx(Icon, {
13362
+ name: "Link"
13363
+ });
13364
+ }, FooterSocialLink = React.forwardRef((({platform: platform, url: url, icon: icon, label: label, size: size = "md", variant: variant = "default", disabled: disabled = !1, className: className = "", ...props}, ref) => {
13365
+ const linkClass = [ "c-footer__social-link", `c-footer__social-link--${platform}`, `c-footer__social-link--${size}`, `c-footer__social-link--${variant}`, disabled && "c-footer__social-link--disabled", className ].filter(Boolean).join(" "), ariaLabel = label || `Follow us on ${(platform => PLATFORM_LABEL_MAP[platform] || platform)
13366
+ // ─── Component ───────────────────────────────────────────────────
13367
+ /**
13318
13368
  * FooterSocialLink component provides styled social media links with platform-specific icons.
13319
13369
  *
13320
13370
  * @example
@@ -13322,30 +13372,7 @@ Textarea.displayName = "Textarea";
13322
13372
  * <FooterSocialLink platform="twitter" url="https://twitter.com/company" />
13323
13373
  * <FooterSocialLink platform="custom" url="https://example.com" icon={<CustomIcon />} label="Custom Platform" />
13324
13374
  * ```
13325
- */
13326
- const FooterSocialLink = React.forwardRef((({platform: platform, url: url, icon: icon, label: label, size: size = "md", variant: variant = "default", disabled: disabled = !1, className: className = "", ...props}, ref) => {
13327
- const linkClass = [ "c-footer__social-link", `c-footer__social-link--${platform}`, `c-footer__social-link--${size}`, `c-footer__social-link--${variant}`, disabled && "c-footer__social-link--disabled", className ].filter(Boolean).join(" "), ariaLabel = label || `Follow us on ${(platform => ({
13328
- facebook: "Facebook",
13329
- twitter: "Twitter",
13330
- instagram: "Instagram",
13331
- linkedin: "LinkedIn",
13332
- youtube: "YouTube",
13333
- github: "GitHub",
13334
- discord: "Discord",
13335
- tiktok: "TikTok",
13336
- pinterest: "Pinterest",
13337
- snapchat: "Snapchat",
13338
- whatsapp: "WhatsApp",
13339
- telegram: "Telegram",
13340
- reddit: "Reddit",
13341
- twitch: "Twitch",
13342
- spotify: "Spotify",
13343
- dribbble: "Dribbble",
13344
- behance: "Behance",
13345
- medium: "Medium",
13346
- dev: "Dev.to",
13347
- codepen: "CodePen"
13348
- }[platform] || platform))(platform)}`;
13375
+ */ (platform)}`;
13349
13376
  return jsxRuntime.jsxs("a", {
13350
13377
  ref: ref,
13351
13378
  href: disabled ? void 0 : url,
@@ -13357,35 +13384,7 @@ const FooterSocialLink = React.forwardRef((({platform: platform, url: url, icon
13357
13384
  ...props,
13358
13385
  children: [ jsxRuntime.jsx("span", {
13359
13386
  className: "c-footer__social-link-icon",
13360
- children: icon || (platform => {
13361
- const iconName = {
13362
- facebook: "FacebookLogo",
13363
- twitter: "TwitterLogo",
13364
- instagram: "InstagramLogo",
13365
- linkedin: "LinkedinLogo",
13366
- youtube: "YoutubeLogo",
13367
- github: "GithubLogo",
13368
- discord: "DiscordLogo",
13369
- tiktok: "TiktokLogo",
13370
- pinterest: "PinterestLogo",
13371
- snapchat: "SnapchatLogo",
13372
- whatsapp: "WhatsappLogo",
13373
- telegram: "TelegramLogo",
13374
- reddit: "RedditLogo",
13375
- twitch: "TwitchLogo",
13376
- spotify: "SpotifyLogo",
13377
- dribbble: "DribbbleLogo",
13378
- behance: "BehanceLogo",
13379
- medium: "MediumLogo",
13380
- dev: "DevToLogo",
13381
- codepen: "CodepenLogo"
13382
- }[platform];
13383
- return iconName ? jsxRuntime.jsx(Icon, {
13384
- name: iconName
13385
- }) : jsxRuntime.jsx(Icon, {
13386
- name: "Link"
13387
- });
13388
- })(platform)
13387
+ children: icon || getPlatformIcon(platform)
13389
13388
  }), jsxRuntime.jsx("span", {
13390
13389
  className: "c-footer__social-link-label u-visually-hidden",
13391
13390
  children: ariaLabel
@@ -13508,17 +13507,83 @@ Row.displayName = "Row";
13508
13507
  * ```
13509
13508
  */
13510
13509
  const Footer = React.forwardRef((({brand: brand, brandLogo: brandLogo, brandDescription: brandDescription, copyright: copyright, layout: layout = "columns", variant: variant = "primary", size: size = "md", showNewsletter: showNewsletter = !1, newsletterTitle: newsletterTitle = "Stay Updated", newsletterDescription: newsletterDescription = "Subscribe to our newsletter for the latest updates.", newsletterPlaceholder: newsletterPlaceholder = "Enter your email", newsletterButtonText: newsletterButtonText = "Subscribe", onNewsletterSubmit: onNewsletterSubmit, socialLinks: socialLinks = [], showBackToTop: showBackToTop = !1, backToTopText: backToTopText = "Back to Top", onBackToTop: onBackToTop, showDivider: showDivider = !0, sticky: sticky = !1, children: children, className: className = "", disabled: disabled = !1, glass: glass, ...props}, ref) => {
13511
- const {footerClass: footerClass, containerClass: containerClass, brandClass: brandClass, sectionsClass: sectionsClass, bottomClass: bottomClass, handleNewsletterSubmit: handleNewsletterSubmit, handleBackToTop: handleBackToTop, socialLinks: footerSocialLinks} = function(options = {}) {
13512
- const {layout: layout = FOOTER.DEFAULTS.LAYOUT, variant: variant = FOOTER.DEFAULTS.VARIANT, size: size = FOOTER.DEFAULTS.SIZE, sticky: sticky = FOOTER.DEFAULTS.STICKY, showNewsletter: showNewsletter = FOOTER.DEFAULTS.SHOW_NEWSLETTER, showBackToTop: showBackToTop = FOOTER.DEFAULTS.SHOW_BACK_TO_TOP, socialLinks: socialLinks = [], onNewsletterSubmit: onNewsletterSubmit, onBackToTop: onBackToTop, className: className = ""} = options;
13513
- // Generate footer classes
13510
+ const {footerClass: footerClass, containerClass: containerClass, brandClass: brandClass, sectionsClass: sectionsClass, bottomClass: bottomClass, getResponsiveColumnProps: getResponsiveColumnProps, handleNewsletterSubmit: handleNewsletterSubmit, handleBackToTop: handleBackToTop} = function(options = {}) {
13511
+ const {layout: layout = FOOTER.DEFAULTS.LAYOUT, variant: variant = FOOTER.DEFAULTS.VARIANT, size: size = FOOTER.DEFAULTS.SIZE, sticky: sticky = FOOTER.DEFAULTS.STICKY, showNewsletter: showNewsletter = FOOTER.DEFAULTS.SHOW_NEWSLETTER, showBackToTop: showBackToTop = FOOTER.DEFAULTS.SHOW_BACK_TO_TOP, showDivider: showDivider = FOOTER.DEFAULTS.SHOW_DIVIDER, socialLinks: socialLinks = [], onNewsletterSubmit: onNewsletterSubmit, onBackToTop: onBackToTop, glass: glass = !1, className: className = ""} = options, footerClass = React.useMemo((() => {
13512
+ const layoutKey = layout.toUpperCase(), sizeKey = size.toUpperCase();
13513
+ return [ FOOTER.CLASSES.BASE, FOOTER.CLASSES[layoutKey] || FOOTER.CLASSES.COLUMNS, `c-footer--${variant}`, FOOTER.CLASSES[sizeKey] || FOOTER.CLASSES.MD, sticky && FOOTER.CLASSES.STICKY, showNewsletter && "c-footer--with-newsletter", glass && "c-footer--glass", className ].filter(Boolean).join(" ");
13514
+ }), [ layout, variant, size, sticky, showNewsletter, glass, className ]), containerClass = FOOTER.CLASSES.CONTAINER, brandClass = FOOTER.CLASSES.BRAND, sectionsClass = React.useMemo((() => [ FOOTER.CLASSES.SECTIONS, "columns" === layout && "c-footer__sections--columns", "centered" === layout && "c-footer__sections--centered", "stacked" === layout && "c-footer__sections--stacked" ].filter(Boolean).join(" ")), [ layout ]), bottomClass = FOOTER.CLASSES.BOTTOM, columnSizes = React.useMemo((() =>
13515
+ /**
13516
+ * Resolves grid column size map for a given layout.
13517
+ */
13518
+ function(layout, showNewsletter) {
13519
+ switch (layout) {
13520
+ case "columns":
13521
+ default:
13522
+ return {
13523
+ brand: 4,
13524
+ content: showNewsletter ? 4 : 8,
13525
+ newsletter: showNewsletter ? 4 : 0
13526
+ };
13527
+
13528
+ case "centered":
13529
+ case "minimal":
13530
+ case "stacked":
13514
13531
  return {
13515
- footerClass: [ FOOTER.CLASSES.BASE, FOOTER.CLASSES[layout.toUpperCase()] || FOOTER.CLASSES.COLUMNS, `c-footer--${variant}`, FOOTER.CLASSES[size.toUpperCase()] || FOOTER.CLASSES.MD, sticky && FOOTER.CLASSES.STICKY, showNewsletter && "c-footer--with-newsletter", className ].filter(Boolean).join(" "),
13516
- containerClass: FOOTER.CLASSES.CONTAINER,
13517
- brandClass: FOOTER.CLASSES.BRAND,
13518
- sectionsClass: [ FOOTER.CLASSES.SECTIONS, "columns" === layout && "c-footer__sections--columns", "centered" === layout && "c-footer__sections--centered", "stacked" === layout && "c-footer__sections--stacked" ].filter(Boolean).join(" "),
13519
- bottomClass: FOOTER.CLASSES.BOTTOM,
13532
+ brand: 12,
13533
+ content: 12,
13534
+ newsletter: showNewsletter ? 12 : 0
13535
+ };
13536
+
13537
+ case "flexible":
13538
+ return {
13539
+ brand: "auto",
13540
+ content: "auto",
13541
+ newsletter: "auto"
13542
+ };
13543
+
13544
+ case "sidebar":
13545
+ return {
13546
+ brand: 3,
13547
+ content: 9,
13548
+ newsletter: showNewsletter ? 9 : 0
13549
+ };
13550
+
13551
+ case "wide":
13552
+ return {
13553
+ brand: 3,
13554
+ content: 6,
13555
+ newsletter: showNewsletter ? 3 : 0
13556
+ };
13557
+ }
13558
+ }
13559
+ /**
13560
+ * Computes responsive GridCol props for a given column type.
13561
+ */ (layout, showNewsletter)), [ layout, showNewsletter ]);
13562
+ // ---------- CSS class strings ----------
13563
+ return {
13564
+ // Classes
13565
+ footerClass: footerClass,
13566
+ containerClass: containerClass,
13567
+ brandClass: brandClass,
13568
+ sectionsClass: sectionsClass,
13569
+ bottomClass: bottomClass,
13570
+ // Grid helpers
13571
+ columnSizes: columnSizes,
13572
+ getResponsiveColumnProps: columnType => function(columnType, layout, columnSizes) {
13573
+ return "flexible" === layout && "auto" === columnSizes[columnType] ? {
13574
+ xs: 12,
13575
+ sm: !0,
13576
+ md: !0
13577
+ } : {
13578
+ xs: 12,
13579
+ md: "columns" === layout || "sidebar" === layout || "wide" === layout ? columnSizes[columnType] : 12
13580
+ };
13581
+ }(columnType, layout, columnSizes)
13582
+ // ---------- Handlers ----------
13583
+ ,
13584
+ // Handlers
13520
13585
  handleNewsletterSubmit: email => {
13521
- onNewsletterSubmit && onNewsletterSubmit(email);
13586
+ onNewsletterSubmit?.(email);
13522
13587
  },
13523
13588
  handleBackToTop: () => {
13524
13589
  onBackToTop ? onBackToTop() : window.scrollTo({
@@ -13526,8 +13591,11 @@ const Footer = React.forwardRef((({brand: brand, brandLogo: brandLogo, brandDes
13526
13591
  behavior: "smooth"
13527
13592
  });
13528
13593
  },
13594
+ // Pass-through state
13529
13595
  socialLinks: socialLinks,
13530
- showNewsletter: showNewsletter
13596
+ showNewsletter: showNewsletter,
13597
+ showBackToTop: showBackToTop,
13598
+ showDivider: showDivider
13531
13599
  };
13532
13600
  }({
13533
13601
  layout: layout,
@@ -13536,73 +13604,19 @@ const Footer = React.forwardRef((({brand: brand, brandLogo: brandLogo, brandDes
13536
13604
  sticky: sticky,
13537
13605
  showNewsletter: showNewsletter,
13538
13606
  showBackToTop: showBackToTop,
13607
+ showDivider: showDivider,
13539
13608
  socialLinks: socialLinks,
13540
13609
  onNewsletterSubmit: onNewsletterSubmit,
13541
13610
  onBackToTop: onBackToTop,
13611
+ glass: Boolean(glass),
13542
13612
  className: className
13543
- }), columnSizes = (() => {
13544
- switch (layout) {
13545
- case "columns":
13546
- default:
13547
- return {
13548
- brand: 4,
13549
- content: showNewsletter ? 4 : 8,
13550
- newsletter: showNewsletter ? 4 : 0
13551
- };
13552
-
13553
- case "centered":
13554
- case "minimal":
13555
- case "stacked":
13556
- // For stacked layout, everything takes full width but stacked vertically
13557
- return {
13558
- brand: 12,
13559
- content: 12,
13560
- newsletter: showNewsletter ? 12 : 0
13561
- };
13562
-
13563
- case "flexible":
13564
- // For flexible layout, adjust based on content
13565
- return {
13566
- brand: "auto",
13567
- content: "auto",
13568
- newsletter: "auto"
13569
- };
13570
-
13571
- case "sidebar":
13572
- // For sidebar layout, brand on left, content and newsletter on right
13573
- return {
13574
- brand: 3,
13575
- content: 9,
13576
- newsletter: showNewsletter ? 9 : 0
13577
- };
13578
-
13579
- case "wide":
13580
- // For wide layout, content takes more space
13581
- return {
13582
- brand: 3,
13583
- content: 6,
13584
- newsletter: showNewsletter ? 3 : 0
13585
- };
13586
- }
13587
- })(), getResponsiveColumnProps = columnType => {
13588
- const baseMd = "columns" === layout || "sidebar" === layout || "wide" === layout ? columnSizes[columnType] : 12;
13589
- // For flexible layout, we want auto-sizing
13590
- return "flexible" === layout && "auto" === columnSizes[columnType] ? {
13591
- xs: 12,
13592
- sm: !0,
13593
- md: !0
13594
- } : {
13595
- xs: 12,
13596
- md: baseMd
13597
- };
13598
- // For other layouts, we use specific sizes
13599
- }, footerContent = jsxRuntime.jsxs("div", {
13613
+ }), footerContent = jsxRuntime.jsxs("div", {
13600
13614
  className: containerClass,
13601
13615
  children: [ jsxRuntime.jsxs(Grid, {
13602
13616
  className: sectionsClass,
13603
13617
  alignItems: "start",
13604
13618
  justifyContent: "centered" === layout ? "center" : void 0,
13605
- children: [ (brand || brandLogo || brandDescription) && jsxRuntime.jsxs(GridCol, {
13619
+ children: [ brand || brandLogo || brandDescription ? jsxRuntime.jsxs(GridCol, {
13606
13620
  ...getResponsiveColumnProps("brand"),
13607
13621
  className: brandClass,
13608
13622
  children: [ brandLogo && jsxRuntime.jsx("div", {
@@ -13630,19 +13644,17 @@ const Footer = React.forwardRef((({brand: brand, brandLogo: brandLogo, brandDes
13630
13644
  size: size
13631
13645
  }, `${link.platform}-${index}`)))
13632
13646
  }) ]
13633
- }), children && jsxRuntime.jsx(GridCol, {
13647
+ }) : null, children ? jsxRuntime.jsx(GridCol, {
13634
13648
  ...getResponsiveColumnProps("content"),
13635
13649
  className: "c-footer__content",
13636
13650
  children: jsxRuntime.jsx(Grid, {
13637
13651
  className: "c-footer__sections",
13638
13652
  alignItems: "centered" === layout || "stacked" === layout ? "center" : void 0,
13639
- children: React__default.default.Children.map(children, (child =>
13640
- // Check if the child is a valid React element
13641
- React__default.default.isValidElement(child) ? React__default.default.cloneElement(child, {
13653
+ children: React__default.default.Children.map(children, (child => React__default.default.isValidElement(child) ? React__default.default.cloneElement(child, {
13642
13654
  showNewsletter: showNewsletter
13643
13655
  }) : child))
13644
13656
  })
13645
- }), showNewsletter && jsxRuntime.jsxs(GridCol, {
13657
+ }) : null, showNewsletter ? jsxRuntime.jsxs(GridCol, {
13646
13658
  ...getResponsiveColumnProps("newsletter"),
13647
13659
  className: "c-footer__newsletter",
13648
13660
  children: [ jsxRuntime.jsx("h4", {
@@ -13673,32 +13685,41 @@ const Footer = React.forwardRef((({brand: brand, brandLogo: brandLogo, brandDes
13673
13685
  }) ]
13674
13686
  })
13675
13687
  }) ]
13676
- }) ]
13677
- }), (copyright || showBackToTop) && jsxRuntime.jsxs("div", {
13678
- className: bottomClass,
13679
- children: [ copyright && jsxRuntime.jsx("div", {
13680
- className: "c-footer__copyright",
13681
- children: copyright
13682
- }), showBackToTop && jsxRuntime.jsxs(Button, {
13683
- variant: "ghost",
13684
- className: "c-footer__back-to-top",
13685
- onClick: handleBackToTop,
13686
- disabled: disabled,
13687
- "aria-label": backToTopText,
13688
- children: [ jsxRuntime.jsx("span", {
13689
- className: "c-footer__back-to-top-icon",
13690
- children: "↑"
13691
- }), jsxRuntime.jsx("span", {
13692
- className: "c-footer__back-to-top-text",
13693
- children: backToTopText
13688
+ }) : null ]
13689
+ }), copyright || showBackToTop ? jsxRuntime.jsxs(jsxRuntime.Fragment, {
13690
+ children: [ showDivider && jsxRuntime.jsx("hr", {
13691
+ className: "c-footer__divider"
13692
+ }), jsxRuntime.jsxs("div", {
13693
+ className: bottomClass,
13694
+ children: [ copyright && jsxRuntime.jsx("div", {
13695
+ className: "c-footer__copyright",
13696
+ children: copyright
13697
+ }), showBackToTop && jsxRuntime.jsxs(Button, {
13698
+ variant: "ghost",
13699
+ className: "c-footer__back-to-top",
13700
+ onClick: handleBackToTop,
13701
+ disabled: disabled,
13702
+ "aria-label": backToTopText,
13703
+ children: [ jsxRuntime.jsx("span", {
13704
+ className: "c-footer__back-to-top-icon",
13705
+ children: "↑"
13706
+ }), jsxRuntime.jsx("span", {
13707
+ className: "c-footer__back-to-top-text",
13708
+ children: backToTopText
13709
+ }) ]
13694
13710
  }) ]
13695
13711
  }) ]
13696
- }) ]
13712
+ }) : null ]
13697
13713
  });
13698
- // Calculate grid column sizes based on layout
13699
- return jsxRuntime.jsx("footer", {
13714
+ // ──────────────────────────────────────────
13715
+ // Render helpers
13716
+ // ──────────────────────────────────────────
13717
+ // ──────────────────────────────────────────
13718
+ // Root element
13719
+ // ──────────────────────────────────────────
13720
+ return jsxRuntime.jsx("footer", {
13700
13721
  ref: ref,
13701
- className: footerClass + " c-footer " + (glass ? "c-footer--glass" : ""),
13722
+ className: footerClass,
13702
13723
  ...props,
13703
13724
  children: glass ? jsxRuntime.jsx(AtomixGlass, {
13704
13725
  ...glass,
@@ -13946,7 +13967,7 @@ var layouts = Object.freeze({
13946
13967
  * </FooterSection>
13947
13968
  * ```
13948
13969
  */ const FooterSection = React.forwardRef((({title: title, icon: icon, collapsible: collapsible = !1, defaultCollapsed: defaultCollapsed = !1, showNewsletter: showNewsletter = !1, children: children, className: className = "", ...props}, ref) => {
13949
- const [isCollapsed, setIsCollapsed] = React__default.default.useState(defaultCollapsed), sectionClass = [ "c-footer__section", collapsible && "c-footer__section--collapsible", isCollapsed && "c-footer__section--collapsed", className ].filter(Boolean).join(" ");
13970
+ const [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed), sectionId = title ? `footer-section-${title.toString().toLowerCase().replace(/\s+/g, "-")}` : void 0, sectionClass = [ "c-footer__section", collapsible && "c-footer__section--collapsible", isCollapsed && "c-footer__section--collapsed", className ].filter(Boolean).join(" ");
13950
13971
  return jsxRuntime.jsx(GridCol, {
13951
13972
  xs: 12,
13952
13973
  md: showNewsletter ? 6 : 3,
@@ -13955,16 +13976,16 @@ var layouts = Object.freeze({
13955
13976
  ref: ref,
13956
13977
  className: sectionClass,
13957
13978
  ...props,
13958
- children: [ title && jsxRuntime.jsx("div", {
13979
+ children: [ title ? collapsible ? jsxRuntime.jsx("div", {
13959
13980
  className: "c-footer__section-header",
13960
- children: collapsible ? jsxRuntime.jsxs("button", {
13981
+ children: jsxRuntime.jsxs("button", {
13961
13982
  type: "button",
13962
13983
  className: "c-footer__section-toggle",
13963
13984
  onClick: () => {
13964
- collapsible && setIsCollapsed(!isCollapsed);
13985
+ collapsible && setIsCollapsed((prev => !prev));
13965
13986
  },
13966
13987
  "aria-expanded": !isCollapsed,
13967
- "aria-controls": `footer-section-${title.toString().toLowerCase().replace(/\s+/g, "-")}`,
13988
+ "aria-controls": sectionId,
13968
13989
  children: [ icon && jsxRuntime.jsx("span", {
13969
13990
  className: "c-footer__section-icon",
13970
13991
  children: icon
@@ -13975,7 +13996,10 @@ var layouts = Object.freeze({
13975
13996
  className: "c-footer__section-chevron",
13976
13997
  children: isCollapsed ? "▼" : "▲"
13977
13998
  }) ]
13978
- }) : jsxRuntime.jsxs("div", {
13999
+ })
14000
+ }) : jsxRuntime.jsx("div", {
14001
+ className: "c-footer__section-header",
14002
+ children: jsxRuntime.jsxs("div", {
13979
14003
  className: "c-footer__section-header-content",
13980
14004
  children: [ icon && jsxRuntime.jsx("span", {
13981
14005
  className: "c-footer__section-icon",
@@ -13985,12 +14009,9 @@ var layouts = Object.freeze({
13985
14009
  children: title
13986
14010
  }) ]
13987
14011
  })
13988
- }), jsxRuntime.jsx("div", {
14012
+ }) : null, jsxRuntime.jsx("div", {
13989
14013
  className: "c-footer__section-content",
13990
- id: title ? `footer-section-${title.toString().toLowerCase().replace(/\s+/g, "-")}` : void 0,
13991
- style: {
13992
- display: collapsible && isCollapsed ? "none" : "flex"
13993
- },
14014
+ id: sectionId,
13994
14015
  children: children
13995
14016
  }) ]
13996
14017
  })
@@ -14009,8 +14030,8 @@ FooterSection.displayName = "FooterSection";
14009
14030
  * </FooterLink>
14010
14031
  * ```
14011
14032
  */
14012
- const FooterLink = React.forwardRef((({href: href, icon: icon, external: external = !1, active: active = !1, disabled: disabled = !1, onClick: onClick, children: children, className: className = "", LinkComponent: LinkComponent, ...props}, ref) => {
14013
- const linkProps = {
14033
+ const FooterLink = React.forwardRef((({href: href, icon: icon, external: external = !1, active: active = !1, disabled: disabled = !1, onClick: onClick, children: children, className: className = "", linkComponent: linkComponent, ...props}, ref) => {
14034
+ const sharedProps = {
14014
14035
  className: [ "c-footer__link", active && "c-footer__link--active", disabled && "c-footer__link--disabled", className ].filter(Boolean).join(" "),
14015
14036
  onClick: disabled ? void 0 : onClick,
14016
14037
  "aria-disabled": disabled,
@@ -14019,35 +14040,7 @@ const FooterLink = React.forwardRef((({href: href, icon: icon, external: extern
14019
14040
  rel: "noopener noreferrer"
14020
14041
  },
14021
14042
  ...props
14022
- };
14023
- if (LinkComponent) {
14024
- const Component = LinkComponent, componentProps = {
14025
- ref: ref,
14026
- ...href && !disabled ? {
14027
- href: href,
14028
- to: href
14029
- } : {},
14030
- ...linkProps
14031
- };
14032
- // Only pass href/to if the link is not disabled and href exists
14033
- return jsxRuntime.jsxs(Component, {
14034
- ...componentProps,
14035
- children: [ icon && jsxRuntime.jsx("span", {
14036
- className: "c-footer__link-icon",
14037
- children: icon
14038
- }), jsxRuntime.jsx("span", {
14039
- className: "c-footer__link-text",
14040
- children: children
14041
- }), external && jsxRuntime.jsx("span", {
14042
- className: "c-footer__link-external",
14043
- children: "↗"
14044
- }) ]
14045
- });
14046
- }
14047
- return jsxRuntime.jsxs("a", {
14048
- ref: ref,
14049
- href: disabled ? void 0 : href,
14050
- ...linkProps,
14043
+ }, linkContent = jsxRuntime.jsxs(jsxRuntime.Fragment, {
14051
14044
  children: [ icon && jsxRuntime.jsx("span", {
14052
14045
  className: "c-footer__link-icon",
14053
14046
  children: icon
@@ -14059,11 +14052,37 @@ const FooterLink = React.forwardRef((({href: href, icon: icon, external: extern
14059
14052
  children: "↗"
14060
14053
  }) ]
14061
14054
  });
14055
+ if (linkComponent) {
14056
+ const Component = linkComponent;
14057
+ return jsxRuntime.jsx(Component, {
14058
+ ref: ref,
14059
+ ...href && !disabled ? {
14060
+ href: href,
14061
+ to: href
14062
+ } : {},
14063
+ ...sharedProps,
14064
+ children: linkContent
14065
+ });
14066
+ }
14067
+ return jsxRuntime.jsx("a", {
14068
+ ref: ref,
14069
+ href: disabled ? void 0 : href,
14070
+ ...sharedProps,
14071
+ children: linkContent
14072
+ });
14062
14073
  }));
14063
14074
 
14064
14075
  FooterLink.displayName = "FooterLink";
14065
14076
 
14066
- const Hero = ({title: title, subtitle: subtitle, text: text, imageSrc: imageSrc, imageAlt: imageAlt = "Hero image", alignment: alignment = "left", backgroundImageSrc: backgroundImageSrc, showOverlay: showOverlay = !0, fullViewportHeight: fullViewportHeight = !1, actions: actions, imageColSize: imageColSize = 7, imageColClassName: imageColClassName, imageColStyle: imageColStyle, contentColSize: contentColSize = 5, contentColClassName: contentColClassName, contentColStyle: contentColStyle, contentWidth: contentWidth, className: className = "", style: style, parallax: parallax = !1, parallaxIntensity: parallaxIntensity = .5, videoBackground: videoBackground, children: children, glass: glass, videoOptions: videoOptions = {
14077
+ const HERO_DEFAULT_GLASS_PROPS = {
14078
+ displacementScale: 60,
14079
+ blurAmount: 3,
14080
+ saturation: 180,
14081
+ aberrationIntensity: 0,
14082
+ borderRadius: 8,
14083
+ overLight: !1,
14084
+ mode: "standard"
14085
+ }, Hero = ({title: title, subtitle: subtitle, text: text, imageSrc: imageSrc, imageAlt: imageAlt = "Hero image", alignment: alignment = "left", backgroundImageSrc: backgroundImageSrc, showOverlay: showOverlay = !0, fullViewportHeight: fullViewportHeight = !1, actions: actions, imageColSize: imageColSize = 7, imageColClassName: imageColClassName, imageColStyle: imageColStyle, contentColSize: contentColSize = 5, contentColClassName: contentColClassName, contentColStyle: contentColStyle, contentWidth: contentWidth, className: className = "", style: style, parallax: parallax = !1, parallaxIntensity: parallaxIntensity = .5, videoBackground: videoBackground, children: children, glass: glass, videoOptions: videoOptions = {
14067
14086
  autoplay: !0,
14068
14087
  loop: !0,
14069
14088
  muted: !0
@@ -14106,9 +14125,8 @@ const Hero = ({title: title, subtitle: subtitle, text: text, imageSrc: imageSrc,
14106
14125
  }), "Your browser does not support the video tag." ]
14107
14126
  });
14108
14127
  }, renderContent = () => {
14109
- const content = jsxRuntime.jsxs("div", {
14110
- className: `${HERO.SELECTORS.CONTENT.replace(".", "")} ${parts?.content?.className || ""}`.trim(),
14111
- style: parts?.content?.style,
14128
+ // Build inner content elements ONCE — no duplication
14129
+ const innerElements = jsxRuntime.jsxs(jsxRuntime.Fragment, {
14112
14130
  children: [ subtitle && jsxRuntime.jsx("p", {
14113
14131
  className: `${HERO.SELECTORS.SUBTITLE.replace(".", "")} ${parts?.subtitle?.className || ""}`.trim(),
14114
14132
  style: parts?.subtitle?.style,
@@ -14126,71 +14144,25 @@ const Hero = ({title: title, subtitle: subtitle, text: text, imageSrc: imageSrc,
14126
14144
  style: parts?.actions?.style,
14127
14145
  children: actions
14128
14146
  }) ]
14129
- });
14130
- // If glass is explicitly set to false, don't apply glass effect
14131
- return !1 === glass ? content :
14132
- // If glass is true or an object, apply glass effect
14133
- glass ?
14134
- // If glass is true, use default glass props
14135
- !0 === glass ? jsxRuntime.jsx("div", {
14136
- className: `${HERO.SELECTORS.CONTENT.replace(".", "")} ${parts?.content?.className || ""}`.trim(),
14137
- style: parts?.content?.style,
14138
- children: jsxRuntime.jsx(AtomixGlass, {
14139
- displacementScale: 60,
14140
- blurAmount: 3,
14141
- saturation: 180,
14142
- aberrationIntensity: 0,
14143
- borderRadius: 8,
14144
- overLight: !1,
14145
- mode: "standard",
14146
- children: jsxRuntime.jsxs("div", {
14147
+ }), contentBody = glass ? (() => {
14148
+ const glassProps = !0 === glass ? HERO_DEFAULT_GLASS_PROPS : {
14149
+ ...HERO_DEFAULT_GLASS_PROPS,
14150
+ ...glass
14151
+ };
14152
+ return jsxRuntime.jsx(AtomixGlass, {
14153
+ ...glassProps,
14154
+ children: jsxRuntime.jsx("div", {
14147
14155
  className: "u-p-4",
14148
- children: [ subtitle && jsxRuntime.jsx("p", {
14149
- className: `${HERO.SELECTORS.SUBTITLE.replace(".", "")} ${parts?.subtitle?.className || ""}`.trim(),
14150
- style: parts?.subtitle?.style,
14151
- children: subtitle
14152
- }), jsxRuntime.jsx(HeadingTag, {
14153
- className: `${HERO.SELECTORS.TITLE.replace(".", "")} ${parts?.title?.className || ""}`.trim(),
14154
- style: parts?.title?.style,
14155
- children: title
14156
- }), text && jsxRuntime.jsx("p", {
14157
- className: `${HERO.SELECTORS.TEXT.replace(".", "")} ${parts?.text?.className || ""}`.trim(),
14158
- style: parts?.text?.style,
14159
- children: text
14160
- }), actions && jsxRuntime.jsx("div", {
14161
- className: `${HERO.SELECTORS.ACTIONS.replace(".", "")} ${parts?.actions?.className || ""}`.trim(),
14162
- style: parts?.actions?.style,
14163
- children: actions
14164
- }) ]
14156
+ children: innerElements
14165
14157
  })
14166
- })
14167
- }) : jsxRuntime.jsx("div", {
14158
+ });
14159
+ })() : innerElements;
14160
+ // Conditionally wrap with AtomixGlass using the standard glass prop pattern
14161
+ return jsxRuntime.jsx("div", {
14168
14162
  className: `${HERO.SELECTORS.CONTENT.replace(".", "")} ${parts?.content?.className || ""}`.trim(),
14169
14163
  style: parts?.content?.style,
14170
- children: jsxRuntime.jsx(AtomixGlass, {
14171
- ...glass,
14172
- children: jsxRuntime.jsxs("div", {
14173
- className: "u-p-4",
14174
- children: [ subtitle && jsxRuntime.jsx("p", {
14175
- className: `${HERO.SELECTORS.SUBTITLE.replace(".", "")} ${parts?.subtitle?.className || ""}`.trim(),
14176
- style: parts?.subtitle?.style,
14177
- children: subtitle
14178
- }), jsxRuntime.jsx(HeadingTag, {
14179
- className: `${HERO.SELECTORS.TITLE.replace(".", "")} ${parts?.title?.className || ""}`.trim(),
14180
- style: parts?.title?.style,
14181
- children: title
14182
- }), text && jsxRuntime.jsx("p", {
14183
- className: `${HERO.SELECTORS.TEXT.replace(".", "")} ${parts?.text?.className || ""}`.trim(),
14184
- style: parts?.text?.style,
14185
- children: text
14186
- }), actions && jsxRuntime.jsx("div", {
14187
- className: `${HERO.SELECTORS.ACTIONS.replace(".", "")} ${parts?.actions?.className || ""}`.trim(),
14188
- style: parts?.actions?.style,
14189
- children: actions
14190
- }) ]
14191
- })
14192
- })
14193
- }) : content;
14164
+ children: contentBody
14165
+ });
14194
14166
  }, renderForegroundImage = () => hasForegroundImage ? "center" === alignment ? jsxRuntime.jsx("div", {
14195
14167
  className: `${HERO.SELECTORS.IMAGE_WRAPPER.replace(".", "")} ${imageColClassName || ""} ${parts?.imageWrapper?.className || ""}`.trim(),
14196
14168
  style: {
@@ -14341,35 +14313,24 @@ Hero.Title = ({children: children, className: className, level: level = "h1", ..
14341
14313
  ...props,
14342
14314
  children: children
14343
14315
  }), Hero.Content = ({children: children, className: className, style: style, glass: glass, ...props}) => {
14344
- const contentClass = `${HERO.SELECTORS.CONTENT.replace(".", "")} ${className || ""}`.trim();
14345
- if (glass) {
14346
- const glassProps = "boolean" == typeof glass ? {
14347
- displacementScale: 60,
14348
- blurAmount: 3,
14349
- saturation: 180,
14350
- aberrationIntensity: 0,
14351
- borderRadius: 8,
14352
- overLight: !1,
14353
- mode: "standard"
14354
- } : glass;
14355
- return jsxRuntime.jsx("div", {
14356
- className: contentClass,
14357
- style: style,
14358
- ...props,
14359
- children: jsxRuntime.jsx(AtomixGlass, {
14360
- ...glassProps,
14361
- children: jsxRuntime.jsx("div", {
14362
- className: "u-p-4",
14363
- children: children
14364
- })
14365
- })
14316
+ const contentClass = `${HERO.SELECTORS.CONTENT.replace(".", "")} ${className || ""}`.trim(), innerContent = glass ? jsxRuntime.jsx("div", {
14317
+ className: "u-p-4",
14318
+ children: children
14319
+ }) : children, wrappedContent = glass ? (() => {
14320
+ const glassProps = !0 === glass ? HERO_DEFAULT_GLASS_PROPS : {
14321
+ ...HERO_DEFAULT_GLASS_PROPS,
14322
+ ...glass
14323
+ };
14324
+ return jsxRuntime.jsx(AtomixGlass, {
14325
+ ...glassProps,
14326
+ children: innerContent
14366
14327
  });
14367
- }
14328
+ })() : innerContent;
14368
14329
  return jsxRuntime.jsx("div", {
14369
14330
  className: contentClass,
14370
14331
  style: style,
14371
14332
  ...props,
14372
- children: children
14333
+ children: wrappedContent
14373
14334
  });
14374
14335
  }, Hero.Image = ({src: src, alt: alt = "", className: className, wrapperClassName: wrapperClassName, wrapperStyle: wrapperStyle, ...props}) => jsxRuntime.jsx("div", {
14375
14336
  className: `${HERO.SELECTORS.IMAGE_WRAPPER.replace(".", "")} ${wrapperClassName || ""}`.trim(),
@@ -14912,7 +14873,7 @@ function setRef(ref, value) {
14912
14873
  * ```
14913
14874
  */ Nav.displayName = "Nav";
14914
14875
 
14915
- const NavItem = React.forwardRef((({children: children, dropdown: dropdown = !1, megaMenu: megaMenu = !1, active: active = !1, href: href, onClick: onClick, className: className = "", disabled: disabled = !1, "aria-expanded": ariaExpanded, LinkComponent: LinkComponent}, ref) => {
14876
+ const NavItem = React.forwardRef((({children: children, dropdown: dropdown = !1, megaMenu: megaMenu = !1, active: active = !1, href: href, target: target, onClick: onClick, className: className = "", disabled: disabled = !1, "aria-expanded": ariaExpanded, linkComponent: linkComponent}, ref) => {
14916
14877
  const {generateNavItemClass: generateNavItemClass, generateNavLinkClass: generateNavLinkClass, handleClick: handleClick} = useNavItem({
14917
14878
  dropdown: dropdown,
14918
14879
  megaMenu: megaMenu,
@@ -14952,6 +14913,7 @@ const NavItem = React.forwardRef((({children: children, dropdown: dropdown = !1
14952
14913
  ref: combinedRef,
14953
14914
  href: href || "#",
14954
14915
  to: href || "#",
14916
+ target: target,
14955
14917
  className: navLinkClass,
14956
14918
  onClick: dropdown || megaMenu ? e => {
14957
14919
  (dropdown || megaMenu) && (e.preventDefault(), setIsActive(!isActive));
@@ -14964,8 +14926,8 @@ const NavItem = React.forwardRef((({children: children, dropdown: dropdown = !1
14964
14926
  className: navItemClass,
14965
14927
  role: "menuitem",
14966
14928
  "aria-haspopup": dropdown || megaMenu,
14967
- children: [ LinkComponent ? (() => {
14968
- const Component = LinkComponent;
14929
+ children: [ linkComponent ? (() => {
14930
+ const Component = linkComponent;
14969
14931
  return jsxRuntime.jsx(Component, {
14970
14932
  ...linkProps,
14971
14933
  children: dropdown || megaMenu ? childContent[0] : children
@@ -15151,7 +15113,7 @@ SideMenuList.displayName = "SideMenuList";
15151
15113
  *
15152
15114
  * // With icon and custom link component
15153
15115
  * import Link from 'next/link';
15154
- * <SideMenuItem href="/settings" icon={<Icon name="Settings" />} LinkComponent={Link}>
15116
+ * <SideMenuItem href="/settings" icon={<Icon name="Settings" />} linkComponent={Link}>
15155
15117
  * Settings
15156
15118
  * </SideMenuItem>
15157
15119
  *
@@ -15166,7 +15128,7 @@ SideMenuList.displayName = "SideMenuList";
15166
15128
  * </SideMenuItem>
15167
15129
  * ```
15168
15130
  */
15169
- const SideMenuItem = React.forwardRef((({children: children, href: href, onClick: onClick, active: active = !1, disabled: disabled = !1, icon: icon, className: className = "", target: target, rel: rel, LinkComponent: LinkComponentProp}, ref) => {
15131
+ const SideMenuItem = React.forwardRef((({children: children, href: href, onClick: onClick, active: active = !1, disabled: disabled = !1, icon: icon, className: className = "", target: target, rel: rel, linkComponent: linkComponentProp}, ref) => {
15170
15132
  const {generateSideMenuItemClass: generateSideMenuItemClass, handleClick: handleClick} = useSideMenuItem({
15171
15133
  active: active,
15172
15134
  disabled: disabled,
@@ -15174,8 +15136,8 @@ const SideMenuItem = React.forwardRef((({children: children, href: href, onClic
15174
15136
  }), itemClass = generateSideMenuItemClass();
15175
15137
  // Render as link if href is provided
15176
15138
  if (href) {
15177
- if (LinkComponentProp) {
15178
- const LinkComp = LinkComponentProp, linkProps = {
15139
+ if (linkComponentProp) {
15140
+ const LinkComp = linkComponentProp, linkProps = {
15179
15141
  ref: ref,
15180
15142
  className: itemClass,
15181
15143
  onClick: disabled ? e => {
@@ -15261,7 +15223,7 @@ SideMenuItem.displayName = "SideMenuItem";
15261
15223
  * </SideMenu>
15262
15224
  * ```
15263
15225
  */
15264
- const SideMenu = React.forwardRef((({title: title, children: children, menuItems: menuItems = [], isOpen: isOpen, onToggle: onToggle, collapsible: collapsible = !0, collapsibleDesktop: collapsibleDesktop = !1, defaultCollapsedDesktop: defaultCollapsedDesktop = !1, className: className = "", style: style, disabled: disabled = !1, toggleIcon: toggleIcon, id: id, glass: glass, LinkComponent: LinkComponent}, ref) => {
15226
+ const SideMenu = React.forwardRef((({title: title, children: children, menuItems: menuItems = [], isOpen: isOpen, onToggle: onToggle, collapsible: collapsible = !0, collapsibleDesktop: collapsibleDesktop = !1, defaultCollapsedDesktop: defaultCollapsedDesktop = !1, className: className = "", style: style, disabled: disabled = !1, toggleIcon: toggleIcon, id: id, glass: glass, linkComponent: linkComponent}, ref) => {
15265
15227
  const {isOpenState: isOpenState, wrapperRef: wrapperRef, innerRef: innerRef, sideMenuRef: sideMenuRef, generateSideMenuClass: generateSideMenuClass, generateWrapperClass: generateWrapperClass, handleToggle: handleToggle} = useSideMenu({
15266
15228
  isOpen: isOpen,
15267
15229
  onToggle: onToggle,
@@ -15415,7 +15377,7 @@ const SideMenu = React.forwardRef((({title: title, children: children, menuItem
15415
15377
  active: subItem.active,
15416
15378
  disabled: subItem.disabled,
15417
15379
  icon: subItem.icon,
15418
- LinkComponent: LinkComponent,
15380
+ linkComponent: linkComponent,
15419
15381
  children: subItem.title
15420
15382
  }, subIndex)))
15421
15383
  })
@@ -15482,31 +15444,43 @@ const Menu = React.forwardRef((({children: children, className: className = "",
15482
15444
 
15483
15445
  Menu.displayName = "Menu";
15484
15446
 
15485
- const MenuItem = React.forwardRef((({children: children, href: href = "#", icon: icon, active: active = !1, disabled: disabled = !1, onClick: onClick, className: className = ""}, ref) => {
15486
- const itemClass = `c-menu__item ${active ? "is-active" : ""} ${disabled ? "is-disabled" : ""} ${className}`;
15447
+ const MenuItem = React.forwardRef((({children: children, href: href = "#", target: target, linkComponent: linkComponent, icon: icon, active: active = !1, disabled: disabled = !1, onClick: onClick, className: className = ""}, ref) => {
15448
+ const itemClass = `c-menu__item ${active ? "is-active" : ""} ${disabled ? "is-disabled" : ""} ${className}`, linkProps = {
15449
+ href: href,
15450
+ to: href,
15451
+ target: target,
15452
+ className: "c-menu__link",
15453
+ onClick: e => {
15454
+ disabled ? e.preventDefault() : onClick && onClick();
15455
+ },
15456
+ "aria-disabled": disabled,
15457
+ "aria-current": active ? "page" : void 0
15458
+ }, content = jsxRuntime.jsxs(jsxRuntime.Fragment, {
15459
+ children: [ icon && ("string" == typeof icon ? icon.startsWith("c-icon-") ? jsxRuntime.jsx(Icon, {
15460
+ name: mapIconName(icon.replace("c-icon-", "")),
15461
+ size: "sm",
15462
+ className: "c-menu__icon"
15463
+ }) : jsxRuntime.jsx("i", {
15464
+ className: `c-menu__icon ${icon}`,
15465
+ children: "string" != typeof icon && icon
15466
+ }) : jsxRuntime.jsx("span", {
15467
+ className: "c-menu__icon",
15468
+ children: icon
15469
+ })), children ]
15470
+ });
15487
15471
  return jsxRuntime.jsx("li", {
15488
15472
  ref: ref,
15489
15473
  className: itemClass,
15490
15474
  role: "menuitem",
15491
- children: jsxRuntime.jsxs("a", {
15492
- href: href,
15493
- className: "c-menu__link",
15494
- onClick: e => {
15495
- disabled ? e.preventDefault() : onClick && onClick();
15496
- },
15497
- "aria-disabled": disabled,
15498
- "aria-current": active ? "page" : void 0,
15499
- children: [ icon && ("string" == typeof icon ? icon.startsWith("c-icon-") ? jsxRuntime.jsx(Icon, {
15500
- name: mapIconName(icon.replace("c-icon-", "")),
15501
- size: "sm",
15502
- className: "c-menu__icon"
15503
- }) : jsxRuntime.jsx("i", {
15504
- className: `c-menu__icon ${icon}`,
15505
- children: "string" != typeof icon && icon
15506
- }) : jsxRuntime.jsx("span", {
15507
- className: "c-menu__icon",
15508
- children: icon
15509
- })), children ]
15475
+ children: linkComponent ? (() => {
15476
+ const Component = linkComponent;
15477
+ return jsxRuntime.jsx(Component, {
15478
+ ...linkProps,
15479
+ children: content
15480
+ });
15481
+ })() : jsxRuntime.jsx("a", {
15482
+ ...linkProps,
15483
+ children: content
15510
15484
  })
15511
15485
  });
15512
15486
  }));
@@ -15607,16 +15581,30 @@ const MegaMenuColumn = React.forwardRef((({title: title, icon: icon, children:
15607
15581
 
15608
15582
  MegaMenuColumn.displayName = "MegaMenuColumn";
15609
15583
 
15610
- const MegaMenuLink = React.forwardRef((({href: href, children: children, className: className = "", disabled: disabled = !1, onClick: onClick}, ref) => jsxRuntime.jsx("a", {
15611
- ref: ref,
15612
- href: href,
15613
- className: `c-menu__subitem-link ${disabled ? "is-disabled" : ""} ${className}`,
15614
- onClick: e => {
15615
- disabled ? e.preventDefault() : onClick && onClick();
15616
- },
15617
- "aria-disabled": disabled,
15618
- children: children
15619
- })));
15584
+ const MegaMenuLink = React.forwardRef((({href: href, target: target, linkComponent: linkComponent, children: children, className: className = "", disabled: disabled = !1, onClick: onClick}, ref) => {
15585
+ const linkProps = {
15586
+ ref: ref,
15587
+ href: href,
15588
+ to: href,
15589
+ target: target,
15590
+ className: `c-menu__subitem-link ${disabled ? "is-disabled" : ""} ${className}`,
15591
+ onClick: e => {
15592
+ disabled ? e.preventDefault() : onClick && onClick();
15593
+ },
15594
+ "aria-disabled": disabled
15595
+ };
15596
+ if (linkComponent) {
15597
+ const Component = linkComponent;
15598
+ return jsxRuntime.jsx(Component, {
15599
+ ...linkProps,
15600
+ children: children
15601
+ });
15602
+ }
15603
+ return jsxRuntime.jsx("a", {
15604
+ ...linkProps,
15605
+ children: children
15606
+ });
15607
+ }));
15620
15608
 
15621
15609
  MegaMenuLink.displayName = "MegaMenuLink";
15622
15610
 
@@ -17599,8 +17587,8 @@ const SectionIntro = ({title: title, label: label, text: text, actions: actions,
17599
17587
  SectionIntro.displayName = "SectionIntro";
17600
17588
 
17601
17589
  const Slider = React.forwardRef(((props, ref) => {
17602
- const {slides: slides = [], height: height = 300, width: width = "100%", slidesToShow: slidesToShow = 1, spaceBetween: spaceBetween = 0, loop: loop = !1, initialSlide: initialSlide = 0, direction: direction = "horizontal", speed: speed = 300, allowTouchMove: allowTouchMove = !0, threshold: threshold = 50, grabCursor: grabCursor = !0, autoplay: autoplay, navigation: navigation, pagination: pagination, className: className, style: style, onSlideChange: onSlideChange, ...rest} = props, slider = useSlider({
17603
- slides: slides || [],
17590
+ const {slides: slides = [], height: height = 300, width: width = "100%", slidesToShow: slidesToShow = 1, spaceBetween: spaceBetween = 0, loop: loop = !1, initialSlide: initialSlide = 0, direction: direction = "horizontal", speed: speed = 300, allowTouchMove: allowTouchMove = !0, threshold: threshold = 50, grabCursor: grabCursor = !0, autoplay: autoplay, navigation: navigation, pagination: pagination, className: className, style: style, onSlideChange: onSlideChange, ...rest} = props, validSlides = Array.isArray(slides) ? slides : [], slider = useSlider({
17591
+ slides: validSlides,
17604
17592
  slidesToShow: slidesToShow,
17605
17593
  spaceBetween: spaceBetween,
17606
17594
  loop: loop,
@@ -17612,8 +17600,8 @@ const Slider = React.forwardRef(((props, ref) => {
17612
17600
  autoplay: autoplay,
17613
17601
  onSlideChange: onSlideChange
17614
17602
  }), {containerRef: containerRef, wrapperRef: wrapperRef, allSlides: allSlides, realIndex: realIndex, translateValue: translateValue, slideWidth: slideWidth, transitioning: transitioning, touching: touching, slideNext: slideNext, slidePrev: slidePrev, goToSlide: goToSlide, canSlideNext: canSlideNext, canSlidePrev: canSlidePrev, handleTouchStart: handleTouchStart, handleTouchMove: handleTouchMove, handleTouchEnd: handleTouchEnd, loopedSlides: loopedSlides} = slider, totalWrapperWidth = React.useMemo((() => 0 === slideWidth ? 0 : allSlides.length * (slideWidth + spaceBetween) - spaceBetween), [ allSlides.length, slideWidth, spaceBetween ]);
17615
- // Hooks must be called unconditionally - before early return
17616
- if (!slides || 0 === slides.length) return jsxRuntime.jsx("div", {
17603
+ // Ensure slides is an array to prevent .map errors
17604
+ if (0 === validSlides.length) return jsxRuntime.jsx("div", {
17617
17605
  className: "c-slider c-slider--empty",
17618
17606
  style: {
17619
17607
  height: height,
@@ -17657,7 +17645,7 @@ const Slider = React.forwardRef(((props, ref) => {
17657
17645
  willChange: "transform"
17658
17646
  },
17659
17647
  children: allSlides.map(((slide, index) => jsxRuntime.jsxs("div", {
17660
- className: [ "c-slider__slide", (loop ? index % slides.length === realIndex : index === realIndex) && "c-slider__slide--active", slide.isClone && "c-slider__slide--duplicate" ].filter(Boolean).join(" "),
17648
+ className: [ "c-slider__slide", (loop ? index % validSlides.length === realIndex : index === realIndex) && "c-slider__slide--active", slide.isClone && "c-slider__slide--duplicate" ].filter(Boolean).join(" "),
17661
17649
  style: {
17662
17650
  width: "vertical" === direction ? "100%" : `${slideWidth}px`,
17663
17651
  height: "vertical" === direction ? `${slideWidth}px` : "100%",
@@ -17719,7 +17707,7 @@ const Slider = React.forwardRef(((props, ref) => {
17719
17707
  }) ]
17720
17708
  }), pagination && jsxRuntime.jsx("div", {
17721
17709
  className: "c-slider__pagination",
17722
- children: slides.map(((_, index) => jsxRuntime.jsx("button", {
17710
+ children: validSlides.map(((_, index) => jsxRuntime.jsx("button", {
17723
17711
  type: "button",
17724
17712
  className: "c-slider__pagination-bullet " + (index === realIndex ? "c-slider__pagination-bullet--active" : ""),
17725
17713
  onClick: () => goToSlide(index),