@deriv-com/dds-marketing 1.1.2 → 1.2.0
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/.llm/components/accordion.md +10 -0
- package/.llm/components/accordionitem.md +10 -0
- package/.llm/components/aspectratio.md +10 -0
- package/.llm/components/awards.md +10 -0
- package/.llm/components/background.md +52 -9
- package/.llm/components/badge.md +13 -3
- package/.llm/components/bottomsheet.md +13 -3
- package/.llm/components/breadcrumb.md +10 -0
- package/.llm/components/breadcrumbitem.md +10 -0
- package/.llm/components/button.md +13 -3
- package/.llm/components/buttonicon.md +17 -7
- package/.llm/components/card.md +11 -1
- package/.llm/components/cardbody.md +12 -2
- package/.llm/components/cardbutton.md +10 -0
- package/.llm/components/checkbox.md +7 -1
- package/.llm/components/comparisoncards.md +13 -3
- package/.llm/components/comparisontable.md +10 -0
- package/.llm/components/ctabanner.md +10 -0
- package/.llm/components/ctabannerslider.md +10 -0
- package/.llm/components/datatable.md +10 -0
- package/.llm/components/divider.md +10 -0
- package/.llm/components/documentlink.md +237 -0
- package/.llm/components/documents.md +268 -0
- package/.llm/components/downloadbanner.md +11 -1
- package/.llm/components/dropdownmenu.md +15 -5
- package/.llm/components/estimator.md +342 -0
- package/.llm/components/faqaccordion.md +10 -0
- package/.llm/components/featurebullets.md +10 -0
- package/.llm/components/featurecards.md +47 -3
- package/.llm/components/featurecardscarousel.md +11 -1
- package/.llm/components/featurescroll.md +10 -0
- package/.llm/components/featuresplit.md +10 -0
- package/.llm/components/featurestack.md +10 -0
- package/.llm/components/featuretabs.md +369 -0
- package/.llm/components/filterchip.md +11 -1
- package/.llm/components/footer.md +10 -0
- package/.llm/components/footergroup.md +10 -0
- package/.llm/components/grid.md +34 -1
- package/.llm/components/icon.md +15 -5
- package/.llm/components/illustrationcard.md +56 -2
- package/.llm/components/illustrationcheck.md +193 -0
- package/.llm/components/illustrationchoice.md +187 -0
- package/.llm/components/illustrationcode.md +192 -0
- package/.llm/components/illustrationlist.md +175 -0
- package/.llm/components/illustrationscene.md +33 -3
- package/.llm/components/imagebanner.md +35 -6
- package/.llm/components/landinghero.md +10 -0
- package/.llm/components/link.md +12 -2
- package/.llm/components/logocolumns.md +11 -1
- package/.llm/components/logorows.md +46 -2
- package/.llm/components/menuitem.md +12 -2
- package/.llm/components/navbar.md +11 -1
- package/.llm/components/navbaritem.md +10 -0
- package/.llm/components/navbarmenu.md +10 -0
- package/.llm/components/navbarmenugroup.md +10 -0
- package/.llm/components/navbarpanel.md +10 -0
- package/.llm/components/navbarswitcher.md +16 -6
- package/.llm/components/navbarswitcheroption.md +10 -0
- package/.llm/components/option.md +11 -1
- package/.llm/components/pageheader.md +10 -0
- package/.llm/components/pagination.md +10 -0
- package/.llm/components/paginationdots.md +10 -0
- package/.llm/components/producthero.md +33 -4
- package/.llm/components/progressbar.md +305 -0
- package/.llm/components/removablechip.md +11 -1
- package/.llm/components/resourcebanner.md +10 -0
- package/.llm/components/row.md +10 -0
- package/.llm/components/scenescroll.md +42 -24
- package/.llm/components/scenescrollword.md +267 -0
- package/.llm/components/scroller.md +10 -0
- package/.llm/components/searchinput.md +10 -0
- package/.llm/components/segmentedcontrol.md +33 -2
- package/.llm/components/segmentedcontrolitem.md +12 -2
- package/.llm/components/select.md +10 -0
- package/.llm/components/selectchip.md +10 -0
- package/.llm/components/spinner.md +10 -0
- package/.llm/components/stack.md +10 -0
- package/.llm/components/stats.md +50 -1
- package/.llm/components/statscarousel.md +227 -0
- package/.llm/components/statusdot.md +45 -1
- package/.llm/components/steps.md +10 -0
- package/.llm/components/stickycards.md +10 -0
- package/.llm/components/subdomainnavbar.md +11 -1
- package/.llm/components/tab.md +12 -2
- package/.llm/components/table.md +10 -0
- package/.llm/components/tablebody.md +10 -0
- package/.llm/components/tablecell.md +10 -0
- package/.llm/components/tablehead.md +10 -0
- package/.llm/components/tableheadercell.md +10 -0
- package/.llm/components/tablerow.md +10 -0
- package/.llm/components/tablist.md +10 -0
- package/.llm/components/teamgrid.md +10 -0
- package/.llm/components/testimonialrow.md +47 -3
- package/.llm/components/testimonialslider.md +12 -2
- package/.llm/components/textarea.md +10 -0
- package/.llm/components/textinput.md +11 -1
- package/.llm/components/textscroll.md +10 -0
- package/.llm/components/tiers.md +17 -7
- package/.llm/components/tooltip.md +6 -0
- package/.llm/components/typography.md +67 -1
- package/.llm/digest/accordion.md +1 -1
- package/.llm/digest/accordionitem.md +1 -1
- package/.llm/digest/aspectratio.md +1 -1
- package/.llm/digest/awards.md +1 -1
- package/.llm/digest/background.md +14 -6
- package/.llm/digest/badge.md +1 -1
- package/.llm/digest/bottomsheet.md +1 -1
- package/.llm/digest/breadcrumb.md +1 -1
- package/.llm/digest/breadcrumbitem.md +1 -1
- package/.llm/digest/button.md +2 -2
- package/.llm/digest/buttonicon.md +2 -2
- package/.llm/digest/card.md +1 -1
- package/.llm/digest/cardbody.md +1 -1
- package/.llm/digest/cardbutton.md +1 -1
- package/.llm/digest/checkbox.md +1 -1
- package/.llm/digest/comparisoncards.md +1 -1
- package/.llm/digest/comparisontable.md +1 -1
- package/.llm/digest/ctabanner.md +1 -1
- package/.llm/digest/ctabannerslider.md +1 -1
- package/.llm/digest/datatable.md +1 -1
- package/.llm/digest/divider.md +1 -1
- package/.llm/digest/documentlink.md +52 -0
- package/.llm/digest/documents.md +51 -0
- package/.llm/digest/downloadbanner.md +2 -2
- package/.llm/digest/dropdownmenu.md +1 -1
- package/.llm/digest/estimator.md +66 -0
- package/.llm/digest/faqaccordion.md +1 -1
- package/.llm/digest/featurebullets.md +1 -1
- package/.llm/digest/featurecards.md +8 -1
- package/.llm/digest/featurecardscarousel.md +1 -1
- package/.llm/digest/featurescroll.md +1 -1
- package/.llm/digest/featuresplit.md +1 -1
- package/.llm/digest/featurestack.md +1 -1
- package/.llm/digest/featuretabs.md +50 -0
- package/.llm/digest/filterchip.md +1 -1
- package/.llm/digest/footer.md +1 -1
- package/.llm/digest/footergroup.md +1 -1
- package/.llm/digest/grid.md +2 -1
- package/.llm/digest/icon.md +1 -1
- package/.llm/digest/illustrationcard.md +7 -2
- package/.llm/digest/illustrationcheck.md +42 -0
- package/.llm/digest/illustrationchoice.md +43 -0
- package/.llm/digest/illustrationcode.md +41 -0
- package/.llm/digest/illustrationlist.md +38 -0
- package/.llm/digest/illustrationscene.md +5 -3
- package/.llm/digest/imagebanner.md +11 -5
- package/.llm/digest/landinghero.md +1 -1
- package/.llm/digest/link.md +1 -1
- package/.llm/digest/logocolumns.md +2 -2
- package/.llm/digest/logorows.md +9 -2
- package/.llm/digest/menuitem.md +1 -1
- package/.llm/digest/navbar.md +1 -1
- package/.llm/digest/navbaritem.md +1 -1
- package/.llm/digest/navbarmenu.md +1 -1
- package/.llm/digest/navbarmenugroup.md +1 -1
- package/.llm/digest/navbarpanel.md +1 -1
- package/.llm/digest/navbarswitcher.md +1 -1
- package/.llm/digest/navbarswitcheroption.md +1 -1
- package/.llm/digest/option.md +1 -1
- package/.llm/digest/pageheader.md +1 -1
- package/.llm/digest/pagination.md +1 -1
- package/.llm/digest/paginationdots.md +1 -1
- package/.llm/digest/producthero.md +9 -3
- package/.llm/digest/progressbar.md +56 -0
- package/.llm/digest/removablechip.md +1 -1
- package/.llm/digest/resourcebanner.md +1 -1
- package/.llm/digest/row.md +1 -1
- package/.llm/digest/scenescroll.md +7 -6
- package/.llm/digest/scenescrollword.md +56 -0
- package/.llm/digest/scroller.md +1 -1
- package/.llm/digest/searchinput.md +1 -1
- package/.llm/digest/segmentedcontrol.md +4 -1
- package/.llm/digest/segmentedcontrolitem.md +2 -2
- package/.llm/digest/select.md +1 -1
- package/.llm/digest/selectchip.md +1 -1
- package/.llm/digest/spinner.md +1 -1
- package/.llm/digest/stack.md +1 -1
- package/.llm/digest/stats.md +9 -1
- package/.llm/digest/statscarousel.md +48 -0
- package/.llm/digest/statusdot.md +8 -1
- package/.llm/digest/steps.md +1 -1
- package/.llm/digest/stickycards.md +1 -1
- package/.llm/digest/subdomainnavbar.md +1 -1
- package/.llm/digest/tab.md +1 -1
- package/.llm/digest/table.md +1 -1
- package/.llm/digest/tablebody.md +1 -1
- package/.llm/digest/tablecell.md +1 -1
- package/.llm/digest/tablehead.md +1 -1
- package/.llm/digest/tableheadercell.md +1 -1
- package/.llm/digest/tablerow.md +1 -1
- package/.llm/digest/tablist.md +1 -1
- package/.llm/digest/teamgrid.md +1 -1
- package/.llm/digest/testimonialrow.md +9 -2
- package/.llm/digest/testimonialslider.md +2 -2
- package/.llm/digest/textarea.md +1 -1
- package/.llm/digest/textinput.md +1 -1
- package/.llm/digest/textscroll.md +1 -1
- package/.llm/digest/tiers.md +1 -1
- package/.llm/digest/typography.md +19 -1
- package/.llm/index.md +15 -4
- package/.llm/rules.md +10 -0
- package/.llm/tokens.md +13 -3
- package/AGENTS.md +14 -2
- package/README.md +28 -3
- package/dist/components/arrival.d.ts +32 -0
- package/dist/components/arrival.js +140 -0
- package/dist/components/arrives.d.ts +17 -0
- package/dist/components/arrives.js +14 -0
- package/dist/components/blocks/awards/Awards.js +2 -27
- package/dist/components/blocks/block-pattern.css +23 -0
- package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +29 -12
- package/dist/components/blocks/documents/Documents.css +90 -0
- package/dist/components/blocks/documents/Documents.d.ts +22 -0
- package/dist/components/blocks/documents/Documents.js +30 -0
- package/dist/components/blocks/documents/Documents.types.d.ts +37 -0
- package/dist/components/blocks/documents/Documents.types.js +14 -0
- package/dist/components/blocks/documents/documents-impl.css +103 -0
- package/dist/components/blocks/download-banner/DownloadBanner.css +1 -1
- package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +1 -1
- package/dist/components/blocks/estimator/Estimator.css +206 -0
- package/dist/components/blocks/estimator/Estimator.d.ts +27 -0
- package/dist/components/blocks/estimator/Estimator.js +61 -0
- package/dist/components/blocks/estimator/Estimator.types.d.ts +63 -0
- package/dist/components/blocks/estimator/Estimator.types.js +25 -0
- package/dist/components/blocks/estimator/estimator-impl.css +159 -0
- package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
- package/dist/components/blocks/feature-cards/FeatureCards.js +10 -7
- package/dist/components/blocks/feature-cards/FeatureCards.types.d.ts +9 -1
- package/dist/components/blocks/feature-cards/feature-cards-impl.css +15 -3
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +1 -1
- package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +12 -0
- package/dist/components/blocks/feature-tabs/FeatureTabs.css +100 -0
- package/dist/components/blocks/feature-tabs/FeatureTabs.d.ts +23 -0
- package/dist/components/blocks/feature-tabs/FeatureTabs.js +38 -0
- package/dist/components/blocks/feature-tabs/FeatureTabs.types.d.ts +35 -0
- package/dist/components/blocks/feature-tabs/FeatureTabs.types.js +14 -0
- package/dist/components/blocks/feature-tabs/feature-tabs-impl.css +53 -0
- package/dist/components/blocks/image-banner/ImageBanner.css +1 -1
- package/dist/components/blocks/image-banner/ImageBanner.d.ts +2 -1
- package/dist/components/blocks/image-banner/ImageBanner.js +3 -2
- package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +10 -8
- package/dist/components/blocks/image-banner/ImageBanner.types.js +1 -1
- package/dist/components/blocks/image-banner/image-banner-impl.css +78 -71
- package/dist/components/blocks/laurel.d.ts +16 -0
- package/dist/components/blocks/laurel.js +28 -0
- package/dist/components/blocks/logo-columns/LogoColumns.css +1 -1
- package/dist/components/blocks/logo-columns/LogoColumns.types.d.ts +1 -1
- package/dist/components/blocks/logo-rows/LogoRows.css +1 -1
- package/dist/components/blocks/logo-rows/LogoRows.d.ts +2 -1
- package/dist/components/blocks/logo-rows/LogoRows.js +7 -4
- package/dist/components/blocks/logo-rows/LogoRows.types.d.ts +9 -1
- package/dist/components/blocks/pattern-tone.d.ts +11 -0
- package/dist/components/blocks/pattern-tone.js +7 -0
- package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
- package/dist/components/blocks/product-hero/ProductHero.js +2 -2
- package/dist/components/blocks/product-hero/ProductHero.types.d.ts +8 -3
- package/dist/components/blocks/product-hero/ProductHero.types.js +1 -1
- package/dist/components/blocks/product-hero/product-hero-impl.css +54 -0
- package/dist/components/blocks/resource-banner/ResourceBanner.css +1 -1
- package/dist/components/blocks/scene-scroll/SceneScroll.css +1 -1
- package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +6 -5
- package/dist/components/blocks/scene-scroll/SceneScroll.js +8 -7
- package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +5 -5
- package/dist/components/blocks/scene-scroll/SceneScroll.types.js +1 -1
- package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +61 -44
- package/dist/components/blocks/scene-scroll-word/SceneScrollWord.css +105 -0
- package/dist/components/blocks/scene-scroll-word/SceneScrollWord.d.ts +31 -0
- package/dist/components/blocks/scene-scroll-word/SceneScrollWord.js +67 -0
- package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.d.ts +39 -0
- package/dist/components/blocks/scene-scroll-word/SceneScrollWord.types.js +18 -0
- package/dist/components/blocks/scene-scroll-word/scene-scroll-word-impl.css +370 -0
- package/dist/components/blocks/stats/Stats.d.ts +2 -1
- package/dist/components/blocks/stats/Stats.js +17 -14
- package/dist/components/blocks/stats/Stats.types.d.ts +8 -0
- package/dist/components/blocks/stats/stats-impl.css +4 -1
- package/dist/components/blocks/stats/use-wheel.d.ts +1 -1
- package/dist/components/blocks/stats/use-wheel.js +8 -4
- package/dist/components/blocks/stats-carousel/StatsCarousel.css +209 -0
- package/dist/components/blocks/stats-carousel/StatsCarousel.d.ts +20 -0
- package/dist/components/blocks/stats-carousel/StatsCarousel.js +48 -0
- package/dist/components/blocks/stats-carousel/StatsCarousel.types.d.ts +43 -0
- package/dist/components/blocks/stats-carousel/StatsCarousel.types.js +23 -0
- package/dist/components/blocks/stats-carousel/stats-carousel-impl.css +233 -0
- package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +8 -0
- package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -1
- package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +2 -1
- package/dist/components/blocks/testimonial-row/TestimonialRow.js +16 -13
- package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +9 -1
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -1
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +1 -1
- package/dist/components/blocks/tiers/Tiers.types.d.ts +1 -1
- package/dist/components/core/background/Background.css +19 -0
- package/dist/components/core/background/Background.types.d.ts +2 -1
- package/dist/components/core/background/background-impl.css +47 -15
- package/dist/components/core/background/halftone.js +1 -1
- package/dist/components/core/button/Button.css +5 -5
- package/dist/components/core/button-icon/ButtonIcon.types.d.ts +1 -1
- package/dist/components/core/card-body/CardBody.css +5 -0
- package/dist/components/core/card-body/CardBody.types.d.ts +1 -1
- package/dist/components/core/document-link/DocumentLink.css +59 -0
- package/dist/components/core/document-link/DocumentLink.d.ts +19 -0
- package/dist/components/core/document-link/DocumentLink.js +21 -0
- package/dist/components/core/document-link/DocumentLink.types.d.ts +41 -0
- package/dist/components/core/document-link/DocumentLink.types.js +11 -0
- package/dist/components/core/document-link/document-link-impl.css +23 -0
- package/dist/components/core/illustration-card/IllustrationCard.css +7 -0
- package/dist/components/core/illustration-card/IllustrationCard.d.ts +5 -1
- package/dist/components/core/illustration-card/IllustrationCard.js +34 -8
- package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +8 -1
- package/dist/components/core/illustration-card/IllustrationCard.types.js +1 -0
- package/dist/components/core/illustration-card/illustration-card-impl.css +113 -0
- package/dist/components/core/illustration-check/IllustrationCheck.css +25 -0
- package/dist/components/core/illustration-check/IllustrationCheck.d.ts +16 -0
- package/dist/components/core/illustration-check/IllustrationCheck.js +22 -0
- package/dist/components/core/illustration-check/IllustrationCheck.types.d.ts +25 -0
- package/dist/components/core/illustration-check/IllustrationCheck.types.js +9 -0
- package/dist/components/core/illustration-check/illustration-check-impl.css +76 -0
- package/dist/components/core/illustration-choice/IllustrationChoice.css +62 -0
- package/dist/components/core/illustration-choice/IllustrationChoice.d.ts +16 -0
- package/dist/components/core/illustration-choice/IllustrationChoice.js +31 -0
- package/dist/components/core/illustration-choice/IllustrationChoice.types.d.ts +25 -0
- package/dist/components/core/illustration-choice/IllustrationChoice.types.js +11 -0
- package/dist/components/core/illustration-choice/illustration-choice-impl.css +103 -0
- package/dist/components/core/illustration-code/IllustrationCode.css +25 -0
- package/dist/components/core/illustration-code/IllustrationCode.d.ts +12 -0
- package/dist/components/core/illustration-code/IllustrationCode.js +20 -0
- package/dist/components/core/illustration-code/IllustrationCode.types.d.ts +23 -0
- package/dist/components/core/illustration-code/IllustrationCode.types.js +8 -0
- package/dist/components/core/illustration-code/illustration-code-impl.css +42 -0
- package/dist/components/core/illustration-list/IllustrationList.css +19 -0
- package/dist/components/core/illustration-list/IllustrationList.d.ts +16 -0
- package/dist/components/core/illustration-list/IllustrationList.js +18 -0
- package/dist/components/core/illustration-list/IllustrationList.types.d.ts +15 -0
- package/dist/components/core/illustration-list/IllustrationList.types.js +6 -0
- package/dist/components/core/illustration-list/illustration-list-impl.css +52 -0
- package/dist/components/core/illustration-scene/IllustrationScene.css +6 -0
- package/dist/components/core/illustration-scene/IllustrationScene.d.ts +3 -2
- package/dist/components/core/illustration-scene/IllustrationScene.js +4 -3
- package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +5 -1
- package/dist/components/core/illustration-scene/IllustrationScene.types.js +2 -1
- package/dist/components/core/illustration-scene/illustration-scene-impl.css +65 -0
- package/dist/components/core/link/link-impl.css +5 -19
- package/dist/components/core/progress-bar/ProgressBar.css +101 -0
- package/dist/components/core/progress-bar/ProgressBar.d.ts +5 -0
- package/dist/components/core/progress-bar/ProgressBar.js +34 -0
- package/dist/components/core/progress-bar/ProgressBar.types.d.ts +52 -0
- package/dist/components/core/progress-bar/ProgressBar.types.js +12 -0
- package/dist/components/core/progress-bar/progress-bar-impl.css +45 -0
- package/dist/components/core/segmented-control/SegmentedControl.d.ts +1 -1
- package/dist/components/core/segmented-control/SegmentedControl.js +13 -5
- package/dist/components/core/segmented-control/SegmentedControl.types.d.ts +5 -1
- package/dist/components/core/segmented-control/segmented-control-impl.css +35 -0
- package/dist/components/core/segmented-control-item/SegmentedControlItem.types.d.ts +1 -1
- package/dist/components/core/select/Select.css +2 -0
- package/dist/components/core/select/select-impl.css +58 -0
- package/dist/components/core/status-dot/StatusDot.d.ts +1 -1
- package/dist/components/core/status-dot/StatusDot.js +7 -4
- package/dist/components/core/status-dot/StatusDot.types.d.ts +9 -1
- package/dist/components/core/status-dot/status-dot-impl.css +101 -0
- package/dist/components/core/text-area/TextArea.css +2 -0
- package/dist/components/core/text-area/text-area-impl.css +54 -0
- package/dist/components/core/text-input/TextInput.css +2 -0
- package/dist/components/core/text-input/text-input-impl.css +63 -0
- package/dist/components/core/typography/Typography.d.ts +3 -283
- package/dist/components/core/typography/Typography.js +9 -1
- package/dist/components/core/typography/Typography.types.d.ts +9 -15
- package/dist/components/core/typography/TypographyMotion.d.ts +28 -0
- package/dist/components/core/typography/TypographyMotion.js +43 -0
- package/dist/components/core/typography/typography-impl.css +106 -0
- package/dist/components/estimator-data.d.ts +29 -0
- package/dist/components/estimator-data.js +12 -0
- package/dist/components/illustration-data.d.ts +15 -0
- package/dist/components/illustration-data.js +7 -0
- package/dist/components/index.d.ts +25 -1
- package/dist/components/index.js +22 -0
- package/dist/components/layout/grid/Grid.css +5 -0
- package/dist/components/layout/grid/Grid.types.d.ts +2 -1
- package/dist/components/scene-scroll-data.d.ts +35 -0
- package/dist/components/tiers-data.d.ts +3 -2
- package/dist/icons/accounts.d.ts +1 -0
- package/dist/icons/accounts.js +1 -0
- package/dist/icons/app-stores.d.ts +1 -0
- package/dist/icons/app-stores.js +1 -0
- package/dist/icons/currency.d.ts +1 -0
- package/dist/icons/currency.js +1 -0
- package/dist/icons/flag.d.ts +1 -0
- package/dist/icons/flag.js +1 -0
- package/dist/icons/illustrative.d.ts +1 -0
- package/dist/icons/illustrative.js +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +4 -0
- package/dist/icons/markets.d.ts +1 -0
- package/dist/icons/markets.js +1 -0
- package/dist/icons/social.d.ts +1 -0
- package/dist/icons/social.js +1 -0
- package/dist/icons/system.d.ts +1 -0
- package/dist/icons/system.js +1 -0
- package/dist/icons/trade.d.ts +1 -0
- package/dist/icons/trade.js +1 -0
- package/dist/marketing.css +26 -6
- package/package.json +44 -2
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Scoped to this package, like the generated sheet beside it.
|
|
3
|
+
*
|
|
4
|
+
* The heading, the tabs and the footnote start on a phone, as every block's heading does there, and
|
|
5
|
+
* are centred from 48rem over the content they choose — Documents' and FaqAccordion's rule. `48rem`
|
|
6
|
+
* longhand because `var()` is not permitted in a container query condition.
|
|
7
|
+
*/
|
|
8
|
+
@container (min-width: 48rem) {
|
|
9
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs .dds-featuretabs__header {
|
|
10
|
+
align-items: center;
|
|
11
|
+
text-align: center;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs .dds-featuretabs__tabs {
|
|
15
|
+
justify-content: center;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs .dds-featuretabs__footnote {
|
|
19
|
+
text-align: center;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* A lone tab has no strip, and the strip it would have held is not left as a step in the
|
|
25
|
+
* header's rhythm: an empty part with a margin is a gap with nothing in it.
|
|
26
|
+
*/
|
|
27
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs .dds-featuretabs__tabs:empty {
|
|
28
|
+
display: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
* On the strong band the tab strip takes the band's inks, as Documents' accordion does: TabList is
|
|
33
|
+
* drawn for a light ground, so a selected tab's near-black text would vanish on the dark one.
|
|
34
|
+
*/
|
|
35
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs[data-ground="strong"] .dds-tablist {
|
|
36
|
+
border-color: var(--color-border-subtle-inverse);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs[data-ground="strong"] .dds-tab[data-selected="true"] :is(.dds-tab__label, .dds-tab__icon, .dds-tab__trailing-icon) {
|
|
40
|
+
color: var(--color-fg-on-brand-strong);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs[data-ground="strong"] .dds-tab[data-selected="false"] :is(.dds-tab__label, .dds-tab__icon, .dds-tab__trailing-icon) {
|
|
44
|
+
color: var(--color-fg-muted-inverse);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs[data-ground="strong"] .dds-tab .dds-tab__surface:hover {
|
|
48
|
+
background-color: var(--color-bg-hover-on-brand-strong);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:where([data-dds-context="marketing"]) .dds-featuretabs[data-ground="strong"] .dds-tab:focus-visible {
|
|
52
|
+
outline-color: var(--color-border-focus-on-brand-strong);
|
|
53
|
+
}
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="strong"] .dds-imagebanner__card {
|
|
99
|
-
background-color: var(--color-bg-surface-card-strong);
|
|
99
|
+
background-color: var(--color-bg-surface-card-strong-on-brand-strong);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="subtle"] {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import './ImageBanner.css';
|
|
2
2
|
import './image-banner-impl.css';
|
|
3
3
|
import '../block-reveal.css';
|
|
4
|
+
import '../block-parallax.css';
|
|
4
5
|
import { type ImageBannerProps } from './ImageBanner.types.js';
|
|
5
6
|
export type { ImageBannerProps };
|
|
6
7
|
/**
|
|
@@ -29,4 +30,4 @@ export type { ImageBannerProps };
|
|
|
29
30
|
* the photograph after them. A cover photograph is the card's ground rather than a part of what it
|
|
30
31
|
* says, so it is there from the start and only the words arrive over it.
|
|
31
32
|
*/
|
|
32
|
-
export declare function ImageBanner({ ground, variant, mediaPosition, parallax, title, headingLevel, description, action, media, }: ImageBannerProps): import("react").JSX.Element;
|
|
33
|
+
export declare function ImageBanner({ ground, variant, mediaPosition, parallax, stackOnPhone, title, headingLevel, description, action, media, }: ImageBannerProps): import("react").JSX.Element;
|
|
@@ -4,6 +4,7 @@ import { useId } from 'react';
|
|
|
4
4
|
import './ImageBanner.css';
|
|
5
5
|
import './image-banner-impl.css';
|
|
6
6
|
import '../block-reveal.css';
|
|
7
|
+
import '../block-parallax.css';
|
|
7
8
|
import { arriving, useReveal } from '../use-reveal.js';
|
|
8
9
|
import { given } from '../../given.js';
|
|
9
10
|
import { imageBannerDefaults, imageBannerParts } from './ImageBanner.types.js';
|
|
@@ -33,9 +34,9 @@ import { imageBannerDefaults, imageBannerParts } from './ImageBanner.types.js';
|
|
|
33
34
|
* the photograph after them. A cover photograph is the card's ground rather than a part of what it
|
|
34
35
|
* says, so it is there from the start and only the words arrive over it.
|
|
35
36
|
*/
|
|
36
|
-
export function ImageBanner({ ground = imageBannerDefaults.ground, variant = imageBannerDefaults.variant, mediaPosition = imageBannerDefaults.mediaPosition, parallax = imageBannerDefaults.parallax, title, headingLevel = imageBannerDefaults.headingLevel, description, action, media, }) {
|
|
37
|
+
export function ImageBanner({ ground = imageBannerDefaults.ground, variant = imageBannerDefaults.variant, mediaPosition = imageBannerDefaults.mediaPosition, parallax = imageBannerDefaults.parallax, stackOnPhone = imageBannerDefaults.stackOnPhone, title, headingLevel = imageBannerDefaults.headingLevel, description, action, media, }) {
|
|
37
38
|
const titleId = useId();
|
|
38
39
|
const Title = headingLevel;
|
|
39
40
|
const [band, revealed] = useReveal();
|
|
40
|
-
return (_jsx("section", { className: imageBannerParts.root, "data-ground": ground, "data-variant": variant, "data-media-position": mediaPosition, "data-parallax": parallax, "aria-labelledby": titleId, children: _jsx("div", { className: imageBannerParts.inner, ref: band, "data-revealed": revealed, children: _jsxs("div", { className: imageBannerParts.card, children: [_jsxs("div", { className: imageBannerParts.content, children: [_jsx(Title, { className: imageBannerParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: imageBannerParts.description, ...arriving(1), children: description })) : null, action ? (_jsx("div", { className: imageBannerParts.action, ...arriving(2), children: action })) : null] }), _jsx("div", { className: imageBannerParts.media, ...(variant === 'cover' ? {} : arriving(3)), children: media })] }) }) }));
|
|
41
|
+
return (_jsx("section", { className: imageBannerParts.root, "data-ground": ground, "data-variant": variant, "data-media-position": mediaPosition, "data-parallax": parallax, "data-stack-on-phone": variant === 'cover' && stackOnPhone ? '' : undefined, "aria-labelledby": titleId, children: _jsx("div", { className: imageBannerParts.inner, ref: band, "data-revealed": revealed, children: _jsxs("div", { className: imageBannerParts.card, children: [_jsxs("div", { className: imageBannerParts.content, children: [_jsx(Title, { className: imageBannerParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: imageBannerParts.description, ...arriving(1), children: description })) : null, action ? (_jsx("div", { className: imageBannerParts.action, ...arriving(2), children: action })) : null] }), _jsx("div", { className: imageBannerParts.media, "data-dds-parallax": parallax ? '' : undefined, ...(variant === 'cover' ? {} : arriving(3)), children: media })] }) }) }));
|
|
41
42
|
}
|
|
@@ -3,14 +3,9 @@ export interface ImageBannerOwnProps {
|
|
|
3
3
|
/**
|
|
4
4
|
* `page` — The default, and the page's own white, with the dark card set into it. Most of the time: the card is already the break
|
|
5
5
|
* `subtle` — The grey band, for a card that follows a white section the page wants told apart from this one. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
|
|
6
|
-
* `strong` — `color.bg.brand-strong`, the dark band, with the card a step lighter at color.bg.surface-card-strong so it still reads as a card. For a page whose dark band is already here and wants the card inside it
|
|
6
|
+
* `strong` — `color.bg.brand-strong`, the dark band, with the card a step lighter at color.bg.surface-card-strong-on-brand-strong so it still reads as a card. For a page whose dark band is already here and wants the card inside it
|
|
7
7
|
*/
|
|
8
8
|
ground?: 'page' | 'subtle' | 'strong';
|
|
9
|
-
/**
|
|
10
|
-
* `split` — The default. The words in one half and the photograph filling the other, edge to edge, with one action under the words. On a phone the card runs the width of the screen and the photograph stacks with the words
|
|
11
|
-
* `cover` — The photograph fills the whole card, with the words over it behind a scrim that darkens the side they are on and leaves the photograph clear on the other. For a photograph wide enough to be the band rather than half of it
|
|
12
|
-
*/
|
|
13
|
-
variant?: 'split' | 'cover';
|
|
14
9
|
/**
|
|
15
10
|
* `end` — The default. The words lead and the photograph follows, which is the order the card argues in
|
|
16
11
|
* `start` — The photograph leads — the second of two cards on a page, or a photograph whose subject faces the words. A split card puts it above the words on a phone as well, as the reference design does
|
|
@@ -29,10 +24,16 @@ export interface ImageBannerOwnProps {
|
|
|
29
24
|
action?: ReactNode;
|
|
30
25
|
/** Always. The page's photograph, through AspectRatio or as an image — people or product. Split and cover crop it to fill the space they give it. Alt text is the page's to give, empty where the photograph is decoration. */
|
|
31
26
|
media: ReactNode;
|
|
32
|
-
/** The photograph drifts against the scroll as the card passes through the view,
|
|
27
|
+
/** The photograph drifts against the scroll as the card passes through the view, the drift every block's picture shares — drawn at motion.scale.parallax and moved from motion.translate.parallax-from to motion.translate.parallax-to over the whole pass — so it reads as further away than the card — the reference design's ParallaxBanner, which this replaces. On by default, as every block's picture drifts: pass false for a card whose photograph must hold still under its button. */
|
|
33
28
|
parallax?: boolean;
|
|
34
29
|
}
|
|
35
|
-
export type ImageBannerProps = ImageBannerOwnProps
|
|
30
|
+
export type ImageBannerProps = ImageBannerOwnProps & ({
|
|
31
|
+
variant?: 'split' | 'cover';
|
|
32
|
+
stackOnPhone?: false;
|
|
33
|
+
} | {
|
|
34
|
+
variant: Exclude<'split' | 'cover', 'split'>;
|
|
35
|
+
stackOnPhone?: boolean;
|
|
36
|
+
});
|
|
36
37
|
/** The class each part carries. Apply these — do not retype them. */
|
|
37
38
|
export declare const imageBannerParts: {
|
|
38
39
|
readonly root: "dds-imagebanner";
|
|
@@ -51,4 +52,5 @@ export declare const imageBannerDefaults: {
|
|
|
51
52
|
readonly mediaPosition: "end";
|
|
52
53
|
readonly headingLevel: "h2";
|
|
53
54
|
readonly parallax: true;
|
|
55
|
+
readonly stackOnPhone: false;
|
|
54
56
|
};
|
|
@@ -11,4 +11,4 @@ export const imageBannerParts = {
|
|
|
11
11
|
media: 'dds-imagebanner__media',
|
|
12
12
|
};
|
|
13
13
|
/** Generated so defaults cannot drift from the contract. */
|
|
14
|
-
export const imageBannerDefaults = { ground: 'page', variant: 'split', mediaPosition: 'end', headingLevel: 'h2', parallax: true };
|
|
14
|
+
export const imageBannerDefaults = { ground: 'page', variant: 'split', mediaPosition: 'end', headingLevel: 'h2', parallax: true, stackOnPhone: false };
|
|
@@ -173,109 +173,116 @@
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/*
|
|
176
|
-
* The
|
|
176
|
+
* The shade under a cover card's words: their column, and just past it.
|
|
177
177
|
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* across
|
|
178
|
+
* White body copy has to keep AA over even a pale photograph, so the words' column is
|
|
179
|
+
* color.bg.overlay at full strength — darkest only at the words' edge was tried and left the end of a
|
|
180
|
+
* line at about 2:1. But the shade is the words', not the photograph's: it is drawn by the column the
|
|
181
|
+
* words take and fades to clear across the column's own margin and space.section.default past its
|
|
182
|
+
* edge — a long fade, so it never reads as an edge on the photograph — and the rest of the
|
|
183
|
+
* photograph is shown as it was taken. It once held across three fifths of the card and then thinned
|
|
184
|
+
* out to the far edge, which turned a bright photograph slate grey nearly all the way across; on a
|
|
185
|
+
* phone it ran down three fifths of the card's height however short the words were.
|
|
185
186
|
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
187
|
+
* Under the words inside their own stacking context — the column is lifted over the photograph — so
|
|
188
|
+
* it is always behind them and always over the photograph. Toward the photograph: across from the
|
|
189
|
+
* fold, mirrored for a photograph at the start and under `:dir(rtl)`, and downward on a phone, where
|
|
190
|
+
* the words are at the top across the whole width. A gradient takes a physical direction — there is
|
|
191
|
+
* no `to inline-end` — so the direction is a custom property set once per case, the package's rule for
|
|
192
|
+
* a pattern that must follow the reading direction.
|
|
191
193
|
*
|
|
192
194
|
* The words need no rule to change sides: the photograph is out of flow behind them, so the row
|
|
193
195
|
* `mediaPosition` sets holds the words alone, at the start or, reversed, at the end.
|
|
194
196
|
*/
|
|
195
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-
|
|
197
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-imagebanner__content {
|
|
198
|
+
--dds-imagebanner-shade-fade: var(--space-section-default);
|
|
199
|
+
/* The column's own inset, which the words end inside: space.inset.card, and space.inset.2xl from
|
|
200
|
+
64rem, where the column is given more room. The shade holds full strength to there. */
|
|
201
|
+
--dds-imagebanner-words-inset: var(--space-inset-card);
|
|
202
|
+
position: relative;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@container (min-width: 64rem) {
|
|
206
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-imagebanner__content {
|
|
207
|
+
--dds-imagebanner-words-inset: var(--space-inset-2xl);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-imagebanner__content::before {
|
|
196
212
|
background-image: linear-gradient(
|
|
197
|
-
var(--dds-imagebanner-
|
|
213
|
+
var(--dds-imagebanner-shade-toward, to bottom),
|
|
198
214
|
var(--color-bg-overlay),
|
|
199
|
-
var(--color-bg-overlay)
|
|
200
|
-
var(--color-bg-overlay-subtle) 80%,
|
|
215
|
+
var(--color-bg-overlay) calc(100% - var(--dds-imagebanner-shade-fade) - var(--dds-imagebanner-words-inset)),
|
|
201
216
|
transparent
|
|
202
217
|
);
|
|
203
218
|
content: '';
|
|
204
|
-
inset: 0;
|
|
219
|
+
inset: 0 0 calc(-1 * var(--dds-imagebanner-shade-fade));
|
|
205
220
|
pointer-events: none;
|
|
206
221
|
position: absolute;
|
|
222
|
+
z-index: -1;
|
|
207
223
|
}
|
|
208
224
|
|
|
209
225
|
@container (min-width: 48rem) {
|
|
210
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"]
|
|
211
|
-
|
|
226
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-imagebanner__content::before {
|
|
227
|
+
inset-block-end: 0;
|
|
228
|
+
inset-inline-end: calc(-1 * var(--dds-imagebanner-shade-fade));
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="start"] .dds-imagebanner__content::before {
|
|
232
|
+
inset-inline-end: 0;
|
|
233
|
+
inset-inline-start: calc(-1 * var(--dds-imagebanner-shade-fade));
|
|
212
234
|
}
|
|
213
235
|
|
|
214
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="
|
|
215
|
-
--dds-imagebanner-
|
|
236
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="end"] .dds-imagebanner__content {
|
|
237
|
+
--dds-imagebanner-shade-toward: to right;
|
|
216
238
|
}
|
|
217
239
|
|
|
218
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="
|
|
219
|
-
--dds-imagebanner-
|
|
240
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="start"] .dds-imagebanner__content {
|
|
241
|
+
--dds-imagebanner-shade-toward: to left;
|
|
220
242
|
}
|
|
221
243
|
|
|
222
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="
|
|
223
|
-
--dds-imagebanner-
|
|
244
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="end"]:dir(rtl) .dds-imagebanner__content {
|
|
245
|
+
--dds-imagebanner-shade-toward: to left;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-media-position="start"]:dir(rtl) .dds-imagebanner__content {
|
|
249
|
+
--dds-imagebanner-shade-toward: to right;
|
|
224
250
|
}
|
|
225
251
|
}
|
|
226
252
|
|
|
227
253
|
/*
|
|
228
|
-
* `
|
|
229
|
-
* reference design's ParallaxBanner, folded in here as an option on the split and cover cards.
|
|
254
|
+
* `stackOnPhone`: below the fold the cover card stacks, as a split card does.
|
|
230
255
|
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
* runs down it from half the drift above centre to half below, over the whole pass (`cover`), so as
|
|
237
|
-
* the page carries the card up the photograph falls behind a little and reads as further away.
|
|
238
|
-
* Linear, because the scroll is the easing. The card and the frame clip with `overflow: clip`, not
|
|
239
|
-
* `hidden`: `hidden` makes a box a scroll container, and a view timeline measured against one that
|
|
240
|
-
* never scrolls stands still.
|
|
241
|
-
*
|
|
242
|
-
* A browser with no scroll timeline, and a reader who asked for less motion, get the photograph
|
|
243
|
-
* still and centred, as with `parallax` off.
|
|
256
|
+
* A cover photograph is cropped to a 2.53:1 strip on a desktop and a near-square on a phone, both
|
|
257
|
+
* held to the photograph's side, and the two crops share only a third of it — so a person framed for
|
|
258
|
+
* the strip loses their head on the phone, or stands under the words. Stacked, the words stand on the
|
|
259
|
+
* card's own dark ground and need no shade, and the photograph follows them whole at the landscape
|
|
260
|
+
* shape, in flow rather than behind. From the fold it is the cover card again.
|
|
244
261
|
*/
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
object-position: center top;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
@keyframes dds-imagebanner-drift {
|
|
252
|
-
from {
|
|
253
|
-
translate: 0 calc(var(--motion-distance-drift) / -2);
|
|
254
|
-
}
|
|
255
|
-
to {
|
|
256
|
-
translate: 0 calc(var(--motion-distance-drift) / 2);
|
|
262
|
+
@container (max-width: 47.9375rem) {
|
|
263
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-stack-on-phone] .dds-imagebanner__card {
|
|
264
|
+
min-block-size: 0;
|
|
257
265
|
}
|
|
258
|
-
}
|
|
259
266
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
267
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-stack-on-phone] .dds-imagebanner__media {
|
|
268
|
+
aspect-ratio: var(--aspect-landscape);
|
|
269
|
+
inset: auto;
|
|
270
|
+
position: relative;
|
|
263
271
|
}
|
|
264
272
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
leaves the photograph moving for exactly the reader who asked it not to. */
|
|
268
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
269
|
-
:where([data-dds-context="marketing"]) .dds-imagebanner[data-parallax="true"]:is([data-variant="split"], [data-variant="cover"]) .dds-imagebanner__media img {
|
|
270
|
-
animation: dds-imagebanner-drift linear both;
|
|
271
|
-
animation-range: cover;
|
|
272
|
-
animation-timeline: --dds-imagebanner-frame;
|
|
273
|
-
}
|
|
273
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"][data-stack-on-phone] .dds-imagebanner__content::before {
|
|
274
|
+
content: none;
|
|
274
275
|
}
|
|
275
276
|
}
|
|
276
277
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
278
|
+
/*
|
|
279
|
+
* `parallax`: the photograph drifts against the scroll as the card passes through the view — the
|
|
280
|
+
* reference design's ParallaxBanner, folded in as an option. The drift is the one every block's
|
|
281
|
+
* picture shares, in block-parallax.css: the component marks the frame and the picture is scaled
|
|
282
|
+
* and moved rather than resized.
|
|
283
|
+
*
|
|
284
|
+
* This card once drew its own, by making the photograph taller than the frame with `block-size`.
|
|
285
|
+
* A picture that sets its height inline — Next.js's Image with `fill` writes `height: 100%` on the
|
|
286
|
+
* element — beat that, so the photograph stayed the frame's height and the drift pulled its lower
|
|
287
|
+
* edge up off the card. `scale` is a property nothing sets inline, so the shared drift holds.
|
|
288
|
+
*/
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The reference design's laurel, the vector its Stats section draws, in one colour — shared by the
|
|
3
|
+
* blocks that frame an award with it, so an award looks the same wherever a page shows one.
|
|
4
|
+
*
|
|
5
|
+
* The left-hand branch: its leaves curl up and in toward whatever stands to its right. The second
|
|
6
|
+
* branch is this one mirrored, by each block's stylesheet, so one drawing serves both sides and a
|
|
7
|
+
* right-to-left page can swap which side is mirrored without a second picture. The reference laid it
|
|
8
|
+
* at a fifth of its strength; here it takes the band's quieter ink instead, a colour role rather than
|
|
9
|
+
* an alpha, so it follows the ground the way every other quiet thing in the package does.
|
|
10
|
+
*/
|
|
11
|
+
export declare const LAUREL_PATHS: string[];
|
|
12
|
+
/** One laurel branch, carrying the class of the block that draws it. Decoration: hidden from assistive technology and never focusable. */
|
|
13
|
+
export declare function Laurel({ className, side }: {
|
|
14
|
+
className: string;
|
|
15
|
+
side: 'leading' | 'trailing';
|
|
16
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The reference design's laurel, the vector its Stats section draws, in one colour — shared by the
|
|
4
|
+
* blocks that frame an award with it, so an award looks the same wherever a page shows one.
|
|
5
|
+
*
|
|
6
|
+
* The left-hand branch: its leaves curl up and in toward whatever stands to its right. The second
|
|
7
|
+
* branch is this one mirrored, by each block's stylesheet, so one drawing serves both sides and a
|
|
8
|
+
* right-to-left page can swap which side is mirrored without a second picture. The reference laid it
|
|
9
|
+
* at a fifth of its strength; here it takes the band's quieter ink instead, a colour role rather than
|
|
10
|
+
* an alpha, so it follows the ground the way every other quiet thing in the package does.
|
|
11
|
+
*/
|
|
12
|
+
export const LAUREL_PATHS = [
|
|
13
|
+
'M20.8655 76.0151C21.3631 78.5487 22.4577 80.4673 23.4245 81.7447C23.7945 82.2337 24.145 82.6275 24.4343 82.9245C24.5003 81.0424 24.5392 77.0209 23.854 73.543C23.3836 71.2282 22.6189 69.4263 21.9723 68.1997C21.7486 67.7754 21.539 67.42 21.3608 67.1361C21.2158 67.6487 21.042 68.3446 20.8935 69.1718C20.5634 71.0111 20.3623 73.4782 20.8655 76.0151Z',
|
|
14
|
+
'M9.19518 69.4464C8.5612 69.2311 8.01354 69.0792 7.6041 68.9776C7.77674 69.5261 8.03563 70.2542 8.40971 71.0711C9.16156 72.713 10.3603 74.6729 12.1472 76.0342C13.9141 77.3864 15.8077 77.7752 17.2669 77.8239C17.9963 77.8483 18.6126 77.7873 19.0419 77.7209C18.3715 76.5307 16.6347 73.8279 14.0892 71.9349C12.4167 70.7081 10.6015 69.924 9.19518 69.4464Z',
|
|
15
|
+
'M14.1789 62.4853C14.1095 65.0056 14.7018 67.1343 15.3106 68.6265C15.5268 69.1563 15.7445 69.6045 15.9342 69.9597C16.0737 69.4242 16.2473 68.7196 16.4239 67.9038C16.8294 66.0308 17.2467 63.5892 17.309 61.2688C17.3584 58.9612 17.0322 57.019 16.6942 55.65C16.5809 55.1908 16.4663 54.7965 16.3643 54.4749C16.1414 54.8952 15.8702 55.4487 15.5956 56.1107C14.9268 57.7233 14.2444 59.9642 14.1789 62.4853Z',
|
|
16
|
+
'M6.16644 56.5363L5.92729 56.2113C4.18123 53.9739 2.10237 52.4221 0.99942 51.685C1.0448 52.2219 1.13195 52.9558 1.29599 53.7969C1.6458 55.5904 2.33816 57.834 3.68889 59.699C5.02796 61.5534 6.66938 62.5331 7.97363 63.0496C8.56984 63.2857 9.09434 63.4244 9.48448 63.5049C9.08235 62.1271 8.06278 59.1136 6.16644 56.5363Z',
|
|
17
|
+
'M12.9202 41.9556C12.9103 41.468 12.8857 41.0438 12.8578 40.6964C12.5852 41.0139 12.2554 41.4254 11.9043 41.9234C10.9787 43.2365 9.91222 45.1415 9.34811 47.5086L9.21888 48.0509C8.78948 50.2094 8.89878 52.2002 9.13088 53.6853C9.21855 54.2463 9.32345 54.7333 9.42253 55.1275C10.2101 53.5777 11.6117 50.5783 12.3444 47.5177C12.8519 45.3454 12.9491 43.3817 12.9202 41.9556Z',
|
|
18
|
+
'M4.26838 40.1575C3.16507 37.3338 1.55966 35.0449 0.658674 33.8839C0.595099 34.3962 0.53299 35.0674 0.509766 35.8425C0.454879 37.6743 0.618233 40.0556 1.46849 42.2871C2.30759 44.5064 3.60611 45.9871 4.68907 46.9107C5.12959 47.2864 5.53393 47.5694 5.85602 47.7717C5.82536 47.3041 5.77132 46.6715 5.67501 45.9295C5.46619 44.3205 5.06044 42.211 4.27156 40.1569L4.26838 40.1575Z',
|
|
19
|
+
'M12.6632 27.4606C11.6314 28.3597 10.3804 29.7129 9.40352 31.5834L9.20135 32.004C8.19489 34.0975 7.83678 36.2499 7.73379 37.8807C7.69736 38.4576 7.693 38.9667 7.70264 39.3814C7.98105 39.0479 8.31846 38.6306 8.68777 38.1462C9.68653 36.8365 10.9078 35.0512 11.829 33.1204C12.7356 31.1936 13.238 29.3215 13.5154 27.9233C13.6157 27.4178 13.6864 26.9753 13.7361 26.6158C13.4324 26.8302 13.0648 27.1106 12.6632 27.4606Z',
|
|
20
|
+
'M7.15889 23.0454L7.23043 22.5253C7.54518 19.6881 7.36017 17.0948 7.19664 15.6517C6.9244 16.0575 6.59747 16.5777 6.25738 17.1905C5.37216 18.7855 4.41002 20.986 4.07631 23.4177C3.74032 25.8399 4.108 27.8499 4.55657 29.25C4.7215 29.7648 4.89717 30.1965 5.05235 30.5349C5.64762 29.1157 6.71893 26.2445 7.15889 23.0454Z',
|
|
21
|
+
'M20.7056 14.8951C19.4372 15.269 17.7724 15.9875 16.1554 17.3693L16.021 17.4932C14.3576 18.9542 13.2217 20.7665 12.5041 22.2202C12.2403 22.7546 12.0346 23.2374 11.8812 23.6318C12.2297 23.4596 12.6507 23.2423 13.1195 22.9822C14.4495 22.2442 16.1506 21.1686 17.6705 19.808C19.177 18.446 20.3493 16.9414 21.1512 15.7693C21.4549 15.3255 21.7047 14.9307 21.8987 14.6109C21.5673 14.6707 21.1626 14.7604 20.7056 14.8951Z',
|
|
22
|
+
'M15.246 9.89451L15.3989 9.48769C16.3817 6.71545 16.8681 4.08928 17.0948 2.56556C16.7641 2.88544 16.3703 3.28963 15.9481 3.76978C14.7583 5.12276 13.3571 7.06214 12.4902 9.40367C11.6163 11.7394 11.483 13.8564 11.5665 15.3854C11.595 15.9081 11.6489 16.3613 11.7069 16.7298C11.9415 16.3768 12.2271 15.9318 12.5414 15.4103C13.3841 14.0121 14.4266 12.0747 15.246 9.89451Z',
|
|
23
|
+
'M24.236 2.86551C22.4046 4.24716 21.0854 6.09763 20.225 7.6144C19.8673 8.24502 19.5916 8.81333 19.3933 9.25894C19.765 9.11933 20.2233 8.93634 20.7396 8.70812C22.1292 8.09394 23.9267 7.15785 25.5896 5.86671C27.2408 4.56435 28.6049 3.04428 29.5633 1.84034C29.9762 1.32163 30.3123 0.863542 30.5622 0.509562C30.206 0.526204 29.7564 0.567871 29.2396 0.659382C27.8788 0.900297 26.0564 1.48555 24.236 2.86551Z',
|
|
24
|
+
];
|
|
25
|
+
/** One laurel branch, carrying the class of the block that draws it. Decoration: hidden from assistive technology and never focusable. */
|
|
26
|
+
export function Laurel({ className, side }) {
|
|
27
|
+
return (_jsx("svg", { className: className, "data-side": side, viewBox: "0 0 32 84", fill: "none", "aria-hidden": "true", focusable: "false", children: LAUREL_PATHS.map((d) => (_jsx("path", { d: d, fill: "currentColor", stroke: "currentColor" }, d))) }));
|
|
28
|
+
}
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
:where([data-dds-context="marketing"]) .dds-logocolumns[data-ground="strong"] .dds-logocolumns__logo {
|
|
146
|
-
background-color: var(--color-bg-surface-card-strong);
|
|
146
|
+
background-color: var(--color-bg-surface-card-strong-on-brand-strong);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
:where([data-dds-context="marketing"]) .dds-logocolumns[data-ground="subtle"] {
|
|
@@ -4,7 +4,7 @@ export interface LogoColumnsOwnProps {
|
|
|
4
4
|
/**
|
|
5
5
|
* `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
|
|
6
6
|
* `subtle` — The grey band, with white tiles on it. For full-colour logos, where the section needs setting apart from the ones around it. Painted as the band's tint over the page's own ground, so it is the same grey whatever is behind the section
|
|
7
|
-
* `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong —
|
|
7
|
+
* `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong-on-brand-strong — slate.850 in light and slate.900 in dark, a step above the band in both, so the wall is a set of tiles a step lighter than the band. The ground white wordmarks are drawn for
|
|
8
8
|
*/
|
|
9
9
|
ground?: 'page' | 'subtle' | 'strong';
|
|
10
10
|
/**
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
:where([data-dds-context="marketing"]) .dds-logorows[data-ground="strong"] .dds-logorows__logo {
|
|
111
|
-
background-color: var(--color-bg-surface-card-strong);
|
|
111
|
+
background-color: var(--color-bg-surface-card-strong-on-brand-strong);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
:where([data-dds-context="marketing"]) .dds-logorows[data-ground="subtle"] {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import './LogoRows.css';
|
|
2
2
|
import './logo-rows-impl.css';
|
|
3
3
|
import '../block-reveal.css';
|
|
4
|
+
import '../block-pattern.css';
|
|
4
5
|
import { type LogoRowsProps } from './LogoRows.types.js';
|
|
5
6
|
export type { LogoRowsProps };
|
|
6
7
|
/**
|
|
@@ -17,4 +18,4 @@ export type { LogoRowsProps };
|
|
|
17
18
|
* the first set is announced, so a screen reader hears each name once. The title carries the
|
|
18
19
|
* section's accessible name through `aria-labelledby`.
|
|
19
20
|
*/
|
|
20
|
-
export declare function LogoRows({ ground, title, description, link, logos, }: LogoRowsProps): import("react").JSX.Element | null;
|
|
21
|
+
export declare function LogoRows({ ground, background, title, description, link, logos, }: LogoRowsProps): import("react").JSX.Element | null;
|
|
@@ -4,8 +4,11 @@ import { useId } from 'react';
|
|
|
4
4
|
import './LogoRows.css';
|
|
5
5
|
import './logo-rows-impl.css';
|
|
6
6
|
import '../block-reveal.css';
|
|
7
|
+
import '../block-pattern.css';
|
|
7
8
|
import { arriving, useReveal } from '../use-reveal.js';
|
|
8
9
|
import { given } from '../../given.js';
|
|
10
|
+
import { Background } from '../../core/background/Background.js';
|
|
11
|
+
import { PATTERN_TONE } from '../pattern-tone.js';
|
|
9
12
|
import { logoRowsDefaults, logoRowsParts, } from './LogoRows.types.js';
|
|
10
13
|
/**
|
|
11
14
|
* How many times each row is drawn. A row moves by one set across the rail's pass, so the end of
|
|
@@ -27,7 +30,7 @@ const SETS = 4;
|
|
|
27
30
|
* the first set is announced, so a screen reader hears each name once. The title carries the
|
|
28
31
|
* section's accessible name through `aria-labelledby`.
|
|
29
32
|
*/
|
|
30
|
-
export function LogoRows({ ground = logoRowsDefaults.ground, title, description, link, logos, }) {
|
|
33
|
+
export function LogoRows({ ground = logoRowsDefaults.ground, background, title, description, link, logos, }) {
|
|
31
34
|
const titleId = useId();
|
|
32
35
|
const [band, revealed] = useReveal();
|
|
33
36
|
// Nothing to show is nothing drawn: a row with no logo on it is a claim with no evidence.
|
|
@@ -37,7 +40,7 @@ export function LogoRows({ ground = logoRowsDefaults.ground, title, description,
|
|
|
37
40
|
logos.filter((_, at) => at % 2 === 0),
|
|
38
41
|
logos.filter((_, at) => at % 2 === 1),
|
|
39
42
|
];
|
|
40
|
-
return (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
return (_jsxs("section", { className: logoRowsParts.root, "data-ground": ground, "data-background": background, "aria-labelledby": titleId, children: [background ? _jsx(Background, { tone: PATTERN_TONE[ground], pattern: background, children: null }) : null, _jsxs("div", { className: logoRowsParts.inner, ref: band, "data-revealed": revealed, children: [_jsxs("div", { className: logoRowsParts.header, children: [_jsx("h2", { className: logoRowsParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: logoRowsParts.description, ...arriving(1), children: description })) : null, link ? (_jsx("div", { className: logoRowsParts.link, ...arriving(2), children: link })) : null] }), _jsx("div", { className: logoRowsParts.rail, ...arriving(3), children: rows.map((row, at) => row.length === 0 ? null : (_jsx("ul", { className: logoRowsParts.track, "data-row": at === 0 ? 'leading' : 'trailing', children: Array.from({ length: SETS }, (_, set) => row.map((logo, index) => (
|
|
44
|
+
// A logo's place is its identity: the list is the page's, and nothing reorders it.
|
|
45
|
+
_jsx("li", { className: logoRowsParts.logo, "aria-hidden": set === 0 ? undefined : 'true', children: _jsx("img", { className: logoRowsParts['logo-image'], src: logo.src, alt: logo.name, draggable: false }) }, `${set}-${index}`)))) }, at))) })] })] }));
|
|
43
46
|
}
|
|
@@ -4,9 +4,17 @@ export interface LogoRowsOwnProps {
|
|
|
4
4
|
/**
|
|
5
5
|
* `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
|
|
6
6
|
* `subtle` — The grey band, with white tiles on it. For full-colour logos, where the section needs setting apart from the ones around it. Painted as the band's tint over the page's own ground, so it is the same grey whatever is behind the section
|
|
7
|
-
* `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong —
|
|
7
|
+
* `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong-on-brand-strong — slate.850 in light and slate.900 in dark, a step above the band in both, so the row is a set of tiles a step lighter than the band. The ground white wordmarks are drawn for
|
|
8
8
|
*/
|
|
9
9
|
ground?: 'page' | 'subtle' | 'strong';
|
|
10
|
+
/**
|
|
11
|
+
* `halftone` — A field of coral dots that grow towards a soft glow at the band's foot and settle to a fine screen away from it.
|
|
12
|
+
* `aurora` — Curtains of the brand's light rising from the band's foot and swaying slowly.
|
|
13
|
+
* `mesh` — The band in the brand's reds folded into one another like a liquid — the loudest of the five, for a dark band.
|
|
14
|
+
* `grid` — Hairlines a pitch apart rising from a soft bloom at the band's foot — the quietest, and the one to reach for first.
|
|
15
|
+
* `rings` — Hairline circles spreading out from the middle of the band's foot.
|
|
16
|
+
*/
|
|
17
|
+
background?: 'halftone' | 'aurora' | 'mesh' | 'grid' | 'rings';
|
|
10
18
|
/** Always. The one claim the logos back, in the fewest words that say it — "Trusted by leading platforms worldwide". */
|
|
11
19
|
title: string;
|
|
12
20
|
/** The line under the heading: what the logos mean for the reader — which payment methods they can use, which platforms they can trade on. */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Background tone that matches each ground, so the pattern is drawn on the ground the band paints.
|
|
3
|
+
*
|
|
4
|
+
* Shared because four blocks draw the page's one patterned band as their first layer — FeatureCards,
|
|
5
|
+
* Stats, TestimonialRow and LogoRows — and all of them have to pick the tone the same way.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PATTERN_TONE: {
|
|
8
|
+
readonly page: "light";
|
|
9
|
+
readonly subtle: "subtle";
|
|
10
|
+
readonly strong: "dark";
|
|
11
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Background tone that matches each ground, so the pattern is drawn on the ground the band paints.
|
|
3
|
+
*
|
|
4
|
+
* Shared because four blocks draw the page's one patterned band as their first layer — FeatureCards,
|
|
5
|
+
* Stats, TestimonialRow and LogoRows — and all of them have to pick the tone the same way.
|
|
6
|
+
*/
|
|
7
|
+
export const PATTERN_TONE = { page: 'light', subtle: 'subtle', strong: 'dark' };
|
|
@@ -33,4 +33,4 @@ export type { ProductHeroProps };
|
|
|
33
33
|
* region landmark once it has a name, and a band that announced itself as an unnamed section is one
|
|
34
34
|
* more thing a screen reader user walks through rather than a place they can skip to.
|
|
35
35
|
*/
|
|
36
|
-
export declare function ProductHero({ eyebrow, title, headingLevel, description, actions, image, media, backgroundImage, }: ProductHeroProps): import("react").JSX.Element;
|
|
36
|
+
export declare function ProductHero({ eyebrow, title, headingLevel, description, actions, image, media, backgroundImage, shade, }: ProductHeroProps): import("react").JSX.Element;
|
|
@@ -37,11 +37,11 @@ import { productHeroDefaults, productHeroParts, } from './ProductHero.types.js';
|
|
|
37
37
|
* region landmark once it has a name, and a band that announced itself as an unnamed section is one
|
|
38
38
|
* more thing a screen reader user walks through rather than a place they can skip to.
|
|
39
39
|
*/
|
|
40
|
-
export function ProductHero({ eyebrow, title, headingLevel = productHeroDefaults.headingLevel, description, actions, image, media, backgroundImage, }) {
|
|
40
|
+
export function ProductHero({ eyebrow, title, headingLevel = productHeroDefaults.headingLevel, description, actions, image, media, backgroundImage, shade = productHeroDefaults.shade, }) {
|
|
41
41
|
const titleId = useId();
|
|
42
42
|
const [band, revealed] = useReveal();
|
|
43
43
|
const Title = headingLevel === 'h2' ? 'h2' : 'h1';
|
|
44
|
-
return (_jsx("section", { className: productHeroParts.root, "aria-labelledby": titleId,
|
|
44
|
+
return (_jsx("section", { className: productHeroParts.root, "aria-labelledby": titleId, "data-shade": shade && given(backgroundImage) ? '' : undefined,
|
|
45
45
|
/* The one inline style here, and it is a value rather than a decision: which photograph,
|
|
46
46
|
supplied by the page. How it is drawn — the cover fit and the position —
|
|
47
47
|
is in the stylesheet, where it can be reasoned about. */
|
|
@@ -18,10 +18,14 @@ export interface ProductHeroOwnProps {
|
|
|
18
18
|
image?: BlockImage;
|
|
19
19
|
/** A product picture in a shape the page fixes on purpose — an AspectRatio box, which keeps its ratio across the column. Prefer `image`, which keeps the picture's own shape and adapts to it. */
|
|
20
20
|
media?: ReactNode;
|
|
21
|
-
/** A photograph filling the whole band. It is shown as it is — nothing is painted over it, so choose one already dark enough that the title reads on it */
|
|
22
|
-
backgroundImage?: string;
|
|
23
21
|
}
|
|
24
|
-
export type ProductHeroProps = ProductHeroOwnProps
|
|
22
|
+
export type ProductHeroProps = ProductHeroOwnProps & ({
|
|
23
|
+
shade?: boolean;
|
|
24
|
+
backgroundImage: string;
|
|
25
|
+
} | {
|
|
26
|
+
shade?: false;
|
|
27
|
+
backgroundImage?: string;
|
|
28
|
+
});
|
|
25
29
|
/** The class each part carries. Apply these — do not retype them. */
|
|
26
30
|
export declare const productHeroParts: {
|
|
27
31
|
readonly root: "dds-producthero";
|
|
@@ -38,4 +42,5 @@ export declare const productHeroParts: {
|
|
|
38
42
|
/** Generated so defaults cannot drift from the contract. */
|
|
39
43
|
export declare const productHeroDefaults: {
|
|
40
44
|
readonly headingLevel: "h1";
|
|
45
|
+
readonly shade: false;
|
|
41
46
|
};
|
|
@@ -13,4 +13,4 @@ export const productHeroParts = {
|
|
|
13
13
|
image: 'dds-producthero__image',
|
|
14
14
|
};
|
|
15
15
|
/** Generated so defaults cannot drift from the contract. */
|
|
16
|
-
export const productHeroDefaults = { headingLevel: 'h1' };
|
|
16
|
+
export const productHeroDefaults = { headingLevel: 'h1', shade: false };
|