@deriv-web-design/ui 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, HTMLAttributes, InputHTMLAttributes, MouseEvent } from 'react';
3
+ import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, HTMLAttributes, InputHTMLAttributes, MouseEvent, ComponentProps } from 'react';
4
+ import { DotLottieReact } from '@lottiefiles/dotlottie-react';
4
5
 
5
6
  type ButtonColorScheme = "coral" | "black" | "white";
6
7
  type ButtonVariant = "primary" | "secondary";
@@ -279,6 +280,26 @@ interface FeatureCardsProps {
279
280
 
280
281
  declare const FeatureCards: ({ sectionTitle, sectionDescription, showLink, linkText, onLinkClick, cardColorScheme, cards, }: FeatureCardsProps) => react_jsx_runtime.JSX.Element;
281
282
 
283
+ interface FeatureCardSecondaryItem {
284
+ title: string;
285
+ description: string;
286
+ icon?: ReactNode;
287
+ showIcon?: boolean;
288
+ showLink?: boolean;
289
+ linkText?: string;
290
+ onLinkClick?: () => void;
291
+ }
292
+ interface FeatureCardsSecondaryProps {
293
+ sectionTitle: string;
294
+ sectionDescription?: string;
295
+ showLink?: boolean;
296
+ linkText?: string;
297
+ onLinkClick?: () => void;
298
+ cards: FeatureCardSecondaryItem[];
299
+ }
300
+
301
+ declare const FeatureCardsSecondary: ({ sectionTitle, sectionDescription, showLink, linkText, onLinkClick, cards, }: FeatureCardsSecondaryProps) => react_jsx_runtime.JSX.Element;
302
+
282
303
  interface FooterLinkItem {
283
304
  /** Link label text */
284
305
  label: string;
@@ -387,7 +408,7 @@ interface FooterProps extends HTMLAttributes<HTMLElement> {
387
408
 
388
409
  declare const Footer: ({ logoSrc, logoAlt, navColumns, socialLinks, derivGo, investorsInPeopleSrc, investorsInPeopleAlt, licenseText, riskWarningText, aiSummary, className, ...props }: FooterProps) => react_jsx_runtime.JSX.Element;
389
410
 
390
- type HeroVariant = "homepage" | "full-image" | "visuals" | "text-only";
411
+ type HeroVariant = "split" | "centered" | "showcase" | "visuals" | "minimal";
391
412
  interface HeroButtonProps {
392
413
  /** Button label text */
393
414
  label: string;
@@ -399,10 +420,13 @@ interface HeroButtonProps {
399
420
  interface HeroProps extends HTMLAttributes<HTMLElement> {
400
421
  /**
401
422
  * Layout variant:
402
- * - "homepage" — dark bg, left-aligned text, right-side hero image, 100vh
403
- * - "full-image" — full background image, center-aligned text, 100vh
404
- * - "visuals" — light grey bg + SVG grid, center-aligned text, floating visuals, min-height 540px
405
- * - "text-only" — same as visuals but without floating graphics
423
+ *
424
+ * - "split" — dark bg, left-aligned text, right-side hero image, 100vh
425
+ * - "centered" — full background image, center-aligned text, 100vh
426
+ * - "showcase" — dark bg + full-bleed bg image, center-aligned text, large product image
427
+ * below buttons, smaller floating image below that.
428
+ * - "visuals" — light grey bg + SVG grid, center-aligned text, floating visuals, min-height 540px
429
+ * - "minimal" — same as visuals but without floating graphics
406
430
  */
407
431
  variant: HeroVariant;
408
432
  /** Optional eyebrow / subtitle above the title */
@@ -418,33 +442,44 @@ interface HeroProps extends HTMLAttributes<HTMLElement> {
418
442
  primaryButton?: HeroButtonProps;
419
443
  /**
420
444
  * Secondary CTA button (white outline).
421
- * Shown on Homepage and Full Image variants.
445
+ * Shown on Split, Centered and Showcase variants.
422
446
  */
423
447
  secondaryButton?: HeroButtonProps;
424
448
  /**
425
449
  * Background image URL.
426
- * - "homepage" — used as the full-bleed background behind the overlay
427
- * - "full-image" — used as the full-bleed background behind the overlay
450
+ * - "split" — used as the full-bleed background behind the overlay
451
+ * - "centered" — used as the full-bleed background behind the overlay
452
+ * - "showcase" — used as the full-bleed background behind the overlay
428
453
  */
429
454
  backgroundImageSrc?: string;
430
455
  /**
431
- * Right-side hero image for the Homepage variant.
456
+ * Right-side hero image for the Split variant.
432
457
  * Accepts a ReactNode (e.g. <img>) or an image URL string.
433
458
  */
434
459
  heroImage?: ReactNode | string;
435
460
  /**
436
- * Left floating visual for the Visuals variant (desktop only).
461
+ * Left floating visual for the Visuals variant.
437
462
  * Accepts a ReactNode or image URL string.
438
463
  */
439
464
  leftVisual?: ReactNode | string;
440
465
  /**
441
- * Right floating visual for the Visuals variant (desktop only).
466
+ * Right floating visual for the Visuals variant.
442
467
  * Accepts a ReactNode or image URL string.
443
468
  */
444
469
  rightVisual?: ReactNode | string;
470
+ /**
471
+ * Large product image shown centered below the CTA buttons in the Showcase variant.
472
+ * Accepts a ReactNode or image URL string.
473
+ */
474
+ productImage?: ReactNode | string;
475
+ /**
476
+ * Smaller floating image shown below the productImage in the Showcase variant.
477
+ * Accepts a ReactNode or image URL string.
478
+ */
479
+ floatingImage?: ReactNode | string;
445
480
  }
446
481
 
447
- declare const Hero: ({ variant, subtitle, title, description, primaryButton, secondaryButton, backgroundImageSrc, heroImage, leftVisual, rightVisual, className, ...props }: HeroProps) => react_jsx_runtime.JSX.Element;
482
+ declare const Hero: ({ variant, subtitle, title, description, primaryButton, secondaryButton, backgroundImageSrc, heroImage, leftVisual, rightVisual, productImage, floatingImage, className, ...props }: HeroProps) => react_jsx_runtime.JSX.Element;
448
483
 
449
484
  interface StatItem {
450
485
  /** Numeric or short display value, e.g. "2.5M+" */
@@ -482,8 +517,8 @@ interface StatsProps extends HTMLAttributes<HTMLElement> {
482
517
 
483
518
  declare const Stats: ({ title, description, stats, leftAwards, rightAwards, className, ...props }: StatsProps) => react_jsx_runtime.JSX.Element;
484
519
 
485
- interface ScrollytellingItem {
486
- /** Short market name, e.g. "Forex" */
520
+ interface FeatureScrollItem {
521
+ /** Short feature name, e.g. "Forex" */
487
522
  title: string;
488
523
  /** Body copy below the title */
489
524
  description: string;
@@ -501,14 +536,14 @@ interface ScrollytellingItem {
501
536
  /** URL to the .lottie file or any image asset (png, jpg, svg, webp…) */
502
537
  mediaUrl: string;
503
538
  }
504
- interface ScrollytellingProps extends HTMLAttributes<HTMLElement> {
539
+ interface FeatureScrollProps extends HTMLAttributes<HTMLElement> {
505
540
  /** Section heading rendered as an H2 */
506
541
  header: string;
507
542
  /**
508
- * Ordered list of market items.
509
- * Drives both the desktop scrollytelling and the mobile stacked layout.
543
+ * Ordered list of feature items.
544
+ * Drives both the desktop scroll-driven layout and the mobile stacked layout.
510
545
  */
511
- items: ScrollytellingItem[];
546
+ items: FeatureScrollItem[];
512
547
  /**
513
548
  * Controls which side the sticky media column sits on.
514
549
  * @default "media-right"
@@ -516,8 +551,24 @@ interface ScrollytellingProps extends HTMLAttributes<HTMLElement> {
516
551
  variant?: "media-left" | "media-right";
517
552
  }
518
553
 
519
- declare const SCROLLYTELLING_DATA: ScrollytellingItem[];
520
- declare const Scrollytelling: ({ header, items, variant, className, ...props }: ScrollytellingProps) => react_jsx_runtime.JSX.Element;
554
+ declare const FEATURE_SCROLL_DATA: FeatureScrollItem[];
555
+ declare const FeatureScroll: ({ header, items, variant, className, ...props }: FeatureScrollProps) => react_jsx_runtime.JSX.Element;
556
+
557
+ type DotLottieInViewProps = Omit<ComponentProps<typeof DotLottieReact>, "autoplay" | "loop" | "dotLottieRefCallback"> & {
558
+ /**
559
+ * When false, playback is stopped (e.g. inactive slide in a stacked player).
560
+ * When true, plays once whenever the instance is both enabled and intersecting.
561
+ */
562
+ enabled?: boolean;
563
+ rootMargin?: string;
564
+ threshold?: number | number[];
565
+ };
566
+ /**
567
+ * Plays a .lottie once when it scrolls into view. Stops and resets when it leaves view.
568
+ * When it enters view again, it plays once more. Set `enabled={false}` to force stop
569
+ * (e.g. hidden slides) without relying on geometry alone.
570
+ */
571
+ declare function DotLottieInView({ enabled, rootMargin, threshold, className, style, ...dotProps }: DotLottieInViewProps): react_jsx_runtime.JSX.Element;
521
572
 
522
573
  /** Visual colour theme for each card — matches the Figma palette. */
523
574
  type StickyCardTheme = "light" | "coral" | "dark";
@@ -711,7 +762,7 @@ interface LogoItem {
711
762
  name: string;
712
763
  url: string;
713
764
  }
714
- interface PaymentMethodsProps extends HTMLAttributes<HTMLElement> {
765
+ interface LogoMarqueeProps extends HTMLAttributes<HTMLElement> {
715
766
  headline?: string;
716
767
  body?: string;
717
768
  disclaimer?: string;
@@ -730,6 +781,86 @@ declare const TEXT_CONTENT: {
730
781
  ctaLabel: string;
731
782
  ctaHref: string;
732
783
  };
733
- declare const PaymentMethods: ({ headline, body, disclaimer, ctaLabel, ctaHref, col1Logos, col2Logos, className, ...props }: PaymentMethodsProps) => react_jsx_runtime.JSX.Element;
784
+ declare const LogoMarquee: ({ headline, body, disclaimer, ctaLabel, ctaHref, col1Logos, col2Logos, className, ...props }: LogoMarqueeProps) => react_jsx_runtime.JSX.Element;
785
+
786
+ type DownloadBadgePlatform = "googleplay" | "appstore" | "appgallery" | "windows" | "macos" | "linux" | "web";
787
+ type DownloadBadgeColorScheme = "light" | "dark";
788
+ interface DownloadBadgeProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
789
+ /** Which platform badge to render */
790
+ platform: DownloadBadgePlatform;
791
+ /**
792
+ * Colour scheme — use "light" on light backgrounds, "dark" on dark backgrounds.
793
+ * @default "light"
794
+ */
795
+ colorScheme?: DownloadBadgeColorScheme;
796
+ /** Destination URL */
797
+ href?: string;
798
+ }
799
+
800
+ declare const DownloadBadge: ({ platform, colorScheme, href, className, ...props }: DownloadBadgeProps) => react_jsx_runtime.JSX.Element;
801
+
802
+ type StepsImagePosition = "left" | "right";
803
+ interface StepItem {
804
+ /** Step title */
805
+ title: string;
806
+ /** Step body copy */
807
+ description: string;
808
+ }
809
+ interface StepsProps {
810
+ /** Section headline (H2) */
811
+ title: string;
812
+ /** Ordered list of steps */
813
+ steps: StepItem[];
814
+ /** Image source URL */
815
+ image?: string;
816
+ /** Accessible alt text for the image */
817
+ imageAlt?: string;
818
+ /**
819
+ * Which side the image sits on (default: "left").
820
+ * On mobile the image always stacks above the content.
821
+ */
822
+ imagePosition?: StepsImagePosition;
823
+ }
824
+
825
+ declare const Steps: ({ title, steps, image, imageAlt, imagePosition, }: StepsProps) => react_jsx_runtime.JSX.Element;
826
+
827
+ type DownloadBannerStyle = "light" | "light-2" | "dark";
828
+ interface DownloadBannerProps {
829
+ /**
830
+ * Visual style of the inner card.
831
+ * - "light" → slate-100 outer section, white inner card
832
+ * - "light-2" → white outer section, slate-100 inner card (default)
833
+ * - "dark" → white outer section, slate-1200 inner card
834
+ */
835
+ style?: DownloadBannerStyle;
836
+ /** QR code image URL. When provided the QR block is shown on desktop. */
837
+ qrCodeImage?: string;
838
+ /** Accessible alt text for the QR code image */
839
+ qrCodeAlt?: string;
840
+ /** First line of text beside the QR code (default: "Scan to download") */
841
+ qrTitle?: string;
842
+ /** Second line of text beside the QR code (default: "Android & iOS") */
843
+ qrSubtitle?: string;
844
+ /** Heading shown on mobile above the badge grid (default: "Available on") */
845
+ mobileTitle?: string;
846
+ showAppStore?: boolean;
847
+ showGooglePlay?: boolean;
848
+ showAppGallery?: boolean;
849
+ showWindows?: boolean;
850
+ showMacOS?: boolean;
851
+ showLinux?: boolean;
852
+ showWeb?: boolean;
853
+ appStoreHref?: string;
854
+ googlePlayHref?: string;
855
+ appGalleryHref?: string;
856
+ windowsHref?: string;
857
+ macOSHref?: string;
858
+ linuxHref?: string;
859
+ webHref?: string;
860
+ /** Optional small-print disclaimer shown below the QR text */
861
+ disclaimer?: string;
862
+ }
863
+
864
+ declare const DownloadBanner: ({ style, qrCodeImage, qrCodeAlt, qrTitle, qrSubtitle, mobileTitle, showAppStore, showGooglePlay, showAppGallery, showWindows, showMacOS, showLinux, showWeb, appStoreHref, googlePlayHref, appGalleryHref, windowsHref, macOSHref, linuxHref, webHref, disclaimer, }: DownloadBannerProps) => react_jsx_runtime.JSX.Element;
734
865
 
735
- export { AVATAR_DATA, Accordion, type AccordionProps, type AvatarItem, type AvatarPosition, type AwardItem, BottomSheet, type BottomSheetAction, type BottomSheetProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, type BreadcrumbSize, Button, type ButtonColorScheme, type ButtonIconPosition, type ButtonProps, type ButtonVariant, COL_ONE_LOGOS, COL_TWO_LOGOS, CTABanner, type CTABannerProps, Card, type CardPrimaryStyle, type CardProps, type CardTag, type CardThumbnailType, Chip, ChipDropdown, type ChipDropdownOption, type ChipDropdownProps, type ChipProps, type ChipSize, DayNightTransition, type DayNightTransitionProps, type FeatureCardItem, FeatureCards, type FeatureCardsProps, Footer, type FooterAiSummaryItem, type FooterAiSummaryProps, type FooterAppBadge, type FooterDerivGoProps, type FooterLinkItem, type FooterNavSection, type FooterProps, type FooterSocialLink, Hero, type HeroButtonProps, type HeroProps, type HeroVariant, type LanguageItem, Link, type LinkColorScheme, type LinkProps, type LogoItem, type NavDropdownColumn, type NavDropdownFeature, type NavDropdownItem, type NavItem, Navbar, type NavbarProps, Pagination, type PaginationProps, PaymentMethods, type PaymentMethodsProps, SCROLLYTELLING_DATA, STEPS_DATA, Scrollytelling, type ScrollytellingItem, type ScrollytellingProps, SearchField, type SearchFieldProps, type SearchFieldStatus, type StatItem, Stats, type StatsProps, type StickyCardItem, type StickyCardTheme, StickyStackedCards, type StickyStackedCardsProps, TEXT_CONTENT, Tag, type TagFontWeight, type TagProps, type TagSize, type TagVariant, TextField, type TextFieldProps, type TextFieldStatus, type TextFieldVariant };
866
+ export { AVATAR_DATA, Accordion, type AccordionProps, type AvatarItem, type AvatarPosition, type AwardItem, BottomSheet, type BottomSheetAction, type BottomSheetProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, type BreadcrumbSize, Button, type ButtonColorScheme, type ButtonIconPosition, type ButtonProps, type ButtonVariant, COL_ONE_LOGOS, COL_TWO_LOGOS, CTABanner, type CTABannerProps, Card, type CardPrimaryStyle, type CardProps, type CardTag, type CardThumbnailType, Chip, ChipDropdown, type ChipDropdownOption, type ChipDropdownProps, type ChipProps, type ChipSize, DayNightTransition, type DayNightTransitionProps, DotLottieInView, type DotLottieInViewProps, DownloadBadge, type DownloadBadgeColorScheme, type DownloadBadgePlatform, type DownloadBadgeProps, DownloadBanner, type DownloadBannerProps, type DownloadBannerStyle, FEATURE_SCROLL_DATA, type FeatureCardItem, type FeatureCardSecondaryItem, FeatureCards, type FeatureCardsProps, FeatureCardsSecondary, type FeatureCardsSecondaryProps, FeatureScroll, type FeatureScrollItem, type FeatureScrollProps, Footer, type FooterAiSummaryItem, type FooterAiSummaryProps, type FooterAppBadge, type FooterDerivGoProps, type FooterLinkItem, type FooterNavSection, type FooterProps, type FooterSocialLink, Hero, type HeroButtonProps, type HeroProps, type HeroVariant, type LanguageItem, Link, type LinkColorScheme, type LinkProps, type LogoItem, LogoMarquee, type LogoMarqueeProps, type NavDropdownColumn, type NavDropdownFeature, type NavDropdownItem, type NavItem, Navbar, type NavbarProps, Pagination, type PaginationProps, STEPS_DATA, SearchField, type SearchFieldProps, type SearchFieldStatus, type StatItem, Stats, type StatsProps, type StepItem, Steps, type StepsImagePosition, type StepsProps, type StickyCardItem, type StickyCardTheme, StickyStackedCards, type StickyStackedCardsProps, TEXT_CONTENT, Tag, type TagFontWeight, type TagProps, type TagSize, type TagVariant, TextField, type TextFieldProps, type TextFieldStatus, type TextFieldVariant };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, HTMLAttributes, InputHTMLAttributes, MouseEvent } from 'react';
3
+ import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, HTMLAttributes, InputHTMLAttributes, MouseEvent, ComponentProps } from 'react';
4
+ import { DotLottieReact } from '@lottiefiles/dotlottie-react';
4
5
 
5
6
  type ButtonColorScheme = "coral" | "black" | "white";
6
7
  type ButtonVariant = "primary" | "secondary";
@@ -279,6 +280,26 @@ interface FeatureCardsProps {
279
280
 
280
281
  declare const FeatureCards: ({ sectionTitle, sectionDescription, showLink, linkText, onLinkClick, cardColorScheme, cards, }: FeatureCardsProps) => react_jsx_runtime.JSX.Element;
281
282
 
283
+ interface FeatureCardSecondaryItem {
284
+ title: string;
285
+ description: string;
286
+ icon?: ReactNode;
287
+ showIcon?: boolean;
288
+ showLink?: boolean;
289
+ linkText?: string;
290
+ onLinkClick?: () => void;
291
+ }
292
+ interface FeatureCardsSecondaryProps {
293
+ sectionTitle: string;
294
+ sectionDescription?: string;
295
+ showLink?: boolean;
296
+ linkText?: string;
297
+ onLinkClick?: () => void;
298
+ cards: FeatureCardSecondaryItem[];
299
+ }
300
+
301
+ declare const FeatureCardsSecondary: ({ sectionTitle, sectionDescription, showLink, linkText, onLinkClick, cards, }: FeatureCardsSecondaryProps) => react_jsx_runtime.JSX.Element;
302
+
282
303
  interface FooterLinkItem {
283
304
  /** Link label text */
284
305
  label: string;
@@ -387,7 +408,7 @@ interface FooterProps extends HTMLAttributes<HTMLElement> {
387
408
 
388
409
  declare const Footer: ({ logoSrc, logoAlt, navColumns, socialLinks, derivGo, investorsInPeopleSrc, investorsInPeopleAlt, licenseText, riskWarningText, aiSummary, className, ...props }: FooterProps) => react_jsx_runtime.JSX.Element;
389
410
 
390
- type HeroVariant = "homepage" | "full-image" | "visuals" | "text-only";
411
+ type HeroVariant = "split" | "centered" | "showcase" | "visuals" | "minimal";
391
412
  interface HeroButtonProps {
392
413
  /** Button label text */
393
414
  label: string;
@@ -399,10 +420,13 @@ interface HeroButtonProps {
399
420
  interface HeroProps extends HTMLAttributes<HTMLElement> {
400
421
  /**
401
422
  * Layout variant:
402
- * - "homepage" — dark bg, left-aligned text, right-side hero image, 100vh
403
- * - "full-image" — full background image, center-aligned text, 100vh
404
- * - "visuals" — light grey bg + SVG grid, center-aligned text, floating visuals, min-height 540px
405
- * - "text-only" — same as visuals but without floating graphics
423
+ *
424
+ * - "split" — dark bg, left-aligned text, right-side hero image, 100vh
425
+ * - "centered" — full background image, center-aligned text, 100vh
426
+ * - "showcase" — dark bg + full-bleed bg image, center-aligned text, large product image
427
+ * below buttons, smaller floating image below that.
428
+ * - "visuals" — light grey bg + SVG grid, center-aligned text, floating visuals, min-height 540px
429
+ * - "minimal" — same as visuals but without floating graphics
406
430
  */
407
431
  variant: HeroVariant;
408
432
  /** Optional eyebrow / subtitle above the title */
@@ -418,33 +442,44 @@ interface HeroProps extends HTMLAttributes<HTMLElement> {
418
442
  primaryButton?: HeroButtonProps;
419
443
  /**
420
444
  * Secondary CTA button (white outline).
421
- * Shown on Homepage and Full Image variants.
445
+ * Shown on Split, Centered and Showcase variants.
422
446
  */
423
447
  secondaryButton?: HeroButtonProps;
424
448
  /**
425
449
  * Background image URL.
426
- * - "homepage" — used as the full-bleed background behind the overlay
427
- * - "full-image" — used as the full-bleed background behind the overlay
450
+ * - "split" — used as the full-bleed background behind the overlay
451
+ * - "centered" — used as the full-bleed background behind the overlay
452
+ * - "showcase" — used as the full-bleed background behind the overlay
428
453
  */
429
454
  backgroundImageSrc?: string;
430
455
  /**
431
- * Right-side hero image for the Homepage variant.
456
+ * Right-side hero image for the Split variant.
432
457
  * Accepts a ReactNode (e.g. <img>) or an image URL string.
433
458
  */
434
459
  heroImage?: ReactNode | string;
435
460
  /**
436
- * Left floating visual for the Visuals variant (desktop only).
461
+ * Left floating visual for the Visuals variant.
437
462
  * Accepts a ReactNode or image URL string.
438
463
  */
439
464
  leftVisual?: ReactNode | string;
440
465
  /**
441
- * Right floating visual for the Visuals variant (desktop only).
466
+ * Right floating visual for the Visuals variant.
442
467
  * Accepts a ReactNode or image URL string.
443
468
  */
444
469
  rightVisual?: ReactNode | string;
470
+ /**
471
+ * Large product image shown centered below the CTA buttons in the Showcase variant.
472
+ * Accepts a ReactNode or image URL string.
473
+ */
474
+ productImage?: ReactNode | string;
475
+ /**
476
+ * Smaller floating image shown below the productImage in the Showcase variant.
477
+ * Accepts a ReactNode or image URL string.
478
+ */
479
+ floatingImage?: ReactNode | string;
445
480
  }
446
481
 
447
- declare const Hero: ({ variant, subtitle, title, description, primaryButton, secondaryButton, backgroundImageSrc, heroImage, leftVisual, rightVisual, className, ...props }: HeroProps) => react_jsx_runtime.JSX.Element;
482
+ declare const Hero: ({ variant, subtitle, title, description, primaryButton, secondaryButton, backgroundImageSrc, heroImage, leftVisual, rightVisual, productImage, floatingImage, className, ...props }: HeroProps) => react_jsx_runtime.JSX.Element;
448
483
 
449
484
  interface StatItem {
450
485
  /** Numeric or short display value, e.g. "2.5M+" */
@@ -482,8 +517,8 @@ interface StatsProps extends HTMLAttributes<HTMLElement> {
482
517
 
483
518
  declare const Stats: ({ title, description, stats, leftAwards, rightAwards, className, ...props }: StatsProps) => react_jsx_runtime.JSX.Element;
484
519
 
485
- interface ScrollytellingItem {
486
- /** Short market name, e.g. "Forex" */
520
+ interface FeatureScrollItem {
521
+ /** Short feature name, e.g. "Forex" */
487
522
  title: string;
488
523
  /** Body copy below the title */
489
524
  description: string;
@@ -501,14 +536,14 @@ interface ScrollytellingItem {
501
536
  /** URL to the .lottie file or any image asset (png, jpg, svg, webp…) */
502
537
  mediaUrl: string;
503
538
  }
504
- interface ScrollytellingProps extends HTMLAttributes<HTMLElement> {
539
+ interface FeatureScrollProps extends HTMLAttributes<HTMLElement> {
505
540
  /** Section heading rendered as an H2 */
506
541
  header: string;
507
542
  /**
508
- * Ordered list of market items.
509
- * Drives both the desktop scrollytelling and the mobile stacked layout.
543
+ * Ordered list of feature items.
544
+ * Drives both the desktop scroll-driven layout and the mobile stacked layout.
510
545
  */
511
- items: ScrollytellingItem[];
546
+ items: FeatureScrollItem[];
512
547
  /**
513
548
  * Controls which side the sticky media column sits on.
514
549
  * @default "media-right"
@@ -516,8 +551,24 @@ interface ScrollytellingProps extends HTMLAttributes<HTMLElement> {
516
551
  variant?: "media-left" | "media-right";
517
552
  }
518
553
 
519
- declare const SCROLLYTELLING_DATA: ScrollytellingItem[];
520
- declare const Scrollytelling: ({ header, items, variant, className, ...props }: ScrollytellingProps) => react_jsx_runtime.JSX.Element;
554
+ declare const FEATURE_SCROLL_DATA: FeatureScrollItem[];
555
+ declare const FeatureScroll: ({ header, items, variant, className, ...props }: FeatureScrollProps) => react_jsx_runtime.JSX.Element;
556
+
557
+ type DotLottieInViewProps = Omit<ComponentProps<typeof DotLottieReact>, "autoplay" | "loop" | "dotLottieRefCallback"> & {
558
+ /**
559
+ * When false, playback is stopped (e.g. inactive slide in a stacked player).
560
+ * When true, plays once whenever the instance is both enabled and intersecting.
561
+ */
562
+ enabled?: boolean;
563
+ rootMargin?: string;
564
+ threshold?: number | number[];
565
+ };
566
+ /**
567
+ * Plays a .lottie once when it scrolls into view. Stops and resets when it leaves view.
568
+ * When it enters view again, it plays once more. Set `enabled={false}` to force stop
569
+ * (e.g. hidden slides) without relying on geometry alone.
570
+ */
571
+ declare function DotLottieInView({ enabled, rootMargin, threshold, className, style, ...dotProps }: DotLottieInViewProps): react_jsx_runtime.JSX.Element;
521
572
 
522
573
  /** Visual colour theme for each card — matches the Figma palette. */
523
574
  type StickyCardTheme = "light" | "coral" | "dark";
@@ -711,7 +762,7 @@ interface LogoItem {
711
762
  name: string;
712
763
  url: string;
713
764
  }
714
- interface PaymentMethodsProps extends HTMLAttributes<HTMLElement> {
765
+ interface LogoMarqueeProps extends HTMLAttributes<HTMLElement> {
715
766
  headline?: string;
716
767
  body?: string;
717
768
  disclaimer?: string;
@@ -730,6 +781,86 @@ declare const TEXT_CONTENT: {
730
781
  ctaLabel: string;
731
782
  ctaHref: string;
732
783
  };
733
- declare const PaymentMethods: ({ headline, body, disclaimer, ctaLabel, ctaHref, col1Logos, col2Logos, className, ...props }: PaymentMethodsProps) => react_jsx_runtime.JSX.Element;
784
+ declare const LogoMarquee: ({ headline, body, disclaimer, ctaLabel, ctaHref, col1Logos, col2Logos, className, ...props }: LogoMarqueeProps) => react_jsx_runtime.JSX.Element;
785
+
786
+ type DownloadBadgePlatform = "googleplay" | "appstore" | "appgallery" | "windows" | "macos" | "linux" | "web";
787
+ type DownloadBadgeColorScheme = "light" | "dark";
788
+ interface DownloadBadgeProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
789
+ /** Which platform badge to render */
790
+ platform: DownloadBadgePlatform;
791
+ /**
792
+ * Colour scheme — use "light" on light backgrounds, "dark" on dark backgrounds.
793
+ * @default "light"
794
+ */
795
+ colorScheme?: DownloadBadgeColorScheme;
796
+ /** Destination URL */
797
+ href?: string;
798
+ }
799
+
800
+ declare const DownloadBadge: ({ platform, colorScheme, href, className, ...props }: DownloadBadgeProps) => react_jsx_runtime.JSX.Element;
801
+
802
+ type StepsImagePosition = "left" | "right";
803
+ interface StepItem {
804
+ /** Step title */
805
+ title: string;
806
+ /** Step body copy */
807
+ description: string;
808
+ }
809
+ interface StepsProps {
810
+ /** Section headline (H2) */
811
+ title: string;
812
+ /** Ordered list of steps */
813
+ steps: StepItem[];
814
+ /** Image source URL */
815
+ image?: string;
816
+ /** Accessible alt text for the image */
817
+ imageAlt?: string;
818
+ /**
819
+ * Which side the image sits on (default: "left").
820
+ * On mobile the image always stacks above the content.
821
+ */
822
+ imagePosition?: StepsImagePosition;
823
+ }
824
+
825
+ declare const Steps: ({ title, steps, image, imageAlt, imagePosition, }: StepsProps) => react_jsx_runtime.JSX.Element;
826
+
827
+ type DownloadBannerStyle = "light" | "light-2" | "dark";
828
+ interface DownloadBannerProps {
829
+ /**
830
+ * Visual style of the inner card.
831
+ * - "light" → slate-100 outer section, white inner card
832
+ * - "light-2" → white outer section, slate-100 inner card (default)
833
+ * - "dark" → white outer section, slate-1200 inner card
834
+ */
835
+ style?: DownloadBannerStyle;
836
+ /** QR code image URL. When provided the QR block is shown on desktop. */
837
+ qrCodeImage?: string;
838
+ /** Accessible alt text for the QR code image */
839
+ qrCodeAlt?: string;
840
+ /** First line of text beside the QR code (default: "Scan to download") */
841
+ qrTitle?: string;
842
+ /** Second line of text beside the QR code (default: "Android & iOS") */
843
+ qrSubtitle?: string;
844
+ /** Heading shown on mobile above the badge grid (default: "Available on") */
845
+ mobileTitle?: string;
846
+ showAppStore?: boolean;
847
+ showGooglePlay?: boolean;
848
+ showAppGallery?: boolean;
849
+ showWindows?: boolean;
850
+ showMacOS?: boolean;
851
+ showLinux?: boolean;
852
+ showWeb?: boolean;
853
+ appStoreHref?: string;
854
+ googlePlayHref?: string;
855
+ appGalleryHref?: string;
856
+ windowsHref?: string;
857
+ macOSHref?: string;
858
+ linuxHref?: string;
859
+ webHref?: string;
860
+ /** Optional small-print disclaimer shown below the QR text */
861
+ disclaimer?: string;
862
+ }
863
+
864
+ declare const DownloadBanner: ({ style, qrCodeImage, qrCodeAlt, qrTitle, qrSubtitle, mobileTitle, showAppStore, showGooglePlay, showAppGallery, showWindows, showMacOS, showLinux, showWeb, appStoreHref, googlePlayHref, appGalleryHref, windowsHref, macOSHref, linuxHref, webHref, disclaimer, }: DownloadBannerProps) => react_jsx_runtime.JSX.Element;
734
865
 
735
- export { AVATAR_DATA, Accordion, type AccordionProps, type AvatarItem, type AvatarPosition, type AwardItem, BottomSheet, type BottomSheetAction, type BottomSheetProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, type BreadcrumbSize, Button, type ButtonColorScheme, type ButtonIconPosition, type ButtonProps, type ButtonVariant, COL_ONE_LOGOS, COL_TWO_LOGOS, CTABanner, type CTABannerProps, Card, type CardPrimaryStyle, type CardProps, type CardTag, type CardThumbnailType, Chip, ChipDropdown, type ChipDropdownOption, type ChipDropdownProps, type ChipProps, type ChipSize, DayNightTransition, type DayNightTransitionProps, type FeatureCardItem, FeatureCards, type FeatureCardsProps, Footer, type FooterAiSummaryItem, type FooterAiSummaryProps, type FooterAppBadge, type FooterDerivGoProps, type FooterLinkItem, type FooterNavSection, type FooterProps, type FooterSocialLink, Hero, type HeroButtonProps, type HeroProps, type HeroVariant, type LanguageItem, Link, type LinkColorScheme, type LinkProps, type LogoItem, type NavDropdownColumn, type NavDropdownFeature, type NavDropdownItem, type NavItem, Navbar, type NavbarProps, Pagination, type PaginationProps, PaymentMethods, type PaymentMethodsProps, SCROLLYTELLING_DATA, STEPS_DATA, Scrollytelling, type ScrollytellingItem, type ScrollytellingProps, SearchField, type SearchFieldProps, type SearchFieldStatus, type StatItem, Stats, type StatsProps, type StickyCardItem, type StickyCardTheme, StickyStackedCards, type StickyStackedCardsProps, TEXT_CONTENT, Tag, type TagFontWeight, type TagProps, type TagSize, type TagVariant, TextField, type TextFieldProps, type TextFieldStatus, type TextFieldVariant };
866
+ export { AVATAR_DATA, Accordion, type AccordionProps, type AvatarItem, type AvatarPosition, type AwardItem, BottomSheet, type BottomSheetAction, type BottomSheetProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, type BreadcrumbSize, Button, type ButtonColorScheme, type ButtonIconPosition, type ButtonProps, type ButtonVariant, COL_ONE_LOGOS, COL_TWO_LOGOS, CTABanner, type CTABannerProps, Card, type CardPrimaryStyle, type CardProps, type CardTag, type CardThumbnailType, Chip, ChipDropdown, type ChipDropdownOption, type ChipDropdownProps, type ChipProps, type ChipSize, DayNightTransition, type DayNightTransitionProps, DotLottieInView, type DotLottieInViewProps, DownloadBadge, type DownloadBadgeColorScheme, type DownloadBadgePlatform, type DownloadBadgeProps, DownloadBanner, type DownloadBannerProps, type DownloadBannerStyle, FEATURE_SCROLL_DATA, type FeatureCardItem, type FeatureCardSecondaryItem, FeatureCards, type FeatureCardsProps, FeatureCardsSecondary, type FeatureCardsSecondaryProps, FeatureScroll, type FeatureScrollItem, type FeatureScrollProps, Footer, type FooterAiSummaryItem, type FooterAiSummaryProps, type FooterAppBadge, type FooterDerivGoProps, type FooterLinkItem, type FooterNavSection, type FooterProps, type FooterSocialLink, Hero, type HeroButtonProps, type HeroProps, type HeroVariant, type LanguageItem, Link, type LinkColorScheme, type LinkProps, type LogoItem, LogoMarquee, type LogoMarqueeProps, type NavDropdownColumn, type NavDropdownFeature, type NavDropdownItem, type NavItem, Navbar, type NavbarProps, Pagination, type PaginationProps, STEPS_DATA, SearchField, type SearchFieldProps, type SearchFieldStatus, type StatItem, Stats, type StatsProps, type StepItem, Steps, type StepsImagePosition, type StepsProps, type StickyCardItem, type StickyCardTheme, StickyStackedCards, type StickyStackedCardsProps, TEXT_CONTENT, Tag, type TagFontWeight, type TagProps, type TagSize, type TagVariant, TextField, type TextFieldProps, type TextFieldStatus, type TextFieldVariant };