@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
package/.llm/components/link.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Link
|
|
4
4
|
|
|
5
|
+
Takes the visitor to another page, inline or on its own.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
A destination named inside a sentence, or standing on its own under one. Inside a sentence it takes everything from the copy around it — the size, the face, the ink — and is told apart by an underline alone. On its own line it takes the brand ink and a mark instead, because there is no sentence to belong to.
|
|
6
10
|
|
|
7
11
|
Button is the other half of this, and the two are the same act — go somewhere — at different volumes. A Button is a pill a reader aims at; a Link is words a reader is already reading. The test is whether taking it out would leave a hole in the sentence: if it would, it is a link, and if the sentence would read fine without it, the page wanted a Button.
|
|
@@ -46,7 +50,7 @@ Link renders 3 elements. A token binding names the part it applies to.
|
|
|
46
50
|
|
|
47
51
|
The ink is `color.bg.brand`, which is a background role doing a foreground's job, and that is worth naming rather than hiding. `color.fg.brand` exists and is the readable one at 7.75:1 — but it is the dark red a Badge sets on a pale tint, not the coral the page is built from, and a link that did not match the buttons would read as a different kind of thing. The brand primary is one colour in this system and it is spelled `color.bg.brand`; a `fg` alias for the same value would be a second name for one decision.
|
|
48
52
|
|
|
49
|
-
A
|
|
53
|
+
A standalone link at `tone: inherit` — one on a brand card, a dark band, a scrim — draws no underline either, at rest or under the pointer, the same as at `tone: brand`. Its colour belongs to the ground and so cannot change on hover; what answers the pointer is the mark, which moves along the way it already points, as it does on every standalone link. Product keeps an underline at `tone: inherit` at all times; these designs have none on a standalone link anywhere, and a line that appears on one tone and not the other would make the two read as different kinds of link.
|
|
50
54
|
- `icon-leading` — `<span>`, class `dds-link__icon-leading`. A glyph before the words, when the destination has a mark a reader recognises faster than its name — a document, a download, a platform. Rare in running copy and ordinary in the standalone variant, which is where it earns its place.
|
|
51
55
|
|
|
52
56
|
A box of the tab's own rather than the glyph itself, because Icon clones onto the SVG and this part is the place in the line. Drawn at `icon.size.xs` — sixteen, a step below what a control takes, because this sits beside words rather than inside a target and twenty next to a sixteen-pixel label outweighs the words it is there to qualify. The part carries the gap and nothing else: the colour comes from the link, which is what `fill="currentColor"` on the glyph is for.
|
|
@@ -175,6 +179,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
175
179
|
Guidance only — cannot be checked automatically.
|
|
176
180
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
177
181
|
Guidance only — cannot be checked automatically.
|
|
182
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
183
|
+
|
|
184
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
185
|
+
|
|
186
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
187
|
+
Guidance only — cannot be checked automatically.
|
|
178
188
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
179
189
|
|
|
180
190
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -349,7 +359,7 @@ Standalone only, and solid like the arrow — every glyph on a standalone link t
|
|
|
349
359
|
|
|
350
360
|
```tsx
|
|
351
361
|
import { Link } from '@deriv-com/dds-marketing'
|
|
352
|
-
import { FileShieldSolidIcon, WalletSolidIcon } from '@deriv-com/
|
|
362
|
+
import { FileShieldSolidIcon, WalletSolidIcon } from '@deriv-com/dds-marketing/icons'
|
|
353
363
|
|
|
354
364
|
// A destination with a mark of its own
|
|
355
365
|
<Link href="/licence" iconLeading={<FileShieldSolidIcon />}>Read the licence</Link>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# LogoColumns
|
|
4
4
|
|
|
5
|
+
Backs a claim with two columns of logos that scroll in opposite directions.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
A section that backs one claim with the names behind it: a heading, a line, an optional disclaimer and a way onward, beside a wall of logo tiles in two columns that run in opposite directions as the reader scrolls past — one rising, one falling — fading out at the wall's top and bottom edge so the set reads as longer than the space it is shown in.
|
|
6
10
|
|
|
7
11
|
The reference design's LogoMarquee, renamed for what it is: FeatureSplit's arrangement with a logo wall where the picture goes, rather than a marquee, which is a strip that runs sideways on its own. The movement is the scroll's — it never moves while the page is still, and never for a reader who asked for less motion.
|
|
@@ -50,7 +54,7 @@ Apply these classes from the generated `logoColumnsParts` constant rather than w
|
|
|
50
54
|
|
|
51
55
|
- `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
|
|
52
56
|
- `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
|
|
53
|
-
- `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong —
|
|
57
|
+
- `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
|
|
54
58
|
|
|
55
59
|
Use when: Which of the page's grounds the section paints, and with it the tiles' fill: the recessed surface on the page, the raised white on the grey band, and the strong card on the dark band. The dark band is the default, the reference design's: logos are most often drawn as white wordmarks for a dark ground, and a set of them reads as one wall there.
|
|
56
60
|
Never for: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly.
|
|
@@ -117,6 +121,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
117
121
|
Guidance only — cannot be checked automatically.
|
|
118
122
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
119
123
|
Guidance only — cannot be checked automatically.
|
|
124
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
125
|
+
|
|
126
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
127
|
+
|
|
128
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
129
|
+
Guidance only — cannot be checked automatically.
|
|
120
130
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
121
131
|
|
|
122
132
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# LogoRows
|
|
4
4
|
|
|
5
|
+
Backs a claim with two rows of logos that slide in opposite directions.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
A section that backs one claim with the names behind it, stacked: a heading, a line and a way onward, centred, over two rows of logo tiles across the band's full width that slide sideways in opposite directions as the reader scrolls past — fading out at both of their ends, so the set reads as longer than the band.
|
|
6
10
|
|
|
7
11
|
LogoColumns' horizontal form, for a page where the claim leads and the logos sign it off: the words over the rows rather than beside a wall. The movement is the scroll's — it never moves while the page is still, and never for a reader who asked for less motion.
|
|
@@ -23,7 +27,7 @@ LogoColumns' horizontal form, for a page where the claim leads and the logos sig
|
|
|
23
27
|
|
|
24
28
|
LogoRows renders 10 elements. A token binding names the part it applies to.
|
|
25
29
|
|
|
26
|
-
- `root` — `<section>`, class `dds-logorows`. The section. It paints the ground and the ink to go with it — see `ground` — and asks its own width. A region named by its heading. It clips with `overflow: clip` rather than `hidden`, which would make it a scroll container and freeze the row's scroll-driven movement.
|
|
30
|
+
- `root` — `<section>`, class `dds-logorows`. The section. It paints the ground and the ink to go with it — see `ground` — and asks its own width. A region named by its heading. It clips with `overflow: clip` rather than `hidden`, which would make it a scroll container and freeze the row's scroll-driven movement. Given `background`, it draws the page's one patterned band: a Background as its first layer, under everything it holds, in the tone of its ground.
|
|
27
31
|
- `inner` — `<div>`, class `dds-logorows__inner`. The measure and the gutter, the same column every band holds its content in, and the step from the words to the rows: space.heading.content.
|
|
28
32
|
- `header` — `<div>`, class `dds-logorows__header`. The heading, the line under it and the way on. Ranged to the start on a phone and centred from the fold, FeatureCards' arrangement.
|
|
29
33
|
- `title` — `<h2>`, class `dds-logorows__title`. The claim the logos back. `h2`, because a section sits under the page's own heading.
|
|
@@ -47,13 +51,24 @@ Apply these classes from the generated `logoRowsParts` constant rather than writ
|
|
|
47
51
|
|
|
48
52
|
- `page` — The page's own white, with tiles at the recessed gray. For full-colour logos drawn for a light ground
|
|
49
53
|
- `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
|
|
50
|
-
- `strong` — The default. `color.bg.brand-strong`, the dark band, with white words and tiles at color.bg.surface-card-strong —
|
|
54
|
+
- `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
|
|
51
55
|
|
|
52
56
|
Use when: Which of the page's grounds the section paints, and with it the tiles' fill: the recessed surface on the page, the raised white on the grey band, and the strong card on the dark band. The dark band is the default, the reference design's: logos are most often drawn as white wordmarks for a dark ground, and a set of them reads as one row there.
|
|
53
57
|
Never for: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly.
|
|
54
58
|
|
|
55
59
|
And never the brand's own coral, `color.bg.brand`, which is not offered here. That ground belongs to the band that asks a reader to do something — the one place on a page where the brand colour is the point rather than decoration — and a feature section wearing it is a page with two calls to action, one of which does nothing. It is `color.bg.brand-strong` that this offers: the dark brand ground, which is a band breaking a page rather than a band asking for something.
|
|
56
60
|
|
|
61
|
+
### background — `halftone` | `aurora` | `mesh` | `grid` | `rings`
|
|
62
|
+
|
|
63
|
+
- `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.
|
|
64
|
+
- `aurora` — Curtains of the brand's light rising from the band's foot and swaying slowly.
|
|
65
|
+
- `mesh` — The band in the brand's reds folded into one another like a liquid — the loudest of the five, for a dark band.
|
|
66
|
+
- `grid` — Hairlines a pitch apart rising from a soft bloom at the band's foot — the quietest, and the one to reach for first.
|
|
67
|
+
- `rings` — Hairline circles spreading out from the middle of the band's foot.
|
|
68
|
+
|
|
69
|
+
Use when: The page's one patterned band, between its hero and its closing call to action — a band a reader should stop at. The pattern is drawn by Background as the section's first layer, under its content and over nothing, in the tone of the ground: the light pattern on `page`, the same on the grey of `subtle`, the dark one on `strong`. Every pattern rises from the band's foot, which this block leaves open under its content. Leave it out and the band is its flat ground, as most bands on a page are.
|
|
70
|
+
Never for: More than one band on a page, or a band that is already the hero or the call to action — those carry their own patterns. One pattern is what makes a band the one a reader remembers; two make neither, and a page of them is noise. Never wrap this block in a Background instead: it paints its own ground over whatever is behind it, so the pattern would be hidden, and the pattern belongs under the content, not around it.
|
|
71
|
+
|
|
57
72
|
### title — `string` **Required.**
|
|
58
73
|
|
|
59
74
|
Use when: Always. The one claim the logos back, in the fewest words that say it — "Trusted by leading platforms worldwide".
|
|
@@ -101,6 +116,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
101
116
|
Guidance only — cannot be checked automatically.
|
|
102
117
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
103
118
|
Guidance only — cannot be checked automatically.
|
|
119
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
120
|
+
|
|
121
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
122
|
+
|
|
123
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
124
|
+
Guidance only — cannot be checked automatically.
|
|
104
125
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
105
126
|
|
|
106
127
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -210,3 +231,26 @@ import { Link, LogoRows } from '@deriv-com/dds-marketing'
|
|
|
210
231
|
// ground="subtle"
|
|
211
232
|
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} ground="subtle" />
|
|
212
233
|
```
|
|
234
|
+
|
|
235
|
+
### The page's one patterned band
|
|
236
|
+
|
|
237
|
+
One band per page, between the hero and the closing call to action, its pattern drawn under the content in the tone of its ground.
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
import { Link, LogoRows } from '@deriv-com/dds-marketing'
|
|
241
|
+
|
|
242
|
+
// grid on page
|
|
243
|
+
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} background="grid" ground="page" />
|
|
244
|
+
|
|
245
|
+
// rings on subtle
|
|
246
|
+
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} background="rings" ground="subtle" />
|
|
247
|
+
|
|
248
|
+
// halftone on strong
|
|
249
|
+
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} background="halftone" ground="strong" />
|
|
250
|
+
|
|
251
|
+
// aurora on strong
|
|
252
|
+
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} background="aurora" ground="strong" />
|
|
253
|
+
|
|
254
|
+
// mesh on strong
|
|
255
|
+
<LogoRows title="Trusted by leading platforms worldwide" description="Deposit and withdraw with the payment methods your business already relies on." link={<Link variant="standalone" href="#partners">View all partners</Link>} logos={[{"name":"Visa","src":"/sample-card-image.svg"},{"name":"Mastercard","src":"/sample-card-image.svg"},{"name":"Skrill","src":"/sample-card-image.svg"},{"name":"Neteller","src":"/sample-card-image.svg"},{"name":"Perfect Money","src":"/sample-card-image.svg"},{"name":"Jeton","src":"/sample-card-image.svg"},{"name":"Sticpay","src":"/sample-card-image.svg"},{"name":"Bitcoin","src":"/sample-card-image.svg"},{"name":"Ethereum","src":"/sample-card-image.svg"},{"name":"Tether","src":"/sample-card-image.svg"}]} background="mesh" ground="strong" />
|
|
256
|
+
```
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# MenuItem
|
|
4
4
|
|
|
5
|
+
One item in a DropdownMenu.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
One command in a menu. Pressing it does something and the menu shuts — it holds no value and carries no mark, so there is nothing about it to find on reopening.
|
|
6
10
|
|
|
7
11
|
It ships ahead of its host, and that is worth saying plainly: its role is menuitem, which means nothing to a screen reader outside an element whose role is menu. On its own it is a row that looks right and announces wrong. DropdownMenu is what makes it a component rather than a fragment, and until that lands this is a contract and a stylesheet waiting for one.
|
|
@@ -98,6 +102,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
98
102
|
Guidance only — cannot be checked automatically.
|
|
99
103
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
100
104
|
Guidance only — cannot be checked automatically.
|
|
105
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
106
|
+
|
|
107
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
108
|
+
|
|
109
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
110
|
+
Guidance only — cannot be checked automatically.
|
|
101
111
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
102
112
|
|
|
103
113
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -175,7 +185,7 @@ Two things genuinely have no logical form and are not covered by this. A CSS gra
|
|
|
175
185
|
|
|
176
186
|
```tsx
|
|
177
187
|
import { MenuItem } from '@deriv-com/dds-marketing'
|
|
178
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
188
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
179
189
|
|
|
180
190
|
<MenuItem onSelect={() => { /* your handler */ }} icon={<GlobeRegularIcon />}>English</MenuItem>
|
|
181
191
|
```
|
|
@@ -188,7 +198,7 @@ The rows a marketing menu holds: short labels a reader chooses between, not oper
|
|
|
188
198
|
|
|
189
199
|
```tsx
|
|
190
200
|
import { MenuItem } from '@deriv-com/dds-marketing'
|
|
191
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
201
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
192
202
|
|
|
193
203
|
// With a mark, for a set read by shape
|
|
194
204
|
<MenuItem onSelect={() => { /* your handler */ }} icon={<GlobeRegularIcon />}>English</MenuItem>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Navbar
|
|
4
4
|
|
|
5
|
+
The bar across the top of a marketing page: logo, links and actions.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
The bar across the top of a marketing page, and three regions: the mark that says whose site this is, the places the site has, and the things a reader reaches for rather than navigates to — the language, the theme, and what the site wants them to do.
|
|
6
10
|
|
|
7
11
|
It holds no destinations of its own. What goes in it is the NavbarItems and NavbarMenus a page composes, because a marketing site's navigation is written by the site rather than enumerated by this system, and a component that took an array of routes would be a second router nobody asked for. What this owns is the bar: where it sits, what it is made of, and what happens when it runs out of room.
|
|
@@ -298,6 +302,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
298
302
|
Guidance only — cannot be checked automatically.
|
|
299
303
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
300
304
|
Guidance only — cannot be checked automatically.
|
|
305
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
306
|
+
|
|
307
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
308
|
+
|
|
309
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
310
|
+
Guidance only — cannot be checked automatically.
|
|
301
311
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
302
312
|
|
|
303
313
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -509,7 +519,7 @@ The language is a NavbarSwitcher in preferences. The theme is a toggle the bar d
|
|
|
509
519
|
```tsx
|
|
510
520
|
import { Button, Navbar, NavbarSwitcher, NavbarSwitcherOption } from '@deriv-com/dds-marketing'
|
|
511
521
|
import { DerivCoralWordmark } from '@deriv-com/quill-logos-web'
|
|
512
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
522
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
513
523
|
|
|
514
524
|
// Language only
|
|
515
525
|
<Navbar label="Main" menuLabel="Menu" closeLabel="Close" brand={<DerivCoralWordmark />} utilities={<Button size="md" href="/signup">Open account</Button>} preferences={<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<GlobeRegularIcon />} />}>{navbaritems}</Navbar>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarItem
|
|
4
4
|
|
|
5
|
+
One link in the Navbar.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
One place the site has, in the bar across the top of it. An anchor with a target around it, a mark for the section the reader is currently in, and nothing else.
|
|
6
10
|
|
|
7
11
|
It exists rather than a Link being reused because a destination in a navigation bar carries something a Link cannot: which one the reader is on. That is `aria-current`, a target big enough to hit, and a resting shape the current one fills in — none of which belongs on the component a page also uses in the middle of a sentence. A Link is prose that leads somewhere; this is furniture.
|
|
@@ -121,6 +125,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
121
125
|
Guidance only — cannot be checked automatically.
|
|
122
126
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
123
127
|
Guidance only — cannot be checked automatically.
|
|
128
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
129
|
+
|
|
130
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
131
|
+
|
|
132
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
133
|
+
Guidance only — cannot be checked automatically.
|
|
124
134
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
125
135
|
|
|
126
136
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarMenu
|
|
4
4
|
|
|
5
|
+
A Navbar item that opens a wide panel of links.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
A destination in the bar that opens rather than goes: a named trigger, and a wide panel beneath it holding the section's own destinations in columns, usually with something promotional beside them.
|
|
6
10
|
|
|
7
11
|
It is a button and not a link, which is the whole of why it is a component rather than a NavbarItem with extra parts. Pressing it reveals something on the page the reader is already on — no navigation, no history entry, and the back button has nothing to undo. An item that opened a panel while claiming to be a link would be wrong to the browser, to the back button and to every assistive technology at once.
|
|
@@ -187,6 +191,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
187
191
|
Guidance only — cannot be checked automatically.
|
|
188
192
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
189
193
|
Guidance only — cannot be checked automatically.
|
|
194
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
195
|
+
|
|
196
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
197
|
+
|
|
198
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
199
|
+
Guidance only — cannot be checked automatically.
|
|
190
200
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
191
201
|
|
|
192
202
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarMenuGroup
|
|
4
4
|
|
|
5
|
+
A titled list of links inside a NavbarMenu panel.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
A named handful of destinations inside a section's panel: a word over a short list, so a reader scanning a panel of twenty links is reading four sets of five rather than twenty of anything.
|
|
6
10
|
|
|
7
11
|
The word is the whole point and it is not a heading. A panel opens inside a navigation landmark on a page that already has its own outline, and a heading element here would insert a level into that outline for something the reader never sees in the document — so what this draws is a label, and what it gives assistive technology is a named group. The two say the same thing by different means, which is the arrangement a panel like this has to reach for.
|
|
@@ -87,6 +91,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
87
91
|
Guidance only — cannot be checked automatically.
|
|
88
92
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
89
93
|
Guidance only — cannot be checked automatically.
|
|
94
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
95
|
+
|
|
96
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
97
|
+
|
|
98
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
99
|
+
Guidance only — cannot be checked automatically.
|
|
90
100
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
91
101
|
|
|
92
102
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarPanel
|
|
4
4
|
|
|
5
|
+
The full site navigation for screens too narrow for the Navbar.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
The whole of a site's navigation at a width the bar cannot hold it: the mark and a way out across the top, the destinations down the middle, whatever the site wants across the foot.
|
|
6
10
|
|
|
7
11
|
It is a surface that covers the page, and three things follow from that which nothing about its appearance suggests — focus is held inside it, Escape closes it, and the document beneath holds still. Those are why it is a component rather than a stretch of markup a page writes, and they live in a hook beside it that a site building its own covering surface can reach for.
|
|
@@ -157,6 +161,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
157
161
|
Guidance only — cannot be checked automatically.
|
|
158
162
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
159
163
|
Guidance only — cannot be checked automatically.
|
|
164
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
165
|
+
|
|
166
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
167
|
+
|
|
168
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
169
|
+
Guidance only — cannot be checked automatically.
|
|
160
170
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
161
171
|
|
|
162
172
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarSwitcher
|
|
4
4
|
|
|
5
|
+
Sets a site preference from the Navbar, such as language or theme.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
Something a reader sets rather than somewhere they go: the language the page is read in, the region its prices are in, the theme it is drawn in. It sits in a navigation bar beside the destinations and takes two quite different forms depending on where it is drawn.
|
|
6
10
|
|
|
7
11
|
In the bar it is a trigger and a menu hanging off it. In the collapsed panel it is a row that opens a page of its own, with a way back — because a menu inside a surface that already covers the screen is a surface inside a surface, and because a phone has room to show sixteen languages properly only if it stops showing everything else.
|
|
@@ -146,6 +150,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
146
150
|
Guidance only — cannot be checked automatically.
|
|
147
151
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
148
152
|
Guidance only — cannot be checked automatically.
|
|
153
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
154
|
+
|
|
155
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
156
|
+
|
|
157
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
158
|
+
Guidance only — cannot be checked automatically.
|
|
149
159
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
150
160
|
|
|
151
161
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -223,7 +233,7 @@ Two things genuinely have no logical form and are not covered by this. A CSS gra
|
|
|
223
233
|
|
|
224
234
|
```tsx
|
|
225
235
|
import { NavbarSwitcher, NavbarSwitcherOption, Icon } from '@deriv-com/dds-marketing'
|
|
226
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
236
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
227
237
|
|
|
228
238
|
<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<Icon size="xs"><GlobeRegularIcon /></Icon>}>
|
|
229
239
|
<NavbarSwitcherOption current onSelect={() => { /* your handler */ }}>English</NavbarSwitcherOption>
|
|
@@ -244,7 +254,7 @@ import { GlobeRegularIcon } from '@deriv-com/quill-icons-web'
|
|
|
244
254
|
```tsx
|
|
245
255
|
import { useState } from 'react'
|
|
246
256
|
import { NavbarSwitcher, NavbarSwitcherOption, Icon } from '@deriv-com/dds-marketing'
|
|
247
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
257
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
248
258
|
|
|
249
259
|
// NavbarSwitcher holds nothing: open is the consumer's, and it does not move until
|
|
250
260
|
// the value handed back by onOpenChange is written to it.
|
|
@@ -296,7 +306,7 @@ The container decides, not the page. In a bar the choices hang off the trigger;
|
|
|
296
306
|
|
|
297
307
|
```tsx
|
|
298
308
|
import { Icon, NavbarSwitcher } from '@deriv-com/dds-marketing'
|
|
299
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
309
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
300
310
|
|
|
301
311
|
// floating — in the bar
|
|
302
312
|
<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<Icon size="xs"><GlobeRegularIcon /></Icon>} open>{navbarswitcheroptions}</NavbarSwitcher>
|
|
@@ -311,7 +321,7 @@ The trigger shows the choice in force rather than the name of the question — a
|
|
|
311
321
|
|
|
312
322
|
```tsx
|
|
313
323
|
import { Icon, NavbarSwitcher } from '@deriv-com/dds-marketing'
|
|
314
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
324
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
315
325
|
|
|
316
326
|
// At rest — a mark and the current choice
|
|
317
327
|
<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<Icon size="xs"><GlobeRegularIcon /></Icon>}>{navbarswitcheroptions}</NavbarSwitcher>
|
|
@@ -326,7 +336,7 @@ Only the tints move. The words take the ink around them either way, which is how
|
|
|
326
336
|
|
|
327
337
|
```tsx
|
|
328
338
|
import { Icon, NavbarSwitcher } from '@deriv-com/dds-marketing'
|
|
329
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
339
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
330
340
|
|
|
331
341
|
// default — a light bar
|
|
332
342
|
<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<Icon size="xs"><GlobeRegularIcon /></Icon>}>{navbarswitcheroptions}</NavbarSwitcher>
|
|
@@ -341,7 +351,7 @@ Off by default, because a switcher usually stands among destinations that each c
|
|
|
341
351
|
|
|
342
352
|
```tsx
|
|
343
353
|
import { Icon, NavbarSwitcher } from '@deriv-com/dds-marketing'
|
|
344
|
-
import { GlobeRegularIcon } from '@deriv-com/
|
|
354
|
+
import { GlobeRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
345
355
|
|
|
346
356
|
// Without — among sections that have their own
|
|
347
357
|
<NavbarSwitcher label="EN" menuLabel="Language" backLabel="Back to the menu" icon={<Icon size="xs"><GlobeRegularIcon /></Icon>}>{navbarswitcheroptions}</NavbarSwitcher>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# NavbarSwitcherOption
|
|
4
4
|
|
|
5
|
+
One choice in a NavbarSwitcher, such as a language or theme.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
One choice inside a NavbarSwitcher: a language, a region, a theme. A button rather than a link — choosing one changes how the page is drawn or worded, which is not navigation and must not carry an href, a history entry or anything for the back button to undo.
|
|
6
10
|
|
|
7
11
|
It says which one is current. That is the whole reason this is a component rather than a MenuItem: a set of choices where the one in force is not marked is a set a reader has to remember the answer to, and the mark has to be readable as well as coloured — `aria-current` carries it for a reader who cannot see the ink.
|
|
@@ -70,6 +74,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
70
74
|
Guidance only — cannot be checked automatically.
|
|
71
75
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
72
76
|
Guidance only — cannot be checked automatically.
|
|
77
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
78
|
+
|
|
79
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
80
|
+
|
|
81
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
82
|
+
Guidance only — cannot be checked automatically.
|
|
73
83
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
74
84
|
|
|
75
85
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Option
|
|
4
4
|
|
|
5
|
+
One choice in a list that opens from a control.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
One answer on offer inside a control that opens a list. It knows what it is worth and what to call itself, and nothing about where it sits — whether it is the answer, whether the arrow keys are on it, and how tall to be are all passed down, because only the control can see the set. One row for every such control rather than one per control: what differs between one chip and the next is the trigger, never the row.
|
|
6
10
|
|
|
7
11
|
## Use when
|
|
@@ -108,6 +112,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
108
112
|
Guidance only — cannot be checked automatically.
|
|
109
113
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
110
114
|
Guidance only — cannot be checked automatically.
|
|
115
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
116
|
+
|
|
117
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
118
|
+
|
|
119
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
120
|
+
Guidance only — cannot be checked automatically.
|
|
111
121
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
112
122
|
|
|
113
123
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -230,7 +240,7 @@ For a set the reader knows by sight, where recognising beats reading. It takes t
|
|
|
230
240
|
|
|
231
241
|
```tsx
|
|
232
242
|
import { Option } from '@deriv-com/dds-marketing'
|
|
233
|
-
import { ChartCandlestickRegularIcon, CoinsRegularIcon } from '@deriv-com/
|
|
243
|
+
import { ChartCandlestickRegularIcon, CoinsRegularIcon } from '@deriv-com/dds-marketing/icons'
|
|
234
244
|
|
|
235
245
|
// A glyph the answer is known by
|
|
236
246
|
<Option value="forex" leadingIcon={<ChartCandlestickRegularIcon />}>Forex</Option>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# PageHeader
|
|
4
4
|
|
|
5
|
+
Opens a company or legal page with its title and one line of context.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
The band that opens a company or a legal page: the page's name, a line saying what it is, and nothing else.
|
|
6
10
|
|
|
7
11
|
The third of three opening bands and the only one that is not a hero. It is capped rather than a screen tall, which is the whole difference — a reader arrives at Contact or Terms for the content, and a full-height band would be a wall in front of the first sentence.
|
|
@@ -111,6 +115,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
111
115
|
Guidance only — cannot be checked automatically.
|
|
112
116
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
113
117
|
Guidance only — cannot be checked automatically.
|
|
118
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
119
|
+
|
|
120
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
121
|
+
|
|
122
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
123
|
+
Guidance only — cannot be checked automatically.
|
|
114
124
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
115
125
|
|
|
116
126
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# Pagination
|
|
4
4
|
|
|
5
|
+
Moves the reader through a set too large to show at once.
|
|
6
|
+
|
|
7
|
+
## Why it is built this way
|
|
8
|
+
|
|
5
9
|
The control that moves a reader through a set too large to show at once. It sits beneath the index, archive or card set it governs, reports where in the sequence the reader stands, and offers the ways out of it — a step either side, a numbered target under one variant, a row of marks under another.
|
|
6
10
|
|
|
7
11
|
What separates this from product's is what a press is. A page of an index has an address of its own: page two of a blog is a place, and one a search engine has to be able to reach, so the numbered variant draws links and is given the URL of each page. A slide in a carousel is not a place and has no address, so its marks are buttons and the page handles the press. That is not a setting to choose — it is which variant you reached for, and the two cases arrive at different ends of this component.
|
|
@@ -151,6 +155,12 @@ What this is not about is every row of controls. A set of filter chips, a pagina
|
|
|
151
155
|
Guidance only — cannot be checked automatically.
|
|
152
156
|
- **Never nest one interactive element inside another** — Nested interactive elements produce ambiguous hit targets and an unreachable inner control for keyboard and screen-reader users. This is why the rule cannot live on any single component — it constrains Button, Link, CardButton and TextInput simultaneously.
|
|
153
157
|
Guidance only — cannot be checked automatically.
|
|
158
|
+
- **A page has at most one patterned band, between its hero and its closing call to action** — A patterned ground — the halftone, the aurora, the mesh, the grid or the rings — is what makes a band the one a reader stops at, and it only works by being the exception. So a page has at most one, placed between its hero and its closing call to action; the hero's and the call to action's own patterns are theirs and do not count, and the band never goes on either of them.
|
|
159
|
+
|
|
160
|
+
The pattern is the band's first layer, under its content and over nothing. A block that can carry one says so with its own `background` prop — FeatureCards, Stats, TestimonialRow and LogoRows — and draws it there; a section built by hand places a Background with nothing in it as its first child. Never wrap a block in a Background: the block paints its own ground over the pattern and hides it.
|
|
161
|
+
|
|
162
|
+
Only a band whose content is stacked can carry one. Every pattern rises from the band's foot, so the band needs a heading over what it introduces, centred, with the foot left open. A band whose content runs side by side — words beside a picture, a split, columns reaching the foot — puts the glow behind the picture or under the words; it stays on its flat ground.
|
|
163
|
+
Guidance only — cannot be checked automatically.
|
|
154
164
|
- **A section that paints a ground sets the ink to go with it** — A page sits on color.bg.page, and a section that separates itself from it takes one of three grounds. color.bg.subtle is the light one and needs nothing further — the page's own ink still reads on it. The other two are dark and do not: color.bg.brand-strong takes color.fg.on-brand-strong, and color.bg.brand takes color.fg.on-solid. Both are white, and both are written as the role rather than the white they resolve to. Set one of those backgrounds without its ink and the text inherits whatever the page was already using, which is near-black on a dark band — legible to nobody, and invisible to every check here, because each pair passes contrast on its own and nothing can tell whether a section used both.
|
|
155
165
|
|
|
156
166
|
color.bg.brand carries a second limit that is not about forgetting. Its ink measures 3.39:1, which clears the 3:1 a heading needs and misses the 4.5:1 running copy needs. A coral band may carry a headline and a call to action; a paragraph on one is text the reader has to work through at a ratio the waiver on that role does not cover — the waiver says so itself. A section with copy in it takes color.bg.brand-strong, which is near-black and carries white at full contrast.
|