@deriv-web-design/ui-templates 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../templates/FeatureCards/FeatureCards.tsx","../templates/FeatureCardsSecondary/FeatureCardsSecondary.tsx","../templates/Hero/Hero.tsx","../templates/Stats/Stats.tsx","../templates/FeatureScroll/FeatureScroll.tsx","../templates/StickyStackedCards/StickyStackedCards.tsx","../templates/CTABanner/CTABanner.tsx","../templates/DayNightTransition/DayNightTransition.tsx","../templates/DayNightTransition/webflowDayNightV2Ix.ts","../templates/DayNightTransition/dayNightTransitionPresets.ts","../templates/LogoMarquee/LogoMarquee.tsx","../templates/Steps/Steps.tsx","../templates/DownloadBanner/DownloadBanner.tsx","../templates/TextScroll/TextScroll.tsx"],"sourcesContent":["import { Card, Link } from \"@deriv-web-design/ui-core/core\";\nimport type { FeatureCardsProps } from \"./FeatureCards.types\";\nimport \"./FeatureCards.css\";\n\nexport const FeatureCards = ({\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cardColorScheme = \"image\",\n cards,\n}: FeatureCardsProps) => {\n return (\n <section className=\"fc-section\">\n <div className=\"fc-container\">\n <div className=\"fc-header\">\n <h2 className=\"fc-sectionTitle\">{sectionTitle}</h2>\n\n {sectionDescription && (\n <p className=\"fc-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link\n colorScheme=\"coral\"\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n\n <div className=\"fc-grid\">\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"primary\"\n colorScheme={card.colorScheme ?? cardColorScheme}\n title={card.title}\n description={card.description}\n image={card.image}\n imageAlt={card.imageAlt}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","import { Card, Link } from \"@deriv-web-design/ui-core/core\";\nimport type { FeatureCardsSecondaryProps } from \"./FeatureCardsSecondary.types\";\nimport \"./FeatureCardsSecondary.css\";\n\nexport const FeatureCardsSecondary = ({\n sectionTitle,\n sectionDescription,\n showLink = false,\n linkText = \"Learn more\",\n onLinkClick,\n cards,\n}: FeatureCardsSecondaryProps) => {\n return (\n <section className=\"fcs-section\">\n <div className=\"fcs-container\">\n <div className=\"fcs-header\">\n <h2 className=\"fcs-sectionTitle\">{sectionTitle}</h2>\n\n {sectionDescription && (\n <p className=\"fcs-sectionDescription\">{sectionDescription}</p>\n )}\n\n {showLink && (\n <Link\n colorScheme=\"coral\"\n label={linkText}\n onClick={onLinkClick}\n />\n )}\n </div>\n\n <div className={`fcs-grid fcs-grid--${cards.length === 4 ? \"4\" : \"3\"}`}>\n {cards.map((card, index) => (\n <Card\n key={index}\n variant=\"secondary\"\n title={card.title}\n description={card.description}\n icon={card.icon}\n showIcon={card.showIcon}\n showLink={card.showLink}\n linkText={card.linkText}\n onLinkClick={card.onLinkClick}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nimport type { HeroProps } from \"./Hero.types\";\nimport { Button } from \"@deriv-web-design/ui-core/core\";\nimport \"./Hero.css\";\n\n/* ── Helpers ──────────────────────────────────────────────── */\n\n/** Renders a ReactNode or a plain string as an <img> */\nconst Visual = ({\n src,\n className,\n alt = \"\",\n}: {\n src: React.ReactNode | string;\n className: string;\n alt?: string;\n}) => (\n <div className={className}>\n {typeof src === \"string\" ? (\n <img src={src} alt={alt} />\n ) : (\n src\n )}\n </div>\n);\n\n/* ── Hero ─────────────────────────────────────────────────── */\n\nexport const Hero = ({\n variant,\n subtitle,\n title,\n description,\n primaryButton,\n secondaryButton,\n backgroundImageSrc,\n heroImage,\n leftVisual,\n rightVisual,\n productImage,\n floatingImage,\n className,\n ...props\n}: HeroProps) => {\n const variantClass = `hero--${variant}`;\n\n /* ── Parallax refs (visuals variant only) ── */\n const sectionRef = useRef<HTMLElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (variant !== \"visuals\") return;\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n const section = sectionRef.current;\n const leftEl = leftRef.current;\n const rightEl = rightRef.current;\n if (!section || !leftEl || !rightEl) return;\n\n const STRENGTH = 60; // px travel distance\n\n const onScroll = () => {\n const rect = section.getBoundingClientRect();\n const viewH = window.innerHeight;\n // progress: 0 when section top hits viewport bottom, 1 when section bottom hits viewport top\n const progress = 1 - (rect.bottom / (viewH + rect.height));\n const clamped = Math.max(0, Math.min(1, progress));\n const offset = (clamped - 0.5) * STRENGTH * 2;\n leftEl.style.transform = `translateY(${-offset}px)`;\n rightEl.style.transform = `translateY(${offset}px)`;\n };\n\n // Use the scroll container (Storybook iframe uses document.documentElement)\n const scrollEl = (() => {\n let el: Element | null = section.parentElement;\n while (el && el !== document.documentElement) {\n const { overflow, overflowY } = getComputedStyle(el);\n if (/auto|scroll/.test(overflow + overflowY)) return el;\n el = el.parentElement;\n }\n return window;\n })();\n\n scrollEl.addEventListener(\"scroll\", onScroll, { passive: true });\n onScroll(); // set initial position\n\n return () => scrollEl.removeEventListener(\"scroll\", onScroll);\n }, [variant]);\n\n /* ── Shared text block ── */\n const textBlock = (\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && <p className=\"hero__description\">{description}</p>}\n </div>\n );\n\n /* ── Shared button block ── */\n const buttonBlock = (primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n );\n\n /* ── Split ── */\n if (variant === \"split\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: gradient overlay */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 2: transparent PNG — direct child of section for correct z-index */}\n {heroImage && (\n <Visual\n src={heroImage}\n className=\"hero__image-slot\"\n alt=\"\"\n />\n )}\n\n {/* Layer 3: text + buttons */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__left\">\n <div className=\"hero__body\">\n {/* Text block — stagger 1 */}\n <div className=\"hero__text\">\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n {/* Buttons — stagger 2 */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Centered ── */\n if (variant === \"centered\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: dark gradient overlay (top dark → transparent) */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 3: centered content column */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n {/* Text block — center aligned */}\n <div className=\"hero__text\">\n {subtitle && (\n <p className=\"hero__subtitle\">{subtitle}</p>\n )}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n\n {/* CTA buttons */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Showcase ── */\n if (variant === \"showcase\") {\n return (\n <section\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n style={backgroundImageSrc ? { backgroundImage: `url(${backgroundImageSrc})` } : undefined}\n {...props}\n >\n {/* Layer 1: dark gradient overlay (top dark → transparent) */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n\n {/* Layer 3: centered content column */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n {/* Text block — center aligned */}\n <div className=\"hero__text\">\n {subtitle && (\n <p className=\"hero__subtitle\">{subtitle}</p>\n )}\n <h2 className=\"hero__title\">{title}</h2>\n {description && (\n <p className=\"hero__description\">{description}</p>\n )}\n </div>\n\n {/* CTA buttons */}\n {(primaryButton || secondaryButton) && (\n <div className=\"hero__buttons\">\n {primaryButton && (\n primaryButton.href ? (\n <a href={primaryButton.href}>\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"coral\"\n variant=\"primary\"\n label={primaryButton.label}\n onClick={primaryButton.onClick}\n />\n )\n )}\n {secondaryButton && (\n secondaryButton.href ? (\n <a href={secondaryButton.href}>\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n </a>\n ) : (\n <Button\n colorScheme=\"white\"\n variant=\"secondary\"\n label={secondaryButton.label}\n onClick={secondaryButton.onClick}\n />\n )\n )}\n </div>\n )}\n\n {/* Large product image — centered below buttons, slides up */}\n {productImage && (\n <Visual\n src={productImage}\n className=\"hero__product-image\"\n alt=\"\"\n />\n )}\n\n {/* Smaller floating image — below product image, slides up with delay */}\n {floatingImage && (\n <Visual\n src={floatingImage}\n className=\"hero__floating-image\"\n alt=\"\"\n />\n )}\n </div>\n </div>\n </section>\n );\n }\n\n /* ── Visuals / Minimal ── */\n return (\n <section\n ref={sectionRef}\n className={[\"hero\", variantClass, className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* Layer 1: grid pattern */}\n <div className=\"hero__grid\" aria-hidden=\"true\" />\n {/* Layer 2: floating visuals — direct children so z-index is below text */}\n {variant === \"visuals\" && leftVisual && (\n <div ref={leftRef} className=\"hero__visual hero__visual--left\">\n {typeof leftVisual === \"string\" ? (\n <img src={leftVisual} alt=\"\" />\n ) : (\n leftVisual\n )}\n </div>\n )}\n {variant === \"visuals\" && rightVisual && (\n <div ref={rightRef} className=\"hero__visual hero__visual--right\">\n {typeof rightVisual === \"string\" ? (\n <img src={rightVisual} alt=\"\" />\n ) : (\n rightVisual\n )}\n </div>\n )}\n {/* Layer 3: overlay fades the visuals at edges */}\n <div className=\"hero__overlay\" aria-hidden=\"true\" />\n {/* Layer 4: text + button always on top */}\n <div className=\"hero__inner\">\n <div className=\"hero__content\">\n <div className=\"hero__body\">\n {textBlock}\n {buttonBlock}\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Hero;\n","import { useEffect, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { AwardItem, StatsProps } from \"./Stats.types\";\nimport \"./Stats.css\";\n\n/* ── Constants ────────────────────────────────────────────── */\n\nconst INTERVAL_MS = 2000;\nconst TRANSITION = \"transform 0.8s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1)\";\n\n/* ── Carousel helpers ─────────────────────────────────────── */\n\n/**\n * Returns a signed relative position:\n * 0 → active (centre)\n * -1 → one slot above\n * +1 → one slot below\n * ±2+ → off-screen (hidden)\n */\nfunction relativePos(index: number, active: number, total: number): number {\n const raw = ((index - active) % total + total) % total;\n return raw > total / 2 ? raw - total : raw;\n}\n\nfunction getStatStyle(rel: number): CSSProperties {\n if (rel === 0) {\n return { transform: \"translateY(-50%) scale(1)\", opacity: 1, zIndex: 2, transition: TRANSITION };\n }\n if (rel === -1) {\n return { transform: \"translateY(calc(-50% - 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n if (rel === 1) {\n return { transform: \"translateY(calc(-50% + 110%)) scale(0.7)\", opacity: 1, zIndex: 1, transition: TRANSITION };\n }\n return {\n transform: rel < 0\n ? \"translateY(calc(-50% - 110%)) scale(0.4)\"\n : \"translateY(calc(-50% + 110%)) scale(0.4)\",\n opacity: 0, zIndex: 0, transition: TRANSITION,\n };\n}\n\n/* ── Award Badge ──────────────────────────────────────────── */\n\nconst AwardBadge = ({ imageSrc, imageAlt = \"\" }: AwardItem) => (\n <div className=\"stats__award\">\n <img src={imageSrc} alt={imageAlt} className=\"stats__award-image\" />\n </div>\n);\n\n/* ── Stats ────────────────────────────────────────────────── */\n\nexport const Stats = ({\n title,\n description,\n stats,\n leftAwards = [],\n rightAwards = [],\n className,\n ...props\n}: StatsProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const hasAwards = leftAwards.length > 0 || rightAwards.length > 0;\n const allAwards: AwardItem[] = [...leftAwards, ...rightAwards];\n const total = stats.length;\n\n useEffect(() => {\n if (total <= 1) return;\n intervalRef.current = setInterval(() => {\n setActiveIndex(prev => (prev + 1) % total);\n }, INTERVAL_MS);\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [total]);\n\n return (\n <section\n className={[\"stats\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"stats__inner\">\n {/* ── Header ── */}\n <div className=\"stats__header\">\n <h2 className=\"stats__title\">{title}</h2>\n {description && (\n <p className=\"stats__description\">{description}</p>\n )}\n </div>\n\n {/* ── Content row ── */}\n <div className=\"stats__content\">\n {/* Left award images — desktop only */}\n {leftAwards.length > 0 && (\n <div className=\"stats__awards-col stats__awards-col--left\">\n {leftAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Centre stats card */}\n <div className=\"stats__card\">\n <div className=\"stats__card-track\">\n <div className=\"stats__fade stats__fade--top\" aria-hidden=\"true\" />\n <div className=\"stats__fade stats__fade--bottom\" aria-hidden=\"true\" />\n {stats.map((stat, i) => {\n const rel = relativePos(i, activeIndex, total);\n const active = rel === 0;\n return (\n <div\n key={i}\n className={[\n \"stats__stat\",\n active ? \"stats__stat--active\" : \"stats__stat--inactive\",\n ].join(\" \")}\n style={getStatStyle(rel)}\n aria-hidden={!active}\n >\n <span className=\"stats__stat-value\">{stat.value}</span>\n <span className=\"stats__stat-label\">{stat.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Right award images — desktop only */}\n {rightAwards.length > 0 && (\n <div className=\"stats__awards-col stats__awards-col--right\">\n {rightAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n\n {/* Awards grid — mobile only; lives inside stats__content so it\n inherits the 32px column gap from the card above it */}\n {hasAwards && (\n <div className=\"stats__awards-mobile\">\n {allAwards.map((award, i) => (\n <AwardBadge key={i} {...award} />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default Stats;\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { DotLottieInView } from \"@deriv-web-design/ui-core/core\";\nimport type { FeatureScrollItem, FeatureScrollProps } from \"./FeatureScroll.types\";\nimport \"./FeatureScroll.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\nexport const FEATURE_SCROLL_DATA: FeatureScrollItem[] = [\n {\n title: \"Forex\",\n description: \"Trade the most popular currency pairs with high leverage, tight spreads, and fast execution.\",\n linkLabel: \"Learn more\",\n link: \"/markets/forex\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a906489e5aadf94e501c4_Forex.lottie\",\n },\n {\n title: \"Derived Indices\",\n description: \"Trade 24/7 on exclusive Synthetic and Derived Indices. Choose volatility levels that match your strategy.\",\n linkLabel: \"Learn more\",\n link: \"/markets/derived-indices/synthetic-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064588b0d2709e7ceac_Derived%20Indices.lottie\",\n },\n {\n title: \"Stocks\",\n description: \"Trade global market leaders like Apple, Tesla, and NVIDIA.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stocks\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064892f97175b724a9c_Stocks.lottie\",\n },\n {\n title: \"Commodities\",\n description: \"Trade gold, silver, oil, natural gas, sugar, and more.\",\n linkLabel: \"Learn more\",\n link: \"/markets/commodities\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064edd96a014a6092cf_Commodities.lottie\",\n },\n {\n title: \"Cryptos\",\n description: \"Trade round the clock on the volatility of cryptocurrencies like Bitcoin and Ethereum.\",\n linkLabel: \"Learn more\",\n link: \"/markets/cryptocurrencies\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a90647b8d9652a28b94e3_Crypto.lottie\",\n },\n {\n title: \"Stock Indices\",\n description: \"Trade offerings that track the top global stock indices.\",\n linkLabel: \"Learn more\",\n link: \"/markets/stock-indices\",\n mediaUrl: \"https://cdn.prod.website-files.com/66fbaad381fa6866fa4991f3/675a9064f2c16e4e0732abfb_Stock%20Indices.lottie\",\n },\n];\n\n/* ── Chevron SVG icon ──────────────────────────────────────── */\n\nconst ChevronRight = () => (\n <svg\n className=\"fs__item-link-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 3l5 5-5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n/* ── Media renderer ────────────────────────────────────────── */\n\nfunction resolveMediaType(item: FeatureScrollItem): \"lottie\" | \"image\" {\n if (item.mediaType) return item.mediaType;\n return item.mediaUrl.split(\"?\")[0].endsWith(\".lottie\") ? \"lottie\" : \"image\";\n}\n\ninterface MediaRendererProps {\n item: FeatureScrollItem;\n active: boolean;\n}\n\nconst MediaRenderer = ({ item, active }: MediaRendererProps) => {\n if (resolveMediaType(item) === \"lottie\") {\n return (\n <DotLottieInView\n src={item.mediaUrl}\n enabled={active}\n />\n );\n }\n return (\n <img\n src={item.mediaUrl}\n alt={item.title}\n loading=\"lazy\"\n />\n );\n};\n\n/* ── FeatureScroll ─────────────────────────────────────────── */\n\nexport const FeatureScroll = ({\n header,\n items,\n variant = \"media-right\",\n className,\n ...props\n}: FeatureScrollProps) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const titleRefs = useRef<(HTMLHeadingElement | null)[]>([]);\n const mediaColRef = useRef<HTMLDivElement | null>(null);\n\n /*\n * Desktop: when step i's *title* (h3) top reaches the same line as the sticky\n * media (viewport band under nav), show the *next* step's Lottie/image.\n * pinned = largest i with title top <= threshold; media index = min(last, pinned + 1).\n */\n useLayoutEffect(() => {\n if (items.length === 0) return;\n\n const readThresholdPx = (): number => {\n const col = mediaColRef.current;\n if (!col) return 80;\n const top = getComputedStyle(col).top;\n const px = parseFloat(top);\n return Number.isFinite(px) ? px : 80;\n };\n\n let rafId = 0;\n const tick = () => {\n rafId = 0;\n if (typeof window === \"undefined\") return;\n if (!window.matchMedia(\"(min-width: 992px)\").matches) return;\n\n const threshold = readThresholdPx();\n const refs = titleRefs.current;\n let pinned = -1;\n for (let i = 0; i < items.length; i++) {\n const el = refs[i];\n if (!el) continue;\n if (el.getBoundingClientRect().top <= threshold) pinned = i;\n }\n const mediaIndex = Math.min(\n items.length - 1,\n pinned + 1,\n );\n setActiveIndex((prev) =>\n prev === mediaIndex ? prev : mediaIndex,\n );\n };\n\n const schedule = () => {\n if (rafId !== 0) return;\n rafId = window.requestAnimationFrame(tick);\n };\n\n tick();\n window.addEventListener(\"scroll\", schedule, { passive: true });\n window.addEventListener(\"resize\", schedule, { passive: true });\n const mq = window.matchMedia(\"(min-width: 992px)\");\n mq.addEventListener(\"change\", schedule);\n\n return () => {\n window.removeEventListener(\"scroll\", schedule);\n window.removeEventListener(\"resize\", schedule);\n mq.removeEventListener(\"change\", schedule);\n if (rafId !== 0) window.cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n const rootClass = [\n \"fs\",\n `fs--${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (items.length === 0) {\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n <h2 className=\"fs__header\">{header}</h2>\n </div>\n </section>\n );\n }\n\n return (\n <section className={rootClass} {...props}>\n <div className=\"fs__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"fs__header\">{header}</h2>\n\n {/* ══ DESKTOP LAYOUT (hidden on mobile) ══════════════\n * Two equal columns; sticky media + scrolling text.\n * Column order is reversed by .fs--media-left.\n */}\n <div className=\"fs__layout\">\n\n {/* Media column: outer stretches to section height; inner is sticky so\n bottom constraint matches the full layout (fixes upward shift when\n scrolling back from the section below). */}\n <div className=\"fs__media-col\" aria-hidden=\"true\">\n <div\n ref={mediaColRef}\n className=\"fs__media-sticky\"\n >\n <div className=\"fs__media-wrap\">\n {items.map((item, i) => (\n <div\n key={i}\n className={[\n \"fs__media-item\",\n i === activeIndex\n ? \"fs__media-item--active\"\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <MediaRenderer\n item={item}\n active={i === activeIndex}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Text column: every step in flow — continuous scroll; ~viewport band min-height per step */}\n <div className=\"fs__content-col\">\n {items.map((item, i) => (\n <div\n key={i}\n className=\"fs__item\"\n >\n <h3\n ref={(el) => {\n titleRefs.current[i] = el;\n }}\n className=\"fs__item-title\"\n >\n {item.title}\n </h3>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n </div>\n\n {/* ══ MOBILE LAYOUT (hidden on desktop) ══════════════\n * Stacked items: Title → Media → Description → Link.\n * Variant prop has no effect; layout is always stacked.\n */}\n <div className=\"fs__mobile-list\">\n {items.map((item, i) => (\n <div key={i} className=\"fs__mobile-item\">\n <h3 className=\"fs__item-title\">\n {item.title}\n </h3>\n <div className=\"fs__mobile-media\">\n <MediaRenderer item={item} active={true} />\n </div>\n <p className=\"fs__item-desc\">\n {item.description}\n </p>\n <a\n href={item.link}\n className=\"fs__item-link\"\n >\n <span>{item.linkLabel}</span>\n <ChevronRight />\n </a>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default FeatureScroll;\n","import { useEffect, useRef } from \"react\";\nimport type { StickyCardItem, StickyStackedCardsProps } from \"./StickyStackedCards.types\";\nimport \"./StickyStackedCards.css\";\n\n/* ── Default data ──────────────────────────────────────────── */\n\n/* ── Shared design-system placeholder image ────────────────── */\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\nexport const STEPS_DATA: StickyCardItem[] = [\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"light\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"coral\",\n },\n {\n title: \"Title goes here\",\n description: \"Explain how this specific feature helps your user.\",\n imageUrl: PLACEHOLDER_IMAGE,\n theme: \"dark\",\n },\n];\n\n/* ── Scale targets per card depth ─────────────────────────── */\n/*\n * When a card is fully covered by the card on top of it, its\n * scale reaches this minimum — creating the visual depth seen\n * in the stacked state. The last card always stays at 1.\n *\n * Index → minimum scale when fully covered:\n * 0 (Sign up) → 0.88 (furthest back)\n * 1 (Deposit) → 0.94 (one level back)\n * 2 (Trade) → 1.00 (front card, never scales down)\n */\nconst MIN_SCALE: Record<number, number> = { 0: 0.88, 1: 0.94 };\n\n/* ── StickyStackedCards ────────────────────────────────────── */\n\nexport const StickyStackedCards = ({\n header,\n items,\n className,\n ...props\n}: StickyStackedCardsProps) => {\n const cardRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n /*\n * SCALE SCROLL HANDLER\n * --------------------\n * Runs on every scroll tick (passive, rAF-debounced).\n * For each card that has a card on top of it, we measure\n * how close the next card is to its fully-stacked position\n * and interpolate --card-scale toward the MIN_SCALE value.\n *\n * progress = 0 → next card is still far below (no scale)\n * progress = 1 → next card has landed on its sticky top (full scale-down)\n */\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId = 0;\n\n const update = () => {\n const cards = cardRefs.current.filter(Boolean) as HTMLDivElement[];\n const n = cards.length;\n\n cards.forEach((card, i) => {\n const minScale = MIN_SCALE[i];\n if (minScale === undefined) {\n // Last card — always full size\n card.style.setProperty(\"--card-scale\", \"1\");\n return;\n }\n\n const nextCard = cards[i + 1];\n if (!nextCard) return;\n\n const cardRect = card.getBoundingClientRect();\n const nextRect = nextCard.getBoundingClientRect();\n\n /*\n * \"gap\" = how far the next card's top is above the\n * current card's top in the viewport.\n *\n * gap ≥ cardHeight → next card is a full card-height below\n * (hasn't started overlapping) → progress 0\n * gap ≈ 0 or negative → next card is fully on top → progress 1\n */\n const cardHeight = cardRect.height;\n const gap = nextRect.top - cardRect.top;\n const progress = Math.max(0, Math.min(1, 1 - gap / cardHeight));\n\n const scale = 1 - (1 - minScale) * progress;\n card.style.setProperty(\"--card-scale\", String(+scale.toFixed(4)));\n });\n };\n\n const onScroll = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(update);\n };\n\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n // Run once immediately so initial state is correct\n update();\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(rafId);\n };\n }, [items.length]);\n\n return (\n <section\n className={[\"ssc\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"ssc__inner\">\n\n {/* ── Section header ── */}\n <h2 className=\"ssc__header\">{header}</h2>\n\n {/* ── Card track ──────────────────────────────────────\n * CRITICAL:\n * • display:block on desktop (not flex) — see CSS note\n * • NO overflow:hidden — breaks position:sticky\n */}\n <div className=\"ssc__track\">\n {items.map((item, i) => (\n <div\n key={i}\n ref={(el) => { cardRefs.current[i] = el; }}\n className={[\n \"ssc__card\",\n `ssc__card--${item.theme ?? \"light\"}`,\n ].join(\" \")}\n style={{\n zIndex: i + 1,\n /*\n * PEEK OFFSET — every card gets i × peek-offset so each\n * prior card shows as a thin strip at the top of the next.\n *\n * Example with 3 cards, peek = 16px:\n * Card 0 (Sign up) → 80px\n * Card 1 (Deposit) → 96px (Sign up peeks 16px above)\n * Card 2 (Trade) → 112px (Deposit peeks 16px, Sign up 32px above)\n *\n * Final state: two 16px colour strips at top, Trade fills the rest.\n */\n top: `calc(var(--ssc-sticky-top) + ${i} * var(--ssc-peek-offset))`,\n } as React.CSSProperties}\n >\n {/* Left column — text content, top-left anchored */}\n <div className=\"ssc__card-content\">\n <h3 className=\"ssc__card-title\">{item.title}</h3>\n <p className=\"ssc__card-desc\">{item.description}</p>\n </div>\n\n {/* Right column — hero image */}\n <div className=\"ssc__card-image\">\n <img\n src={item.imageUrl}\n alt={item.title}\n loading={i === 0 ? \"eager\" : \"lazy\"}\n />\n </div>\n </div>\n ))}\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default StickyStackedCards;\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n type MotionValue,\n} from \"framer-motion\";\nimport type { CTABannerProps, AvatarItem } from \"./CTABanner.types\";\nimport { Button } from \"@deriv-web-design/ui-core/core\";\nimport \"./CTABanner.css\";\n\n/* ── Entrance distance constants ─────────────────────────────────\n * How far from the centre each tier starts before scrolling in.\n * Values are intentionally large so the \"coming from far away\"\n * effect is clearly visible. Each avatar moves radially outward\n * from the centre — top avatars fly in from above, left avatars\n * from the left, corners from their diagonal, etc.\n *\n * Tier mapping (by staggerRank / distance from centre):\n * near → rank 0–1 → 80px\n * mid → rank 2–5 → 130px\n * far → rank 6–8 → 180px\n * edge → rank 9–11 → 240px (corners, most dramatic)\n *\n * blurStart: initial CSS blur in px when section enters.\n * blurStart corresponds to --spacing-16 (1rem = 16px).\n */\nconst ENTRANCE = {\n near: 80,\n mid: 130,\n far: 180,\n edge: 240,\n blurStart: 28,\n} as const;\n\n/* ── Spring config ───────────────────────────────────────────────\n * Wrapping scrollYProgress in useSpring adds a slight lag that\n * makes the parallax feel organic rather than mechanically locked\n * to the scroll wheel.\n *\n */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\n/* ── Scroll range ────────────────────────────────────────────────\n * Avatars settle into their final grid positions by this progress\n * value (0 = section just entering viewport, 0.5 = section\n * centred). After LOCK_AT, y stays clamped at 0 — they \"snap\" to\n * the grid without continuing to move.\n */\nconst LOCK_AT = 0.5;\n\n/* ── Default data ────────────────────────────────────────────────\n * Desktop positions: 9-row stage (9 × 96px = 864px).\n * Stage centre = 432px = row 4 centre → hero aligns with mid-left/right.\n * Equal 1-cell breathing room top (row 1) and bottom (row 7 bottom = 768px, stage = 864px).\n *\n * Row 1 (y=96): col 0, 6, 12 — top outer (3 avatars)\n * Row 2 (y=192): col 3, 9 — upper inner (2 avatars)\n * Row 4 (y=384): col 0, 12 — mid, hero level (2 avatars)\n * Row 6 (y=576): col 3, 9 — lower inner (2 avatars)\n * Row 7 (y=672): col 0, 6, 12 — bottom outer (3 avatars)\n *\n * Mobile/tablet: identical layout to the compact variant (6 avatars).\n *\n * staggerRank: Euclidean distance rank from stage centre (col 6.5, row 4).\n * 0 = closest → slowest parallax (near tier)\n * 11 = furthest (corner) → fastest parallax (edge tier)\n */\n\nconst PLACEHOLDER_URL =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86ce1a_footer-member-5.webp\";\n\nexport const AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col 6, row 1) ─────── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — bot-centre (col 6, row 7) ─────── */\n {\n id: 11, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 6)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 2 — upper-inner-left (col 3, row 2) ── */\n {\n id: 3, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — upper-inner-right (col 9, row 2) ── */\n {\n id: 6, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — lower-inner-left (col 3, row 6) ── */\n {\n id: 1, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 3)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — lower-inner-right (col 9, row 6) ── */\n {\n id: 10, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 9)\", top: \"calc(var(--ctab-grid-cell) * 6)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 6 — mid-left (col 0, row 4) ──────── */\n {\n id: 5, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 7 — mid-right (col 12, row 4) ────── */\n {\n id: 8, staggerRank: 7, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 4)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 8 — top-left corner (col 0, row 1) ── */\n {\n id: 4, staggerRank: 8, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 9 — top-right corner (col 12, row 1) ── */\n {\n id: 7, staggerRank: 9, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 10 — bot-left corner (col 0, row 7) ── */\n {\n id: 2, staggerRank: 10, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n /* ── Rank 11 — bot-right corner (col 12, row 7) ── */\n {\n id: 9, staggerRank: 11, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 7)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Compact variant data ────────────────────────────────────────\n * 7 desktop avatars within the 1280 × 680 stage (Figma node 6865-13441).\n * Desktop grid cell = 96px. Positions as col/row multiples.\n *\n * Mobile reuses the standard 6-avatar mobile layout (same positions).\n */\nexport const COMPACT_AVATAR_DATA: AvatarItem[] = [\n /* ── Rank 0 — top-centre (col ~6, row 1) ── */\n {\n id: 12, staggerRank: 0, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobileVisible: true,\n },\n /* ── Rank 1 — top-left (col 2, row 1) ───── */\n {\n id: 3, staggerRank: 1, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 2 — top-right (col 10, row 1) ─── */\n {\n id: 6, staggerRank: 2, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 1)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 2)\" },\n mobileVisible: true,\n },\n /* ── Rank 3 — mid-left (col 0, row 3) ────── */\n {\n id: 5, staggerRank: 3, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { left: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 4 — mid-right (col 12, row 3) ──── */\n {\n id: 8, staggerRank: 4, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 12)\", top: \"calc(var(--ctab-grid-cell) * 3)\" },\n mobilePos: { right: \"0\", top: \"calc(var(--ctab-grid-cell) * 8)\" },\n mobileVisible: true,\n },\n /* ── Rank 5 — bot-left (col 2, row 5) ────── */\n {\n id: 1, staggerRank: 5, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 2)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: { left: \"calc(50% - var(--ctab-avatar-size) / 2)\", top: \"calc(var(--ctab-grid-cell) * 9)\" },\n mobileVisible: true,\n },\n /* ── Rank 6 — bot-right (col 10, row 5) — desktop only ─── */\n {\n id: 11, staggerRank: 6, imageUrl: PLACEHOLDER_URL,\n desktopPos: { left: \"calc(var(--ctab-grid-cell) * 10)\", top: \"calc(var(--ctab-grid-cell) * 5)\" },\n mobilePos: null,\n mobileVisible: false,\n },\n];\n\n/* ── Avatar radial entrance hooks ────────────────────────────────\n *\n * Hooks cannot be called inside a loop, so each of the 12\n * useTransform calls is explicit and always runs in the same order.\n * Index maps directly to AVATAR_DATA order (= staggerRank order).\n *\n * Y sign: + = avatar starts BELOW final position (bottom half)\n * - = avatar starts ABOVE final position (top half)\n * 0 = avatar is on the horizontal mid-line\n *\n * X sign: + = avatar starts to the RIGHT (right half)\n * - = avatar starts to the LEFT (left half)\n * 0 = avatar is on the vertical mid-line\n *\n * rank 0 (col 6, row 1) top-centre → X=0, Y=-near\n * rank 1 (col 6, row 7) bot-centre → X=0, Y=+near\n * rank 2 (col 3, row 2) upper-inner-left → X=-mid, Y=-mid\n * rank 3 (col 9, row 2) upper-inner-right → X=+mid, Y=-mid\n * rank 4 (col 3, row 6) lower-inner-left → X=-mid, Y=+mid\n * rank 5 (col 9, row 6) lower-inner-right → X=+mid, Y=+mid\n * rank 6 (col 0, row 4) mid-left → X=-far, Y=0\n * rank 7 (col 12, row 4) mid-right → X=+far, Y=0\n * rank 8 (col 0, row 1) top-left corner → X=-edge, Y=-edge\n * rank 9 (col 12, row 1) top-right corner → X=+edge, Y=-edge\n * rank 10 (col 0, row 7) bot-left corner → X=-edge, Y=+edge\n * rank 11 (col 12, row 7) bot-right corner → X=+edge, Y=+edge\n */\nfunction useAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.near, 0]); // bot-centre\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const y3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-right\n const y4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-left\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const y6 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y7 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const y9 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-right corner\n const y10 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-left corner\n const y11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11];\n}\n\nfunction useAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // bot-centre (no X)\n const x2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // upper-inner-left\n const x3 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // upper-inner-right\n const x4 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // lower-inner-left\n const x5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // lower-inner-right\n const x6 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x7 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x8 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // top-left corner\n const x9 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // top-right corner\n const x10 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.edge, 0]); // bot-left corner\n const x11 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.edge, 0]); // bot-right corner\n return [x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11];\n}\n\n/* ── Compact variant parallax hooks (7 avatars) ──────────────────\n *\n * rank 0 (top-centre): X=0, Y=-near\n * rank 1 (top-left): X=-mid, Y=-mid\n * rank 2 (top-right): X=+mid, Y=-mid\n * rank 3 (mid-left): X=-far, Y=0\n * rank 4 (mid-right): X=+far, Y=0\n * rank 5 (bot-left): X=-mid, Y=+mid\n * rank 6 (bot-right): X=+mid, Y=+mid\n */\nfunction useCompactAvatarYValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const y0 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.near, 0]); // top-centre\n const y1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const y2 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-right\n const y3 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-left (no Y)\n const y4 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // mid-right (no Y)\n const y5 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-left\n const y6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [y0, y1, y2, y3, y4, y5, y6];\n}\n\nfunction useCompactAvatarXValues(smooth: MotionValue<number>): MotionValue<number>[] {\n const x0 = useTransform(smooth, [0, LOCK_AT], [0, 0]); // top-centre (no X)\n const x1 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // top-left\n const x2 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // top-right\n const x3 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.far, 0]); // mid-left\n const x4 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.far, 0]); // mid-right\n const x5 = useTransform(smooth, [0, LOCK_AT], [-ENTRANCE.mid, 0]); // bot-left\n const x6 = useTransform(smooth, [0, LOCK_AT], [ENTRANCE.mid, 0]); // bot-right\n return [x0, x1, x2, x3, x4, x5, x6];\n}\n\n/* ── CTABanner ────────────────────────────────────────────────── */\n\nexport const CTABanner = ({\n headline = \"Short section title goes here\",\n ctaLabel = \"Open account\",\n ctaHref = \"#\",\n avatars,\n variant = \"standard\",\n className,\n ...props\n}: CTABannerProps) => {\n const resolvedAvatars = avatars ?? (variant === \"compact\" ? COMPACT_AVATAR_DATA : AVATAR_DATA);\n const sectionRef = useRef<HTMLElement>(null);\n\n /* Track scroll progress as section crosses the viewport.\n * offset: \"start end\" = section top reaches viewport bottom → progress 0\n * offset: \"end start\" = section bottom reaches viewport top → progress 1\n * The spring smooths the raw scroll value into the organic\n * \"butter\" feel that matches the video reference. */\n const { scrollYProgress } = useScroll({\n target: sectionRef,\n offset: [\"start end\", \"end start\"],\n });\n\n const smooth = useSpring(scrollYProgress, SPRING);\n\n /* ── Grid: fade in as section enters ── */\n const gridOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Hero: slight upward rise + fade ── */\n const heroY = useTransform(smooth, [0, LOCK_AT], [32, 0]);\n const heroOpacity = useTransform(smooth, [0, 0.3], [0, 1]);\n\n /* ── Avatar fade: all avatars share one opacity track ── */\n const avatarOpacity = useTransform(smooth, [0, 0.25], [0, 1]);\n\n /* ── Avatar blur: clears from blurStart → 0 as section enters ──\n * useMotionTemplate builds a valid CSS filter string so Framer\n * Motion can interpolate it at 60fps without touching the DOM\n * style attribute directly. */\n const blurPx = useTransform(smooth, [0, 0.3, 0.7, 1], [ENTRANCE.blurStart, 0, 0, ENTRANCE.blurStart]);\n const avatarFilter = useMotionTemplate`blur(${blurPx}px)`;\n\n /* ── Per-avatar radial entrance ── */\n const standardYValues = useAvatarYValues(smooth);\n const standardXValues = useAvatarXValues(smooth);\n const compactYValues = useCompactAvatarYValues(smooth);\n const compactXValues = useCompactAvatarXValues(smooth);\n\n const avatarYValues = variant === \"compact\" ? compactYValues : standardYValues;\n const avatarXValues = variant === \"compact\" ? compactXValues : standardXValues;\n\n return (\n <section\n ref={sectionRef}\n className={[\"ctab\", variant === \"compact\" ? \"ctab--compact\" : \"\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n {/* ── Background grid ─────────────────────────────────── */}\n <motion.div\n className=\"ctab__grid\"\n style={{ opacity: gridOpacity }}\n aria-hidden=\"true\"\n />\n\n {/* ── Content stage ───────────────────────────────────── */}\n <div className=\"ctab__inner\">\n <div className=\"ctab__stage\">\n\n {/* ── Floating avatars ─────────────────────────────────\n * Position supplied as inline CSS custom properties so the\n * CSS token layer controls all sizing/spacing.\n *\n * Framer Motion controls only `y` (scroll-driven parallax)\n * and `opacity` (scroll-driven fade). No fixed initial\n * state — the animation is tied continuously to scroll.\n */}\n {resolvedAvatars.map((avatar, index) => {\n const posStyle: Record<string, string> = {};\n if (avatar.desktopPos.left) posStyle[\"--av-d-left\"] = avatar.desktopPos.left;\n if (avatar.desktopPos.right) posStyle[\"--av-d-right\"] = avatar.desktopPos.right;\n if (avatar.desktopPos.top) posStyle[\"--av-d-top\"] = avatar.desktopPos.top;\n if (avatar.mobilePos?.left) posStyle[\"--av-m-left\"] = avatar.mobilePos.left;\n if (avatar.mobilePos?.right) posStyle[\"--av-m-right\"] = avatar.mobilePos.right;\n if (avatar.mobilePos?.top) posStyle[\"--av-m-top\"] = avatar.mobilePos.top;\n\n return (\n <motion.div\n key={avatar.id}\n className={[\n \"ctab__avatar\",\n !avatar.mobileVisible ? \"ctab__avatar--desktop-only\" : \"\",\n ].filter(Boolean).join(\" \")}\n style={{\n ...(posStyle as React.CSSProperties),\n x: avatarXValues[index],\n y: avatarYValues[index],\n opacity: avatarOpacity,\n filter: avatarFilter,\n }}\n >\n <img\n src={avatar.imageUrl}\n alt=\"\"\n loading=\"lazy\"\n draggable={false}\n />\n </motion.div>\n );\n })}\n\n {/* ── Hero — headline + CTA ──────────────────── */}\n <motion.div\n className=\"ctab__hero\"\n style={{ y: heroY, opacity: heroOpacity }}\n >\n <h2 className=\"ctab__headline\">{headline}</h2>\n <a href={ctaHref}>\n <Button colorScheme=\"black\" variant=\"primary\" label={ctaLabel} />\n </a>\n </motion.div>\n\n </div>\n </div>\n </section>\n );\n};\n\nexport default CTABanner;\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n motion,\n useScroll,\n useSpring,\n useTransform,\n useMotionTemplate,\n} from \"framer-motion\";\nimport type { DayNightTransitionProps } from \"./DayNightTransition.types\";\nimport {\n webflowV2DayClipPercent,\n webflowV2DayWordOpacity,\n webflowV2DescriptionColor,\n webflowV2NightWordOpacity,\n webflowV2TitleColor,\n type WebflowDayNightV2Media,\n} from \"./webflowDayNightV2Ix\";\nimport \"./DayNightTransition.css\";\n\n/* ── Spring config (default preset only) ──────────────────────── */\nconst SPRING = { stiffness: 80, damping: 30, restDelta: 0.001 } as const;\n\nconst FADE_START = 0.35;\nconst FADE_END = 0.65;\n\n/** Webflow V2 desktop (>991px): dual headline/description crossfade on section `scrollYProgress`. */\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START = 0.49;\nconst V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END = 0.52;\n\n/** Webflow V2 mobile (≤991px): same crossfade, separate IX-aligned band. */\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_START = 0.58;\nconst V2_TEXT_SCROLL_CROSSFADE_MOBILE_END = 0.61;\n\nconst TEXT_CHANNEL_DAY = 0;\nconst TEXT_CHANNEL_NIGHT = 255;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return v0 + (v1 - v0) * ((t - t0) / (t1 - t0));\n};\n\n/* ── DayNightTransition ───────────────────────────────────────── */\n\nexport const DayNightTransition = ({\n dayImageUrl,\n nightImageUrl,\n dayHeadline = \"Medium length section title goes here\",\n nightHeadline = \"Medium length section title goes here\",\n dayDescription = \"Description goes here. Description goes here. Description goes here.\",\n nightDescription = \"Description goes here. Description goes here. Description goes here.\",\n ctaLabel = \"Get started\",\n ctaHref = \"#\",\n hideCta = false,\n headlineLevel = \"h2\",\n descriptionLevel = \"body-md\",\n inlineDayNightHeadline,\n scrollPreset = \"default\",\n className,\n ...props\n}: DayNightTransitionProps) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dayWordRef = useRef<HTMLSpanElement>(null);\n\n const [nightMarginStart, setNightMarginStart] = useState(\"0px\");\n const [nightMarginEnd, setNightMarginEnd] = useState(\"0px\");\n\n const [ixMedia, setIxMedia] = useState<WebflowDayNightV2Media>(\"desktop\");\n\n const webflowV2 = scrollPreset === \"webflow-day-night-v2\";\n\n useEffect(() => {\n const mq = window.matchMedia(\"(max-width: 991px)\");\n const sync = () => setIxMedia(mq.matches ? \"mobile\" : \"desktop\");\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n\n const MotionHeadline = headlineLevel === \"h1\" ? motion.h1 : motion.h2;\n\n useLayoutEffect(() => {\n if (!inlineDayNightHeadline) return;\n\n const syncNightPull = () => {\n const dayEl = dayWordRef.current;\n if (!dayEl) return;\n const w = dayEl.offsetWidth;\n const doc = document.documentElement;\n const rtl =\n doc.getAttribute(\"dir\") === \"rtl\" ||\n doc.lang.toLowerCase().startsWith(\"ar\");\n if (rtl) {\n setNightMarginStart(\"0px\");\n setNightMarginEnd(w ? `-${w}px` : \"0px\");\n } else {\n setNightMarginStart(w ? `-${w}px` : \"0px\");\n setNightMarginEnd(\"0px\");\n }\n };\n\n syncNightPull();\n const ro = new ResizeObserver(syncNightPull);\n if (dayWordRef.current) ro.observe(dayWordRef.current);\n window.addEventListener(\"resize\", syncNightPull);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", syncNightPull);\n };\n }, [\n inlineDayNightHeadline,\n inlineDayNightHeadline?.dayWord,\n inlineDayNightHeadline?.nightWord,\n inlineDayNightHeadline?.prefix,\n ]);\n\n const { scrollYProgress } = useScroll({\n target: wrapperRef,\n offset: [\"start end\", \"end start\"],\n });\n\n /* Webflow IX uses raw scroll progress (smoothing:50 is mild; spring would skew keyframes). */\n const smooth = useSpring(scrollYProgress, SPRING);\n const progress = webflowV2 ? scrollYProgress : smooth;\n\n const nightOpacity = useTransform(progress, [FADE_START, FADE_END], [0, 1]);\n const channel = useTransform(progress, [FADE_START, FADE_END], [TEXT_CHANNEL_DAY, TEXT_CHANNEL_NIGHT]);\n const textColor = useMotionTemplate`rgb(${channel}, ${channel}, ${channel})`;\n\n /**\n * Dual headline / description crossfade.\n * - Default: [FADE_START, FADE_END] with the night image opacity.\n * - Webflow V2: desktop vs mobile `scrollYProgress` bands (see `V2_TEXT_SCROLL_CROSSFADE_*`).\n */\n const dayOpacity = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 1,\n 0,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 1,\n 0,\n );\n }\n return seg(t, FADE_START, FADE_END, 1, 0);\n });\n const nightOpacity2 = useTransform(progress, (t) => {\n if (webflowV2) {\n return ixMedia === \"mobile\"\n ? seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_START,\n V2_TEXT_SCROLL_CROSSFADE_MOBILE_END,\n 0,\n 1,\n )\n : seg(\n t,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_START,\n V2_TEXT_SCROLL_CROSSFADE_DESKTOP_END,\n 0,\n 1,\n );\n }\n return seg(t, FADE_START, FADE_END, 0, 1);\n });\n\n const v2DescColor = useTransform(progress, (t) => webflowV2DescriptionColor(t, ixMedia));\n const v2TitleColor = useTransform(progress, (t) => webflowV2TitleColor(t, ixMedia));\n const v2DayWordOp = useTransform(progress, (t) => webflowV2DayWordOpacity(t, ixMedia));\n const v2NightWordOp = useTransform(progress, (t) => webflowV2NightWordOpacity(t, ixMedia));\n /**\n * IX mobile: `STYLE_SIZE` uses **%** on `.trade-day-night_background-day` (parent = 200vh wrapper).\n * Desktop: fixed `100vh` like `.is-alternative` in Webflow CSS.\n */\n const v2DayHeight = useTransform(progress, (t) =>\n ixMedia === \"mobile\"\n ? `${webflowV2DayClipPercent(t, ixMedia)}%`\n : \"100vh\",\n );\n\n const hasDescription = Boolean(dayDescription || nightDescription);\n\n const useInlineHeadline = Boolean(inlineDayNightHeadline);\n\n const rootClass = [\n \"dnt\",\n headlineLevel === \"h1\" && \"dnt--headline-h1\",\n descriptionLevel === \"body-lg\" && \"dnt--desc-body-lg\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n ref={wrapperRef}\n className={rootClass}\n {...props}\n >\n {webflowV2 && (\n <div className=\"dnt__v2-background-wrapper\" aria-hidden=\"true\">\n {/*\n Webflow DOM order (both layers, both images):\n 1) trade-day-night_background-day\n 2) trade-day-night_background-night\n */}\n <motion.div\n className=\"dnt__v2-bg-day trade-day-night_background-day is-alternative\"\n style={{\n backgroundImage: `url(${dayImageUrl})`,\n height: v2DayHeight,\n }}\n />\n <div\n className=\"dnt__v2-bg-night trade-day-night_background-night is-alternative\"\n style={{ backgroundImage: `url(${nightImageUrl})` }}\n />\n </div>\n )}\n\n <div className={webflowV2 ? \"dnt__sticky dnt__sticky--webflow-v2\" : \"dnt__sticky\"}>\n\n {!webflowV2 && (\n <>\n <img\n className=\"dnt__bg dnt__bg--day\"\n src={dayImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n />\n <motion.img\n className=\"dnt__bg dnt__bg--night\"\n src={nightImageUrl}\n alt=\"\"\n loading=\"eager\"\n draggable={false}\n style={{ opacity: nightOpacity }}\n />\n </>\n )}\n\n <div className=\"dnt__content\">\n <div className=\"dnt__inner\">\n {webflowV2 ? (\n <div className=\"dnt__text-wrap\">\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n style={{ color: v2TitleColor }}\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: v2DayWordOp }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: v2NightWordOp,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ color: v2TitleColor, opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ color: v2TitleColor, opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{\n color: v2DescColor,\n opacity: dayOpacity,\n }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{\n color: v2DescColor,\n opacity: nightOpacity2,\n }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </div>\n ) : (\n <motion.div\n className=\"dnt__text-wrap\"\n style={{ color: textColor }}\n >\n {useInlineHeadline && inlineDayNightHeadline ? (\n <MotionHeadline\n className=\"dnt__headline dnt__headline--inline-day-night\"\n aria-label={`${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.dayWord} / ${inlineDayNightHeadline.prefix}${inlineDayNightHeadline.nightWord}`}\n >\n <span className=\"dnt__headline-prefix\">\n {inlineDayNightHeadline.prefix}\n </span>\n <span className=\"dnt__headline-pair\">\n <motion.span\n ref={dayWordRef}\n className=\"dnt__headline-wday\"\n style={{ opacity: dayOpacity }}\n >\n {inlineDayNightHeadline.dayWord}\n </motion.span>\n <motion.span\n className=\"dnt__headline-wnight\"\n style={{\n opacity: nightOpacity2,\n marginInlineStart: nightMarginStart,\n marginInlineEnd: nightMarginEnd,\n }}\n >\n {inlineDayNightHeadline.nightWord}\n </motion.span>\n </span>\n </MotionHeadline>\n ) : (\n <div className=\"dnt__crossfade-wrap\">\n <MotionHeadline\n className=\"dnt__headline\"\n style={{ opacity: dayOpacity }}\n >\n {dayHeadline}\n </MotionHeadline>\n <MotionHeadline\n className=\"dnt__headline\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightHeadline}\n </MotionHeadline>\n </div>\n )}\n\n {hasDescription && (\n <div className=\"dnt__crossfade-wrap\">\n <motion.p\n className=\"dnt__description\"\n style={{ opacity: dayOpacity }}\n >\n {dayDescription ?? \"\"}\n </motion.p>\n <motion.p\n className=\"dnt__description\"\n aria-hidden=\"true\"\n style={{ opacity: nightOpacity2 }}\n >\n {nightDescription ?? \"\"}\n </motion.p>\n </div>\n )}\n\n {!hideCta && (\n <a href={ctaHref} className=\"dnt__btn\">\n {ctaLabel}\n </a>\n )}\n </motion.div>\n )}\n </div>\n </div>\n\n </div>\n </div>\n );\n};\n\nexport default DayNightTransition;\n","/**\n * Scroll mapping reverse-engineered from Webflow IX2 in\n * `DayNightTransitionV2/js/webflow.js` (actionLists `a` = mobile, `a-2` = desktop).\n * `t` is continuous scroll progress 0 → 1 on the 200vh driver (SCROLL_PROGRESS).\n */\n\nexport type WebflowDayNightV2Media = \"desktop\" | \"mobile\";\n\n/** Description swatch from IX (STYLE_TEXT_COLOR r/g/b). */\nconst DESC_SWATCH = { r: 24, g: 28, b: 37 } as const;\n\n/** Webflow `body { color: #333 }` before IX touches description (mobile). */\nconst BODY_TEXT = { r: 51, g: 51, b: 51 } as const;\n\nconst rgb = (r: number, g: number, b: number) => `rgb(${r},${g},${b})`;\n\nconst lerp = (a: number, b: number, u: number) => a + (b - a) * u;\n\n/** Piecewise linear between (t0,v0) and (t1,v1); clamps outside [t0,t1]. */\nconst seg = (t: number, t0: number, t1: number, v0: number, v1: number) => {\n if (t <= t0) return v0;\n if (t >= t1) return v1;\n return lerp(v0, v1, (t - t0) / (t1 - t0));\n};\n\nexport function webflowV2DescriptionColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n /* IX kf 49 → swatch, kf 50 → white; before kf 49 inherits `body` #333. */\n if (t < 0.49) return body;\n if (t < 0.5) return dark;\n return white;\n }\n /* mobile: default body #333 until kf 58 → IX swatch, kf 59 → white. */\n const white = rgb(255, 255, 255);\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n if (t < 0.58) return body;\n if (t < 0.59) return dark;\n return white;\n}\n\n/** Title / prefix colour on `.trade-day-night_title.new-heading-style-h1`. */\nexport function webflowV2TitleColor(t: number, media: WebflowDayNightV2Media): string {\n if (media === \"desktop\") {\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n const black = rgb(0, 0, 0);\n const white = rgb(255, 255, 255);\n /* Title first touched at IX kf 51 (#000); before that inherits `body` #333. */\n if (t < 0.51) return body;\n if (t >= 0.52) return white;\n return seg(t, 0.51, 0.52, black, white);\n }\n const dark = rgb(DESC_SWATCH.r, DESC_SWATCH.g, DESC_SWATCH.b);\n const white = rgb(255, 255, 255);\n const body = rgb(BODY_TEXT.r, BODY_TEXT.g, BODY_TEXT.b);\n /* IX kf 60 → dark title, kf 61 → white; before IX, title inherits `body` #333. */\n if (t < 0.6) return body;\n if (t >= 0.61) return white;\n const u = (t - 0.6) / 0.01;\n return rgb(\n lerp(DESC_SWATCH.r, 255, u),\n lerp(DESC_SWATCH.g, 255, u),\n lerp(DESC_SWATCH.b, 255, u),\n );\n}\n\nexport function webflowV2DayWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 1;\n if (t >= 0.52) return 0;\n return seg(t, 0.51, 0.52, 1, 0);\n }\n if (t < 0.6) return 1;\n if (t >= 0.61) return 0;\n return seg(t, 0.6, 0.61, 1, 0);\n}\n\nexport function webflowV2NightWordOpacity(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") {\n if (t < 0.51) return 0;\n if (t >= 0.52) return 1;\n return seg(t, 0.51, 0.52, 0, 1);\n }\n if (t < 0.6) return 0;\n if (t >= 0.61) return 1;\n return seg(t, 0.6, 0.61, 0, 1);\n}\n\n/** Scroll progress (0–1 on the 200vh driver) where mobile day-layer height finishes (IX kf 65). */\nexport const WEBFLOW_V2_DAY_CLIP_SCROLL_END = 0.65;\n\n/**\n * Mobile only: IX2 `STYLE_SIZE` height **%** on `.trade-day-night_background-day.is-alternative`\n * from keyframe **0 → 65** (parent height = `.trade-day-night_background-wrapper` / 200vh track).\n * Returns **0–100** for use as `${value}%` in Framer.\n */\nexport function webflowV2DayClipPercent(t: number, media: WebflowDayNightV2Media): number {\n if (media === \"desktop\") return 100;\n return seg(t, 0, WEBFLOW_V2_DAY_CLIP_SCROLL_END, 100, 0);\n}\n","import type { DayNightTransitionProps } from \"./DayNightTransition.types\";\n\n/**\n * **DayNightTransitionV2** Storybook preset: same headlines, body copy, CTA, and\n * typography defaults (h2 + body-md) as the **Default** story; Webflow IX2 scroll\n * timing via `scrollPreset: \"webflow-day-night-v2\"` plus `dnt--layout-v2` /\n * `dnt--webflow-v2` for layout and backgrounds.\n */\nexport const dayNightTransitionV2Preset: Pick<\n DayNightTransitionProps,\n | \"className\"\n | \"dayImageUrl\"\n | \"nightImageUrl\"\n | \"dayHeadline\"\n | \"nightHeadline\"\n | \"dayDescription\"\n | \"nightDescription\"\n | \"ctaLabel\"\n | \"ctaHref\"\n | \"scrollPreset\"\n> = {\n className: \"dnt--layout-v2 dnt--webflow-v2\",\n scrollPreset: \"webflow-day-night-v2\",\n dayImageUrl:\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86cd8f_trade_day.webp\",\n nightImageUrl:\n \"https://cdn.prod.website-files.com/66585fe0e1dc7e70cc75d440/6757df573bf331c84b6c69fe_trade_night.webp\",\n dayHeadline: \"Section title light\\n\",\n nightHeadline: \"Section title dark\\n\",\n dayDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\\n\",\n nightDescription:\n \"This section is designed to give your visitors a quick overview of why your solution is the right choice. Use this space to provide high-level context.\",\n ctaLabel: \"Open account\",\n ctaHref: \"#\",\n};\n","import { useRef } from \"react\";\nimport {\n motion,\n useScroll,\n useVelocity,\n useAnimationFrame,\n useMotionValue,\n} from \"framer-motion\";\nimport type { LogoMarqueeProps, LogoItem } from \"./LogoMarquee.types\";\nimport \"./LogoMarquee.css\";\n\n/* ── Modular wrap ─────────────────────────────────────────────────\n * Keeps `v` cycling within [min, max).\n * JS % operator returns negative results for negative numbers, so\n * we normalise with the double-mod pattern.\n *\n * Example (cycleH = 1500):\n * modWrap(-1500, 0, -1501) → -1\n * modWrap(-1500, 0, 1) → -1499 (seamless cross-boundary)\n */\nfunction modWrap(min: number, max: number, v: number): number {\n const range = max - min;\n return ((((v - min) % range) + range) % range) + min;\n}\n\n/* ── Speed constants ──────────────────────────────────────────────\n * VELOCITY_FACTOR scales raw scroll px/s → column marquee px/s.\n * MAX_SCROLL_V clamps very fast flicks so the marquee stays\n * readable instead of blurring past.\n * DEADZONE minimum scroll velocity (px/s) needed to move\n * the columns — prevents micro-drift from inertia.\n */\nconst VELOCITY_FACTOR = 0.4;\nconst MAX_SCROLL_V = 2500;\nconst DEADZONE = 2;\n\n/* ── Placeholder image ────────────────────────────────────────── */\n\nconst PLACEHOLDER_IMAGE =\n \"https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/69b9309379ac08e59ca8210a_1f3f555da9a5cbb13a6fe1bf0d5fe1b6_placeholder-image.webp\";\n\n/* ── Logo data ────────────────────────────────────────────────── */\n\nexport const COL_ONE_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const COL_TWO_LOGOS: LogoItem[] = [\n { name: \"Logo 1\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 2\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 3\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 4\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 5\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 6\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 7\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 8\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 9\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 10\", url: PLACEHOLDER_IMAGE },\n { name: \"Logo 11\", url: PLACEHOLDER_IMAGE },\n];\n\nexport const TEXT_CONTENT = {\n headline: \"Section title goes here\",\n body: \"Explain how this specific feature helps your user.\",\n disclaimer: \"*Add any relevant disclaimers or legal copy here.\",\n ctaLabel: \"Learn more\",\n ctaHref: \"#\",\n};\n\n/* ── LogoMarquee ──────────────────────────────────────────────── */\n\nexport const LogoMarquee = ({\n headline = TEXT_CONTENT.headline,\n body = TEXT_CONTENT.body,\n disclaimer = TEXT_CONTENT.disclaimer,\n ctaLabel = TEXT_CONTENT.ctaLabel,\n ctaHref = TEXT_CONTENT.ctaHref,\n col1Logos = COL_ONE_LOGOS,\n col2Logos = COL_TWO_LOGOS,\n className,\n ...props\n}: LogoMarqueeProps) => {\n /* ── Scroll velocity source ─────────────────────────────────────\n * useScroll() (no args) tracks the global window scroll.\n * useVelocity() derives the rate of change in px/s.\n * When the user isn't scrolling, velocity → 0 and the columns\n * freeze immediately — no spring lag, no easing drift.\n */\n const { scrollY } = useScroll();\n const scrollVelocity = useVelocity(scrollY);\n\n /* ── Column Y positions ─────────────────────────────────────────\n * useMotionValue gives Framer Motion a mutable number it can\n * directly wire to the DOM transform without React re-renders.\n */\n const col1Y = useMotionValue(0);\n const col2Y = useMotionValue(0);\n\n /* Refs to measure each column's rendered height so modWrap can\n * calculate the exact single-cycle length at runtime. */\n const col1Ref = useRef<HTMLDivElement>(null);\n const col2Ref = useRef<HTMLDivElement>(null);\n\n /* ── Per-frame marquee update ───────────────────────────────────\n * useAnimationFrame runs every rAF tick.\n * `delta` is ms since the previous frame (~16 at 60 fps).\n *\n * step = scrollVelocity (px/s) × VELOCITY_FACTOR × (delta / 1000s)\n *\n * Col 1 subtracts step → scrolls UP when scrolling down.\n * Col 2 adds step → scrolls DOWN when scrolling down.\n * Opposite on scroll-up — naturally reversed.\n *\n * modWrap(-cycleH, 0, newPos) keeps the position looping within\n * one cycle so the column never runs out of cards.\n */\n useAnimationFrame((_, delta) => {\n const raw = scrollVelocity.get();\n\n // Frozen while not scrolling\n if (Math.abs(raw) < DEADZONE) return;\n\n const clamped = Math.sign(raw) * Math.min(Math.abs(raw), MAX_SCROLL_V);\n const step = clamped * VELOCITY_FACTOR * (delta / 1000);\n\n // Single-cycle height = half of total track (2× duplication)\n const cycleH1 = (col1Ref.current?.offsetHeight ?? 2000) / 2;\n const cycleH2 = (col2Ref.current?.offsetHeight ?? 2000) / 2;\n\n col1Y.set(modWrap(-cycleH1, 0, col1Y.get() - step)); // UP\n col2Y.set(modWrap(-cycleH2, 0, col2Y.get() + step)); // DOWN (opposite)\n });\n\n /* 2× duplication creates a seamless loop:\n * offsetHeight / 2 = one cycle → wrapping at that boundary\n * always reveals identical content (the other copy). */\n const track1 = [...col1Logos, ...col1Logos];\n const track2 = [...col2Logos, ...col2Logos];\n\n return (\n <section\n className={[\"lm\", className].filter(Boolean).join(\" \")}\n {...props}\n >\n <div className=\"lm__inner\">\n\n {/* ── Media — two opposing marquee columns ──────── */}\n <div className=\"lm__media\">\n <div className=\"lm__carousel\">\n\n {/* Top gradient fade */}\n <div className=\"lm__fade lm__fade--top\" aria-hidden=\"true\" />\n\n {/* Column 1 — scrolls UP when page scrolls DOWN */}\n <motion.div\n ref={col1Ref}\n className=\"lm__col\"\n style={{ y: col1Y }}\n >\n {track1.map((logo, i) => (\n <div key={`c1-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Column 2 — scrolls DOWN when page scrolls DOWN */}\n <motion.div\n ref={col2Ref}\n className=\"lm__col\"\n style={{ y: col2Y }}\n >\n {track2.map((logo, i) => (\n <div key={`c2-${i}`} className=\"lm__card\">\n <div className=\"lm__card-img-wrap\">\n <img\n src={logo.url}\n alt={logo.name}\n loading=\"lazy\"\n draggable={false}\n />\n </div>\n </div>\n ))}\n </motion.div>\n\n {/* Bottom gradient fade */}\n <div className=\"lm__fade lm__fade--bottom\" aria-hidden=\"true\" />\n\n </div>\n </div>\n\n {/* ── Text content ────────────────────────────── */}\n <div className=\"lm__content\">\n <h2 className=\"lm__headline\">{headline}</h2>\n\n <div className=\"lm__text-group\">\n <p className=\"lm__body\">{body}</p>\n <p className=\"lm__disclaimer\">{disclaimer}</p>\n </div>\n\n <a href={ctaHref} className=\"lm__link\">\n {ctaLabel}\n <span className=\"lm__link-icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </a>\n </div>\n\n </div>\n </section>\n );\n};\n\nexport default LogoMarquee;\n","import type { StepsProps } from \"./Steps.types\";\nimport \"./Steps.css\";\n\nexport const Steps = ({\n title,\n steps,\n image,\n imageAlt = \"\",\n imagePosition = \"left\",\n}: StepsProps) => {\n const containerClass = [\n \"steps__container\",\n imagePosition === \"right\" ? \"steps__container--image-right\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <section className=\"steps\">\n <div className={containerClass}>\n {/* ── Image column ── */}\n {image && (\n <div className=\"steps__image-wrapper\">\n <img\n src={image}\n alt={imageAlt}\n className=\"steps__image\"\n />\n </div>\n )}\n\n {/* ── Content column ── */}\n <div className=\"steps__content\">\n <h2 className=\"steps__title\">{title}</h2>\n\n <ol className=\"steps__list\">\n {steps.map((step, index) => (\n <li key={index} className=\"steps__item\">\n <div className=\"steps__item-inner\">\n <span className=\"steps__number\" aria-hidden=\"true\">\n {index + 1}\n </span>\n\n <div className=\"steps__item-body\">\n <h3 className=\"steps__item-title\">\n {step.title}\n </h3>\n <p className=\"steps__item-description\">\n {step.description}\n </p>\n </div>\n </div>\n </li>\n ))}\n </ol>\n </div>\n </div>\n </section>\n );\n};\n","import { DownloadBadge } from \"@deriv-web-design/ui-core/core\";\nimport type { DownloadBannerProps } from \"./DownloadBanner.types\";\nimport \"./DownloadBanner.css\";\n\nexport const DownloadBanner = ({\n style = \"light-2\",\n qrCodeImage,\n qrCodeAlt = \"QR code to download the app\",\n qrTitle = \"Scan to download\",\n qrSubtitle = \"Android & iOS\",\n mobileTitle = \"Available on\",\n showAppStore = true,\n showGooglePlay = true,\n showAppGallery = true,\n showWindows = true,\n showMacOS = true,\n showLinux = true,\n showWeb = true,\n appStoreHref,\n googlePlayHref,\n appGalleryHref,\n windowsHref,\n macOSHref,\n linuxHref,\n webHref,\n disclaimer,\n}: DownloadBannerProps) => {\n const colorScheme = style === \"dark\" ? \"dark\" : \"light\";\n\n return (\n <section className={`db-section db-section--${style}`}>\n <div className=\"db-container\">\n <div className=\"db-card\">\n {/* ── QR block (desktop) / heading (mobile) ── */}\n <div className=\"db-qr-block\">\n {qrCodeImage && (\n <img\n className=\"db-qr-image\"\n src={qrCodeImage}\n alt={qrCodeAlt}\n />\n )}\n <div className=\"db-qr-text\">\n {/* Desktop: two-line QR label */}\n <span className=\"db-qr-text__title db-qr-text__title--desktop\">\n {qrTitle}\n </span>\n <h2 className=\"db-qr-text__subtitle db-qr-text__subtitle--desktop\">\n {qrSubtitle}\n </h2>\n {/* Mobile: single heading */}\n <span className=\"db-qr-text__title db-qr-text__title--mobile\">\n {mobileTitle}\n </span>\n {disclaimer && (\n <span className=\"db-disclaimer\">{disclaimer}</span>\n )}\n </div>\n </div>\n\n {/* ── Badge grid ── */}\n <div className=\"db-badges\">\n {showGooglePlay && (\n <DownloadBadge platform=\"googleplay\" colorScheme={colorScheme} href={googlePlayHref} />\n )}\n {showAppGallery && (\n <DownloadBadge platform=\"appgallery\" colorScheme={colorScheme} href={appGalleryHref} />\n )}\n {showMacOS && (\n <DownloadBadge platform=\"macos\" colorScheme={colorScheme} href={macOSHref} />\n )}\n {showWindows && (\n <DownloadBadge platform=\"windows\" colorScheme={colorScheme} href={windowsHref} />\n )}\n {showLinux && (\n <DownloadBadge platform=\"linux\" colorScheme={colorScheme} href={linuxHref} />\n )}\n {showAppStore && (\n <DownloadBadge platform=\"appstore\" colorScheme={colorScheme} href={appStoreHref} />\n )}\n {showWeb && (\n <DownloadBadge platform=\"web\" colorScheme={colorScheme} href={webHref} />\n )}\n </div>\n </div>\n </div>\n </section>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport type { TextScrollProps } from \"./TextScroll.types\";\nimport \"./TextScroll.css\";\n\ngsap.registerPlugin(ScrollTrigger);\n\nexport const TextScroll = ({ text, className }: TextScrollProps) => {\n const sectionRef = useRef<HTMLElement>(null);\n const wordsRef = useRef<HTMLSpanElement[]>([]);\n\n /* Split the text string into individual word <span> elements.\n We do this in render so SSR / hydration is consistent. */\n const words = text.split(/\\s+/).filter(Boolean);\n\n useEffect(() => {\n const section = sectionRef.current;\n const wordEls = wordsRef.current.filter(Boolean);\n if (!section || wordEls.length === 0) return;\n\n const isMobile = window.matchMedia(\"(max-width: 767px)\").matches;\n const startValue = isMobile ? \"top 35%\" : \"top center\";\n const endValue = isMobile ? \"bottom 90%\" : \"bottom center\";\n\n /* Defer setup by one frame so the first paint renders words at\n full opacity (no flash of invisible content). After the frame,\n dim them and attach ScrollTrigger. */\n const rafId = requestAnimationFrame(() => {\n gsap.set(wordEls, { opacity: 0.2 });\n\n const tl = gsap.timeline({\n scrollTrigger: {\n trigger: section,\n start: startValue,\n end: endValue,\n scrub: 2,\n },\n });\n\n tl.to(wordEls, {\n opacity: 1,\n stagger: 0.1,\n ease: \"none\",\n });\n\n /* Store cleanup on the section element so the return fn can reach it */\n (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl = tl;\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n const tl = (section as HTMLElement & { _tl?: gsap.core.Timeline })._tl;\n if (tl) {\n tl.scrollTrigger?.kill();\n tl.kill();\n }\n gsap.set(wordEls, { clearProps: \"opacity\" });\n };\n }, [text]);\n\n return (\n <section\n ref={sectionRef}\n className={[\"ts\", className].filter(Boolean).join(\" \")}\n >\n <div className=\"ts__inner\">\n <p className=\"ts__text\" aria-label={text}>\n {words.map((word, i) => (\n <span\n key={i}\n ref={(el) => {\n if (el) wordsRef.current[i] = el;\n }}\n className=\"ts__word\"\n aria-hidden=\"true\"\n >\n {word}\n {i < words.length - 1 ? \" \" : \"\"}\n </span>\n ))}\n </p>\n </div>\n </section>\n );\n};\n\nexport default TextScroll;\n"],"mappings":"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","names":["Card","Link","jsx","jsxs","Link","Card","jsx","jsxs","useEffect","useRef","jsx","jsxs","useRef","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useRef","jsx","jsxs","useRef","useEffect","useRef","Button","jsx","jsxs","useRef","Button","useEffect","useLayoutEffect","useRef","useState","motion","useScroll","useSpring","useTransform","useMotionTemplate","body","dark","white","jsx","jsxs","SPRING","seg","useRef","useState","useEffect","motion","useLayoutEffect","useScroll","useSpring","useTransform","useMotionTemplate","useRef","motion","useScroll","jsx","jsxs","PLACEHOLDER_IMAGE","useScroll","useRef","motion","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","useRef","useEffect"]}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@deriv-web-design/ui-templates",
3
+ "version": "0.0.1",
4
+ "main": "./dist/index.js",
5
+ "module": "./dist/index.mjs",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js"
12
+ },
13
+ "./styles.css": "./dist/index.css"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "publishConfig": {
19
+ "registry": "https://registry.npmjs.org",
20
+ "access": "public"
21
+ },
22
+ "dependencies": {
23
+ "gsap": "^3.15.0",
24
+ "@deriv-web-design/ui-core": "0.0.19"
25
+ },
26
+ "peerDependencies": {
27
+ "framer-motion": "^11 || ^12",
28
+ "react": "^18 || ^19",
29
+ "react-dom": "^18 || ^19"
30
+ },
31
+ "devDependencies": {
32
+ "@storybook/react": "^10.2.17",
33
+ "@types/react": "^19.2.14",
34
+ "@types/react-dom": "^19.2.3",
35
+ "react": "^19.0.0",
36
+ "react-dom": "^19.0.0",
37
+ "tsup": "^8.5.1",
38
+ "typescript": "^5.7.0"
39
+ },
40
+ "scripts": {
41
+ "build": "tsup",
42
+ "dev": "tsup --watch"
43
+ }
44
+ }