@deriv-com/dds-marketing 1.0.1 → 1.1.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/awards.md +209 -0
- package/.llm/components/background.md +420 -0
- package/.llm/components/bottomsheet.md +5 -0
- package/.llm/components/comparisoncards.md +257 -0
- package/.llm/components/comparisontable.md +231 -0
- package/.llm/components/ctabanner.md +22 -0
- package/.llm/components/ctabannerslider.md +36 -2
- package/.llm/components/datatable.md +273 -0
- package/.llm/components/downloadbanner.md +283 -0
- package/.llm/components/featurecards.md +41 -3
- package/.llm/components/featurecardscarousel.md +311 -0
- package/.llm/components/featuresplit.md +5 -0
- package/.llm/components/featurestack.md +227 -0
- package/.llm/components/illustrationcard.md +236 -0
- package/.llm/components/illustrationscene.md +229 -0
- package/.llm/components/imagebanner.md +278 -0
- package/.llm/components/landinghero.md +24 -0
- package/.llm/components/navbar.md +1 -1
- package/.llm/components/navbaritem.md +4 -0
- package/.llm/components/pageheader.md +22 -0
- package/.llm/components/paginationdots.md +6 -1
- package/.llm/components/producthero.md +35 -11
- package/.llm/components/resourcebanner.md +247 -0
- package/.llm/components/scenescroll.md +222 -0
- package/.llm/components/select.md +17 -0
- package/.llm/components/stats.md +219 -0
- package/.llm/components/steps.md +286 -0
- package/.llm/components/stickycards.md +251 -0
- package/.llm/components/tableheadercell.md +19 -0
- package/.llm/components/teamgrid.md +243 -0
- package/.llm/components/testimonialrow.md +5 -0
- package/.llm/components/testimonialslider.md +14 -1
- package/.llm/components/textarea.md +13 -0
- package/.llm/components/textinput.md +13 -0
- package/.llm/components/textscroll.md +187 -0
- package/.llm/components/tiers.md +227 -0
- package/.llm/digest/awards.md +45 -0
- package/.llm/digest/background.md +53 -0
- package/.llm/digest/bottomsheet.md +2 -0
- package/.llm/digest/comparisoncards.md +51 -0
- package/.llm/digest/comparisontable.md +53 -0
- package/.llm/digest/ctabanner.md +4 -0
- package/.llm/digest/ctabannerslider.md +7 -0
- package/.llm/digest/datatable.md +65 -0
- package/.llm/digest/downloadbanner.md +65 -0
- package/.llm/digest/featurecards.md +1 -1
- package/.llm/digest/featurecardscarousel.md +54 -0
- package/.llm/digest/featuresplit.md +1 -0
- package/.llm/digest/featurestack.md +48 -0
- package/.llm/digest/illustrationcard.md +46 -0
- package/.llm/digest/illustrationscene.md +50 -0
- package/.llm/digest/imagebanner.md +64 -0
- package/.llm/digest/landinghero.md +7 -0
- package/.llm/digest/navbaritem.md +1 -0
- package/.llm/digest/pageheader.md +4 -0
- package/.llm/digest/paginationdots.md +3 -1
- package/.llm/digest/producthero.md +4 -2
- package/.llm/digest/resourcebanner.md +53 -0
- package/.llm/digest/scenescroll.md +49 -0
- package/.llm/digest/select.md +5 -0
- package/.llm/digest/stats.md +46 -0
- package/.llm/digest/steps.md +55 -0
- package/.llm/digest/stickycards.md +52 -0
- package/.llm/digest/tableheadercell.md +4 -0
- package/.llm/digest/teamgrid.md +53 -0
- package/.llm/digest/testimonialrow.md +2 -0
- package/.llm/digest/testimonialslider.md +4 -0
- package/.llm/digest/textarea.md +4 -0
- package/.llm/digest/textinput.md +4 -0
- package/.llm/digest/textscroll.md +43 -0
- package/.llm/digest/tiers.md +50 -0
- package/.llm/index.md +25 -2
- package/.llm/tokens.md +37 -1
- package/AGENTS.md +20 -1
- package/dist/components/awards-data.d.ts +24 -0
- package/dist/components/awards-data.js +11 -0
- package/dist/components/block-image-data.d.ts +24 -0
- package/dist/components/block-image-data.js +9 -0
- package/dist/components/blocks/awards/Awards.css +134 -0
- package/dist/components/blocks/awards/Awards.d.ts +24 -0
- package/dist/components/blocks/awards/Awards.js +114 -0
- package/dist/components/blocks/awards/Awards.types.d.ts +31 -0
- package/dist/components/blocks/awards/Awards.types.js +16 -0
- package/dist/components/blocks/awards/awards-impl.css +222 -0
- package/dist/components/blocks/cards-of.d.ts +16 -0
- package/dist/components/blocks/cards-of.js +23 -0
- package/dist/components/blocks/comparison-cards/ComparisonCards.css +195 -0
- package/dist/components/blocks/comparison-cards/ComparisonCards.d.ts +24 -0
- package/dist/components/blocks/comparison-cards/ComparisonCards.js +75 -0
- package/dist/components/blocks/comparison-cards/ComparisonCards.types.d.ts +49 -0
- package/dist/components/blocks/comparison-cards/ComparisonCards.types.js +26 -0
- package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +262 -0
- package/dist/components/blocks/comparison-table/ComparisonTable.css +111 -0
- package/dist/components/blocks/comparison-table/ComparisonTable.d.ts +25 -0
- package/dist/components/blocks/comparison-table/ComparisonTable.js +100 -0
- package/dist/components/blocks/comparison-table/ComparisonTable.types.d.ts +36 -0
- package/dist/components/blocks/comparison-table/ComparisonTable.types.js +15 -0
- package/dist/components/blocks/comparison-table/comparison-table-impl.css +143 -0
- package/dist/components/blocks/cta-banner/CtaBanner.css +1 -0
- package/dist/components/blocks/cta-banner/CtaBanner.d.ts +1 -1
- package/dist/components/blocks/cta-banner/CtaBanner.js +3 -2
- package/dist/components/blocks/cta-banner/CtaBanner.types.d.ts +6 -0
- package/dist/components/blocks/cta-banner/CtaBanner.types.js +1 -1
- package/dist/components/blocks/cta-banner/cta-banner-impl.css +8 -0
- package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.css +1 -0
- package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.d.ts +1 -1
- package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.js +10 -5
- package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.d.ts +12 -0
- package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.js +1 -1
- package/dist/components/blocks/cta-banner-slider/cta-banner-slider-impl.css +8 -0
- package/dist/components/blocks/data-table/DataTable.css +170 -0
- package/dist/components/blocks/data-table/DataTable.d.ts +29 -0
- package/dist/components/blocks/data-table/DataTable.js +84 -0
- package/dist/components/blocks/data-table/DataTable.types.d.ts +69 -0
- package/dist/components/blocks/data-table/DataTable.types.js +19 -0
- package/dist/components/blocks/data-table/data-table-impl.css +155 -0
- package/dist/components/blocks/download-banner/DownloadBanner.css +228 -0
- package/dist/components/blocks/download-banner/DownloadBanner.d.ts +28 -0
- package/dist/components/blocks/download-banner/DownloadBanner.js +75 -0
- package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +56 -0
- package/dist/components/blocks/download-banner/DownloadBanner.types.js +23 -0
- package/dist/components/blocks/download-banner/download-banner-impl.css +216 -0
- package/dist/components/blocks/faq-accordion/FaqAccordion.css +1 -0
- package/dist/components/blocks/faq-accordion/faq-accordion-impl.css +3 -7
- package/dist/components/blocks/feature-bullets/FeatureBullets.css +1 -0
- package/dist/components/blocks/feature-bullets/feature-bullets-impl.css +14 -1
- package/dist/components/blocks/feature-cards/FeatureCards.css +1 -0
- package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
- package/dist/components/blocks/feature-cards/FeatureCards.js +4 -21
- package/dist/components/blocks/feature-cards/feature-cards-impl.css +10 -9
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.css +115 -0
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.d.ts +30 -0
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.js +160 -0
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +52 -0
- package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.js +17 -0
- package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +207 -0
- package/dist/components/blocks/feature-scroll/FeatureScroll.css +1 -0
- package/dist/components/blocks/feature-split/FeatureSplit.css +1 -0
- package/dist/components/blocks/feature-split/feature-split-impl.css +14 -1
- package/dist/components/blocks/feature-stack/FeatureStack.css +86 -0
- package/dist/components/blocks/feature-stack/FeatureStack.d.ts +19 -0
- package/dist/components/blocks/feature-stack/FeatureStack.js +27 -0
- package/dist/components/blocks/feature-stack/FeatureStack.types.d.ts +34 -0
- package/dist/components/blocks/feature-stack/FeatureStack.types.js +14 -0
- package/dist/components/blocks/feature-stack/feature-stack-impl.css +87 -0
- package/dist/components/blocks/image-banner/ImageBanner.css +133 -0
- package/dist/components/blocks/image-banner/ImageBanner.d.ts +32 -0
- package/dist/components/blocks/image-banner/ImageBanner.js +41 -0
- package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +54 -0
- package/dist/components/blocks/image-banner/ImageBanner.types.js +14 -0
- package/dist/components/blocks/image-banner/image-banner-impl.css +281 -0
- package/dist/components/blocks/landing-hero/LandingHero.css +1 -0
- package/dist/components/blocks/landing-hero/LandingHero.d.ts +1 -1
- package/dist/components/blocks/landing-hero/LandingHero.js +4 -3
- package/dist/components/blocks/landing-hero/LandingHero.types.d.ts +7 -3
- package/dist/components/blocks/logo-columns/LogoColumns.css +1 -0
- package/dist/components/blocks/logo-rows/LogoRows.css +1 -0
- package/dist/components/blocks/page-header/PageHeader.css +1 -0
- package/dist/components/blocks/page-header/PageHeader.d.ts +1 -1
- package/dist/components/blocks/page-header/PageHeader.js +3 -2
- package/dist/components/blocks/page-header/PageHeader.types.d.ts +6 -0
- package/dist/components/blocks/page-header/PageHeader.types.js +1 -1
- package/dist/components/blocks/page-header/page-header-impl.css +10 -0
- package/dist/components/blocks/product-hero/ProductHero.css +8 -3
- package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
- package/dist/components/blocks/product-hero/ProductHero.js +5 -2
- package/dist/components/blocks/product-hero/ProductHero.types.d.ts +5 -1
- package/dist/components/blocks/product-hero/ProductHero.types.js +1 -0
- package/dist/components/blocks/product-hero/product-hero-impl.css +43 -12
- package/dist/components/blocks/resource-banner/ResourceBanner.css +106 -0
- package/dist/components/blocks/resource-banner/ResourceBanner.d.ts +32 -0
- package/dist/components/blocks/resource-banner/ResourceBanner.js +51 -0
- package/dist/components/blocks/resource-banner/ResourceBanner.types.d.ts +44 -0
- package/dist/components/blocks/resource-banner/ResourceBanner.types.js +14 -0
- package/dist/components/blocks/resource-banner/resource-banner-impl.css +69 -0
- package/dist/components/blocks/scene-scroll/SceneScroll.css +93 -0
- package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +36 -0
- package/dist/components/blocks/scene-scroll/SceneScroll.js +54 -0
- package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +32 -0
- package/dist/components/blocks/scene-scroll/SceneScroll.types.js +15 -0
- package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +275 -0
- package/dist/components/blocks/stats/Stats.css +139 -0
- package/dist/components/blocks/stats/Stats.d.ts +24 -0
- package/dist/components/blocks/stats/Stats.js +120 -0
- package/dist/components/blocks/stats/Stats.types.d.ts +36 -0
- package/dist/components/blocks/stats/Stats.types.js +19 -0
- package/dist/components/blocks/stats/stats-count.d.ts +34 -0
- package/dist/components/blocks/stats/stats-count.js +61 -0
- package/dist/components/blocks/stats/stats-impl.css +284 -0
- package/dist/components/blocks/stats/use-wheel.d.ts +37 -0
- package/dist/components/blocks/stats/use-wheel.js +126 -0
- package/dist/components/blocks/steps/Steps.css +202 -0
- package/dist/components/blocks/steps/Steps.d.ts +32 -0
- package/dist/components/blocks/steps/Steps.js +65 -0
- package/dist/components/blocks/steps/Steps.types.d.ts +48 -0
- package/dist/components/blocks/steps/Steps.types.js +21 -0
- package/dist/components/blocks/steps/steps-impl.css +216 -0
- package/dist/components/blocks/steps/use-turn.d.ts +33 -0
- package/dist/components/blocks/steps/use-turn.js +75 -0
- package/dist/components/blocks/sticky-cards/StickyCards.css +154 -0
- package/dist/components/blocks/sticky-cards/StickyCards.d.ts +35 -0
- package/dist/components/blocks/sticky-cards/StickyCards.js +153 -0
- package/dist/components/blocks/sticky-cards/StickyCards.types.d.ts +43 -0
- package/dist/components/blocks/sticky-cards/StickyCards.types.js +18 -0
- package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +393 -0
- package/dist/components/blocks/team-grid/TeamGrid.css +159 -0
- package/dist/components/blocks/team-grid/TeamGrid.d.ts +28 -0
- package/dist/components/blocks/team-grid/TeamGrid.js +74 -0
- package/dist/components/blocks/team-grid/TeamGrid.types.d.ts +51 -0
- package/dist/components/blocks/team-grid/TeamGrid.types.js +20 -0
- package/dist/components/blocks/team-grid/team-grid-impl.css +129 -0
- package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -0
- package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +1 -1
- package/dist/components/blocks/testimonial-row/TestimonialRow.js +4 -3
- package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +3 -0
- package/dist/components/blocks/testimonial-row/TestimonialRow.types.js +1 -1
- package/dist/components/blocks/testimonial-row/testimonial-row-impl.css +8 -0
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -0
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.d.ts +1 -1
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.js +2 -2
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +8 -0
- package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.js +1 -1
- package/dist/components/blocks/text-scroll/TextScroll.css +53 -0
- package/dist/components/blocks/text-scroll/TextScroll.d.ts +5 -0
- package/dist/components/blocks/text-scroll/TextScroll.js +71 -0
- package/dist/components/blocks/text-scroll/TextScroll.types.d.ts +22 -0
- package/dist/components/blocks/text-scroll/TextScroll.types.js +10 -0
- package/dist/components/blocks/text-scroll/text-scroll-impl.css +115 -0
- package/dist/components/blocks/tiers/Tiers.css +233 -0
- package/dist/components/blocks/tiers/Tiers.d.ts +32 -0
- package/dist/components/blocks/tiers/Tiers.js +68 -0
- package/dist/components/blocks/tiers/Tiers.types.d.ts +45 -0
- package/dist/components/blocks/tiers/Tiers.types.js +25 -0
- package/dist/components/blocks/tiers/tiers-impl.css +185 -0
- package/dist/components/blocks/use-rotation.d.ts +12 -2
- package/dist/components/blocks/use-rotation.js +6 -28
- package/dist/components/comparison-cards-data.d.ts +59 -0
- package/dist/components/comparison-cards-data.js +12 -0
- package/dist/components/comparison-table-data.d.ts +39 -0
- package/dist/components/comparison-table-data.js +11 -0
- package/dist/components/core/accordion-item/AccordionItem.css +1 -5
- package/dist/components/core/background/Background.css +92 -0
- package/dist/components/core/background/Background.d.ts +27 -0
- package/dist/components/core/background/Background.js +45 -0
- package/dist/components/core/background/Background.types.d.ts +39 -0
- package/dist/components/core/background/Background.types.js +11 -0
- package/dist/components/core/background/background-impl.css +760 -0
- package/dist/components/core/background/halftone.d.ts +134 -0
- package/dist/components/core/background/halftone.js +722 -0
- package/dist/components/core/background/patterns.d.ts +66 -0
- package/dist/components/core/background/patterns.js +244 -0
- package/dist/components/core/background/shader.d.ts +44 -0
- package/dist/components/core/background/shader.js +307 -0
- package/dist/components/core/background/use-halftone.d.ts +15 -0
- package/dist/components/core/background/use-halftone.js +27 -0
- package/dist/components/core/background/use-offscreen.d.ts +10 -0
- package/dist/components/core/background/use-offscreen.js +30 -0
- package/dist/components/core/background/use-shader.d.ts +11 -0
- package/dist/components/core/background/use-shader.js +25 -0
- package/dist/components/core/background/use-spotlight.d.ts +14 -0
- package/dist/components/core/background/use-spotlight.js +73 -0
- package/dist/components/core/bottom-sheet/BottomSheet.js +2 -2
- package/dist/components/core/bottom-sheet/BottomSheet.types.d.ts +3 -1
- package/dist/components/core/breadcrumb/Breadcrumb.d.ts +1 -0
- package/dist/components/core/breadcrumb/Breadcrumb.js +1 -0
- package/dist/components/core/breadcrumb/breadcrumb-impl.css +11 -0
- package/dist/components/core/button/button-impl.css +14 -1
- package/dist/components/core/illustration-card/IllustrationCard.css +40 -0
- package/dist/components/core/illustration-card/IllustrationCard.d.ts +22 -0
- package/dist/components/core/illustration-card/IllustrationCard.js +82 -0
- package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +23 -0
- package/dist/components/core/illustration-card/IllustrationCard.types.js +8 -0
- package/dist/components/core/illustration-card/illustration-card-impl.css +47 -0
- package/dist/components/core/illustration-scene/IllustrationScene.css +41 -0
- package/dist/components/core/illustration-scene/IllustrationScene.d.ts +14 -0
- package/dist/components/core/illustration-scene/IllustrationScene.js +16 -0
- package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +32 -0
- package/dist/components/core/illustration-scene/IllustrationScene.types.js +8 -0
- package/dist/components/core/illustration-scene/illustration-scene-impl.css +46 -0
- package/dist/components/core/link/Link.js +7 -3
- package/dist/components/core/link/link-impl.css +29 -2
- package/dist/components/core/navbar/Navbar.css +2 -2
- package/dist/components/core/navbar/Navbar.types.d.ts +1 -1
- package/dist/components/core/navbar-item/NavbarItem.d.ts +2 -1
- package/dist/components/core/navbar-item/NavbarItem.js +3 -10
- package/dist/components/core/navbar-item/NavbarItem.types.d.ts +4 -1
- package/dist/components/core/navbar-item/NavbarItem.types.js +1 -1
- package/dist/components/core/navbar-item/navbar-item-impl.css +10 -0
- package/dist/components/core/navbar-menu/navbar-menu-impl.css +9 -0
- package/dist/components/core/navbar-switcher/navbar-switcher-impl.css +19 -0
- package/dist/components/core/pagination/Pagination.js +1 -1
- package/dist/components/core/pagination/pagination-impl.css +9 -0
- package/dist/components/core/pagination-dots/PaginationDots.d.ts +1 -1
- package/dist/components/core/pagination-dots/PaginationDots.js +3 -3
- package/dist/components/core/pagination-dots/PaginationDots.types.d.ts +3 -1
- package/dist/components/core/segmented-control/SegmentedControl.css +4 -3
- package/dist/components/core/segmented-control/SegmentedControl.js +17 -3
- package/dist/components/core/segmented-control-item/SegmentedControlItem.css +2 -1
- package/dist/components/core/select/Select.js +3 -3
- package/dist/components/core/select/Select.types.d.ts +11 -1
- package/dist/components/core/select/Select.types.js +1 -1
- package/dist/components/core/tab-list/TabList.js +9 -1
- package/dist/components/core/table-header-cell/TableHeaderCell.d.ts +1 -1
- package/dist/components/core/table-header-cell/TableHeaderCell.js +5 -2
- package/dist/components/core/table-header-cell/TableHeaderCell.types.d.ts +7 -1
- package/dist/components/core/table-header-cell/TableHeaderCell.types.js +1 -1
- package/dist/components/core/text-area/TextArea.d.ts +1 -1
- package/dist/components/core/text-area/TextArea.js +2 -2
- package/dist/components/core/text-area/TextArea.types.d.ts +9 -1
- package/dist/components/core/text-area/TextArea.types.js +1 -1
- package/dist/components/core/text-input/TextInput.d.ts +1 -1
- package/dist/components/core/text-input/TextInput.js +2 -2
- package/dist/components/core/text-input/TextInput.types.d.ts +9 -1
- package/dist/components/core/text-input/TextInput.types.js +1 -1
- package/dist/components/data-table-data.d.ts +33 -0
- package/dist/components/data-table-data.js +12 -0
- package/dist/components/download-banner-data.d.ts +52 -0
- package/dist/components/download-banner-data.js +11 -0
- package/dist/components/index.d.ts +51 -0
- package/dist/components/index.js +38 -0
- package/dist/components/resource-banner-data.d.ts +34 -0
- package/dist/components/resource-banner-data.js +13 -0
- package/dist/components/scene-scroll-data.d.ts +24 -0
- package/dist/components/scene-scroll-data.js +9 -0
- package/dist/components/stats-data.d.ts +28 -0
- package/dist/components/stats-data.js +11 -0
- package/dist/components/steps-data.d.ts +38 -0
- package/dist/components/steps-data.js +13 -0
- package/dist/components/sticky-cards-data.d.ts +43 -0
- package/dist/components/sticky-cards-data.js +12 -0
- package/dist/components/team-grid-data.d.ts +38 -0
- package/dist/components/team-grid-data.js +11 -0
- package/dist/components/tiers-data.d.ts +47 -0
- package/dist/components/tiers-data.js +13 -0
- package/dist/marketing.css +101 -28
- package/package.json +1 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Scoped to this package, like the generated sheet beside it.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* A heading with no line under it closes up. Its bound step is the distance to the line, and with
|
|
7
|
+
* nothing there it would only add to the step from the header to the row.
|
|
8
|
+
*/
|
|
9
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__title:last-child {
|
|
10
|
+
margin-block-end: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* The header starts on a phone and is centred from the fold — FeatureCards' arrangement and its
|
|
15
|
+
* reason. Both boxes are capped narrower than the column, so `margin-inline: auto` is what centres
|
|
16
|
+
* them rather than their words inside a box left at the start edge.
|
|
17
|
+
*
|
|
18
|
+
* `48rem` longhand because `var()` is not permitted in a container query condition, and it is the
|
|
19
|
+
* width the rest of this package folds at.
|
|
20
|
+
*/
|
|
21
|
+
@container (min-width: 48rem) {
|
|
22
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__header {
|
|
23
|
+
align-items: center;
|
|
24
|
+
margin-inline: auto;
|
|
25
|
+
text-align: center;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__description {
|
|
29
|
+
margin-inline: auto;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Two measures the row is built from, both read off the band rather than the row — TestimonialRow's.
|
|
35
|
+
*
|
|
36
|
+
* The root declares `container-type`, so `cqi` here is the band's width. `--column` is the width of
|
|
37
|
+
* the column the heading sits in; `--bleed` is how far that column stands in from the band's edge.
|
|
38
|
+
*/
|
|
39
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel {
|
|
40
|
+
--dds-featurecardscarousel-column: calc(min(100cqi, var(--size-content-max)) - 2 * var(--space-inset-page));
|
|
41
|
+
--dds-featurecardscarousel-bleed: calc((100cqi - min(100cqi, var(--size-content-max))) / 2 + var(--space-inset-page));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
* The row runs out to the band's edges and its first card stands where the heading does — the
|
|
46
|
+
* reference design's breakout, built as TestimonialRow builds it.
|
|
47
|
+
*
|
|
48
|
+
* A negative margin takes the row out of the column to the band's edges; a leading padding of the
|
|
49
|
+
* same measure brings the first card back into line with the heading. The padding scrolls away with
|
|
50
|
+
* the cards, so a card is then cut off by the band rather than by the column.
|
|
51
|
+
* `scroll-padding-inline` matches it, or a browser reads the resting position as short of the first
|
|
52
|
+
* card's snap point and scrolls the gutter away on load.
|
|
53
|
+
*
|
|
54
|
+
* The block padding is room for a CardButton's lift and its focus ring, which a scroll container
|
|
55
|
+
* would otherwise clip; the negative margin gives it back.
|
|
56
|
+
*
|
|
57
|
+
* No scrollbar: the dots and the arrows under the row are the standing sign that it moves.
|
|
58
|
+
*/
|
|
59
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__track {
|
|
60
|
+
margin-block: calc(-1 * var(--space-gap-sm));
|
|
61
|
+
margin-inline: calc(-1 * var(--dds-featurecardscarousel-bleed));
|
|
62
|
+
overflow-x: auto;
|
|
63
|
+
overflow-y: hidden;
|
|
64
|
+
overscroll-behavior-x: contain;
|
|
65
|
+
padding-block: var(--space-gap-sm);
|
|
66
|
+
padding-inline-start: var(--dds-featurecardscarousel-bleed);
|
|
67
|
+
scroll-padding-inline: var(--dds-featurecardscarousel-bleed);
|
|
68
|
+
scroll-snap-type: x proximity;
|
|
69
|
+
scrollbar-width: none;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__track::-webkit-scrollbar {
|
|
73
|
+
display: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* The row's focus ring is drawn inside it. The row runs out to the band's edges and the band hides
|
|
78
|
+
* its overflow, so a ring drawn outside would lose its two sides to the band.
|
|
79
|
+
*/
|
|
80
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__track:focus-visible {
|
|
81
|
+
outline-offset: calc(-1 * var(--border-width-focus));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* The trailing gutter, as a spacer rather than a padding.
|
|
86
|
+
*
|
|
87
|
+
* A scroll container leaves its end padding out of what it scrolls to once its content overflows,
|
|
88
|
+
* so the last card would come to rest against the band's edge. A generated box is a flex item like
|
|
89
|
+
* a card, and its width counts. The negative margin takes back the gap the row puts before it.
|
|
90
|
+
*/
|
|
91
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__track::after {
|
|
92
|
+
content: '';
|
|
93
|
+
flex: none;
|
|
94
|
+
inline-size: var(--dds-featurecardscarousel-bleed);
|
|
95
|
+
margin-inline-start: calc(-1 * var(--space-grid-gutter));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/*
|
|
99
|
+
* A card's width: most of the column on a phone — 85%, TestimonialRow's share — so the next card's
|
|
100
|
+
* edge shows past it, which is what says the row moves; size.feature-cards-carousel.card from the
|
|
101
|
+
* fold, held to the column, so at full width the row shows the next card's edge the same way. The
|
|
102
|
+
* reference set a phone's card to the whole column, and a row whose next card starts exactly at
|
|
103
|
+
* the screen's edge reads as a single card.
|
|
104
|
+
*
|
|
105
|
+
* It does not shrink: a flex item shrinks to fit before it overflows, and a row of squeezed cards
|
|
106
|
+
* is the one thing this is not. Every card is as tall as the row, which is the tallest of them.
|
|
107
|
+
*/
|
|
108
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__item {
|
|
109
|
+
flex: none;
|
|
110
|
+
inline-size: calc(var(--dds-featurecardscarousel-column) * 0.85);
|
|
111
|
+
scroll-snap-align: start;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@container (min-width: 48rem) {
|
|
115
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__item {
|
|
116
|
+
inline-size: min(var(--size-feature-cards-carousel-card), var(--dds-featurecardscarousel-column));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* `hidden` has to win over the part's own `display`, which outranks the browser's rule for it. */
|
|
121
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__footer[hidden] {
|
|
122
|
+
display: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* The arrows stand at the end of the footer, after the dots — and at its end on their own too,
|
|
127
|
+
* when the row has fewer stops than PaginationDots draws a row for.
|
|
128
|
+
*/
|
|
129
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__nav {
|
|
130
|
+
margin-inline-start: auto;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* An arrow with nowhere to go stays in its place, receded to opacity.disabled, and its slot is
|
|
135
|
+
* inert — TestimonialRow's rule and its reason: ButtonIcon has no disabled state of its own.
|
|
136
|
+
*/
|
|
137
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__nav-slot[data-available='false'] {
|
|
138
|
+
opacity: var(--opacity-disabled);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* The cards on a painted ground — FeatureCards' rules, for the same cards on the same grounds.
|
|
143
|
+
*
|
|
144
|
+
* A light card turns white on the subtle band, where its own gray.50 is the band's; a dark card is
|
|
145
|
+
* lifted a step in dark mode; a surface card is raised off it. On the dark band a neutral card
|
|
146
|
+
* turns round to the inverse fill and white ink, a plain card takes the white ink alone, and an
|
|
147
|
+
* eyebrow inside any of them takes the band's quieter ink. The coloured cards keep their own.
|
|
148
|
+
*/
|
|
149
|
+
:where([data-dds-context="marketing"])
|
|
150
|
+
.dds-featurecardscarousel[data-ground="subtle"]
|
|
151
|
+
.dds-featurecardscarousel__item
|
|
152
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="surface-light"] {
|
|
153
|
+
background-color: var(--color-bg-surface-card-light-raised);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
:where([data-dds-context="marketing"])
|
|
157
|
+
.dds-featurecardscarousel[data-ground="subtle"]
|
|
158
|
+
.dds-featurecardscarousel__item
|
|
159
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="accent-strong"] {
|
|
160
|
+
background-color: var(--color-bg-surface-card-strong-raised);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
:where([data-dds-context="marketing"])
|
|
164
|
+
.dds-featurecardscarousel[data-ground="subtle"]
|
|
165
|
+
.dds-featurecardscarousel__item
|
|
166
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="surface"] {
|
|
167
|
+
background-color: var(--color-bg-surface-card-raised);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
:where([data-dds-context="marketing"])
|
|
171
|
+
.dds-featurecardscarousel[data-ground="strong"]
|
|
172
|
+
.dds-featurecardscarousel__item
|
|
173
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="surface"] {
|
|
174
|
+
background-color: var(--color-bg-surface-inverse);
|
|
175
|
+
color: var(--color-fg-on-brand-strong);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
:where([data-dds-context="marketing"])
|
|
179
|
+
.dds-featurecardscarousel[data-ground="strong"]
|
|
180
|
+
.dds-featurecardscarousel__item
|
|
181
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="surface-raised"] {
|
|
182
|
+
background-color: var(--color-bg-surface-raised-on-brand-strong);
|
|
183
|
+
color: var(--color-fg-on-brand-strong);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
:where([data-dds-context="marketing"])
|
|
187
|
+
.dds-featurecardscarousel[data-ground="strong"]
|
|
188
|
+
.dds-featurecardscarousel__item
|
|
189
|
+
> :is(.dds-card, .dds-cardbutton)[data-variant="plain"] {
|
|
190
|
+
color: var(--color-fg-on-brand-strong);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
:where([data-dds-context="marketing"])
|
|
194
|
+
.dds-featurecardscarousel[data-ground="strong"]
|
|
195
|
+
.dds-featurecardscarousel__item
|
|
196
|
+
> :is(.dds-card, .dds-cardbutton):is([data-variant="surface"], [data-variant="surface-raised"], [data-variant="plain"])
|
|
197
|
+
.dds-cardbody__eyebrow {
|
|
198
|
+
color: var(--color-fg-muted-inverse);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/*
|
|
202
|
+
* Previous and next point along the row. A right-to-left row puts previous on the right, so the
|
|
203
|
+
* chevrons are mirrored to point the way each one moves; as they ship, both pointed backwards.
|
|
204
|
+
*/
|
|
205
|
+
:where([data-dds-context="marketing"]) .dds-featurecardscarousel .dds-featurecardscarousel__nav-slot svg:dir(rtl) {
|
|
206
|
+
scale: -1 1;
|
|
207
|
+
}
|
|
@@ -77,7 +77,20 @@
|
|
|
77
77
|
:where([data-dds-context="marketing"]) .dds-featuresplit .dds-featuresplit__media > *,
|
|
78
78
|
:where([data-dds-context="marketing"]) .dds-featuresplit .dds-featuresplit__media img {
|
|
79
79
|
block-size: 100%;
|
|
80
|
-
display: block;
|
|
81
80
|
inline-size: 100%;
|
|
82
81
|
object-fit: cover;
|
|
83
82
|
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* Bare media is a block; a component keeps its own display.
|
|
86
|
+
*
|
|
87
|
+
* `display: block` is for what arrives as a raw element — an image, a video, an inline SVG — which
|
|
88
|
+
* sits on a text baseline otherwise and leaves a gap under it. Written at no weight at all, so a
|
|
89
|
+
* component the page placed here — an IllustrationScene, whose grid lays its pane over its photo —
|
|
90
|
+
* keeps the display its own sheet gives it. In the rule above, a class deeper than the component's
|
|
91
|
+
* root, it turned the scene's grid into a block, and the pane fell below the photo and was clipped.
|
|
92
|
+
*/
|
|
93
|
+
:where([data-dds-context="marketing"] .dds-featuresplit .dds-featuresplit__media > *, [data-dds-context="marketing"] .dds-featuresplit .dds-featuresplit__media img) {
|
|
94
|
+
display: block;
|
|
95
|
+
}
|
|
96
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* GENERATED from featurestack.contract.json. Do not edit. */
|
|
2
|
+
|
|
3
|
+
:where([data-dds-context="marketing"]) .dds-featurestack {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
container-type: inline-size;
|
|
6
|
+
display: flex;
|
|
7
|
+
inline-size: 100%;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
overflow-wrap: anywhere;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__inner {
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
inline-size: 100%;
|
|
17
|
+
min-inline-size: 0;
|
|
18
|
+
max-inline-size: var(--size-content-max);
|
|
19
|
+
padding-block: var(--space-section-default);
|
|
20
|
+
padding-inline: var(--space-inset-page);
|
|
21
|
+
row-gap: var(--space-heading-content);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__header {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
min-inline-size: 0;
|
|
28
|
+
max-inline-size: var(--size-measure-heading);
|
|
29
|
+
row-gap: var(--space-gap-none);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__title {
|
|
33
|
+
margin-block: 0;
|
|
34
|
+
text-wrap: balance;
|
|
35
|
+
font-family: var(--font-h2-family);
|
|
36
|
+
font-size: var(--font-h2-size);
|
|
37
|
+
font-weight: var(--font-h2-weight);
|
|
38
|
+
letter-spacing: var(--font-h2-letter-spacing);
|
|
39
|
+
line-height: var(--font-h2-line-height);
|
|
40
|
+
margin-block-end: var(--space-heading-title-description);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__description {
|
|
44
|
+
margin-block: 0;
|
|
45
|
+
font-family: var(--font-body-md-family);
|
|
46
|
+
font-size: var(--font-body-md-size);
|
|
47
|
+
font-weight: var(--font-body-md-weight);
|
|
48
|
+
letter-spacing: var(--font-body-md-letter-spacing);
|
|
49
|
+
line-height: var(--font-body-md-line-height);
|
|
50
|
+
max-inline-size: var(--size-measure-description);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__link {
|
|
54
|
+
display: flex;
|
|
55
|
+
margin-block-start: var(--space-heading-description-actions);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__media {
|
|
59
|
+
align-self: center;
|
|
60
|
+
min-inline-size: 0;
|
|
61
|
+
overflow: clip;
|
|
62
|
+
border-start-end-radius: var(--radius-container);
|
|
63
|
+
border-start-start-radius: var(--radius-container);
|
|
64
|
+
max-inline-size: var(--size-feature-stack-media);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__image {
|
|
68
|
+
display: block;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
:where([data-dds-context="marketing"]) .dds-featurestack[data-ground="page"] {
|
|
72
|
+
background-color: var(--color-bg-page);
|
|
73
|
+
color: var(--color-fg-default);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
:where([data-dds-context="marketing"]) .dds-featurestack[data-ground="strong"] {
|
|
77
|
+
background-color: var(--color-bg-brand-strong);
|
|
78
|
+
color: var(--color-fg-on-brand-strong);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
:where([data-dds-context="marketing"]) .dds-featurestack[data-ground="subtle"] {
|
|
82
|
+
background-color: var(--color-bg-page);
|
|
83
|
+
background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
|
|
84
|
+
color: var(--color-fg-default);
|
|
85
|
+
}
|
|
86
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import './FeatureStack.css';
|
|
2
|
+
import './feature-stack-impl.css';
|
|
3
|
+
import '../block-reveal.css';
|
|
4
|
+
import { type FeatureStackProps } from './FeatureStack.types.js';
|
|
5
|
+
export type { FeatureStackProps };
|
|
6
|
+
/**
|
|
7
|
+
* A heading, a line, a way on, and an illustration the band ends on — FeatureSplit stacked, the
|
|
8
|
+
* words over the picture rather than beside it. The reference design's PartnersPayout layout, taken
|
|
9
|
+
* down to its frame.
|
|
10
|
+
*
|
|
11
|
+
* The reference drew figures between the heading and the picture. Those were the page's content,
|
|
12
|
+
* not the layout's: a page that wants figures puts them in a section of its own or in its copy, and
|
|
13
|
+
* this keeps only what every use of the layout shares — the words centred over a picture that
|
|
14
|
+
* stands on the band's foot.
|
|
15
|
+
*
|
|
16
|
+
* It arrives the way every block does: the heading, the line, the link, then the picture.
|
|
17
|
+
* `'use client'` for that and for `useId`, which names the region by its heading.
|
|
18
|
+
*/
|
|
19
|
+
export declare function FeatureStack({ ground, title, description, link, image, }: FeatureStackProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from 'react';
|
|
4
|
+
import './FeatureStack.css';
|
|
5
|
+
import './feature-stack-impl.css';
|
|
6
|
+
import '../block-reveal.css';
|
|
7
|
+
import { given } from '../../given.js';
|
|
8
|
+
import { arriving, useReveal } from '../use-reveal.js';
|
|
9
|
+
import { featureStackDefaults, featureStackParts, } from './FeatureStack.types.js';
|
|
10
|
+
/**
|
|
11
|
+
* A heading, a line, a way on, and an illustration the band ends on — FeatureSplit stacked, the
|
|
12
|
+
* words over the picture rather than beside it. The reference design's PartnersPayout layout, taken
|
|
13
|
+
* down to its frame.
|
|
14
|
+
*
|
|
15
|
+
* The reference drew figures between the heading and the picture. Those were the page's content,
|
|
16
|
+
* not the layout's: a page that wants figures puts them in a section of its own or in its copy, and
|
|
17
|
+
* this keeps only what every use of the layout shares — the words centred over a picture that
|
|
18
|
+
* stands on the band's foot.
|
|
19
|
+
*
|
|
20
|
+
* It arrives the way every block does: the heading, the line, the link, then the picture.
|
|
21
|
+
* `'use client'` for that and for `useId`, which names the region by its heading.
|
|
22
|
+
*/
|
|
23
|
+
export function FeatureStack({ ground = featureStackDefaults.ground, title, description, link, image, }) {
|
|
24
|
+
const titleId = useId();
|
|
25
|
+
const [band, revealed] = useReveal();
|
|
26
|
+
return (_jsx("section", { className: featureStackParts.root, "data-ground": ground, "aria-labelledby": titleId, children: _jsxs("div", { className: featureStackParts.inner, ref: band, "data-revealed": revealed, children: [_jsxs("div", { className: featureStackParts.header, children: [_jsx("h2", { className: featureStackParts.title, id: titleId, ...arriving(0), children: title }), given(description) ? (_jsx("p", { className: featureStackParts.description, ...arriving(1), children: description })) : null, link ? (_jsx("div", { className: featureStackParts.link, ...arriving(2), children: link })) : null] }), _jsx("div", { className: featureStackParts.media, ...arriving(3), children: image ? (_jsx("img", { className: featureStackParts.image, src: image.src, alt: image.alt, width: image.width, height: image.height, loading: "lazy", decoding: "async" })) : null })] }) }));
|
|
27
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { BlockImage } from '../../block-image-data.js';
|
|
3
|
+
export interface FeatureStackOwnProps {
|
|
4
|
+
/**
|
|
5
|
+
* `page` — The default, and the page's own white
|
|
6
|
+
* `subtle` — The grey band, for a section that needs setting apart from the one above it. Painted as the band's tint laid over the page's own ground, so it is the same grey whatever is behind the section
|
|
7
|
+
* `strong` — `color.bg.brand-strong`, the dark band, and the reference design's ground for this layout. The heading and the line under it turn white; an illustration made for a dark ground sits best here
|
|
8
|
+
*/
|
|
9
|
+
ground?: 'page' | 'subtle' | 'strong';
|
|
10
|
+
/** Always. The statement the section makes, in a few words — "Trusted in 190+ countries", "One account, every device". */
|
|
11
|
+
title: string;
|
|
12
|
+
/** A short line under the heading that says what the statement means for the reader, or what the picture shows. */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** A way on for the reader who wants more — "Learn more", "See where we operate". A standalone Link, under the line, the way FeatureCards takes one. */
|
|
15
|
+
link?: ReactNode;
|
|
16
|
+
/** Always. The picture the section ends on — a globe, a map, a product shot — which the block draws at its own proportions: a square picture stays square, a tall one stays tall, held to the screen's limit. Use one at least as wide as the column, twice that for sharp screens, and give its width and height so the block reserves its shape before it loads. `alt` empty when the heading already says what it shows; otherwise describe it. */
|
|
17
|
+
image: BlockImage;
|
|
18
|
+
}
|
|
19
|
+
export type FeatureStackProps = FeatureStackOwnProps;
|
|
20
|
+
/** The class each part carries. Apply these — do not retype them. */
|
|
21
|
+
export declare const featureStackParts: {
|
|
22
|
+
readonly root: "dds-featurestack";
|
|
23
|
+
readonly inner: "dds-featurestack__inner";
|
|
24
|
+
readonly header: "dds-featurestack__header";
|
|
25
|
+
readonly title: "dds-featurestack__title";
|
|
26
|
+
readonly description: "dds-featurestack__description";
|
|
27
|
+
readonly link: "dds-featurestack__link";
|
|
28
|
+
readonly media: "dds-featurestack__media";
|
|
29
|
+
readonly image: "dds-featurestack__image";
|
|
30
|
+
};
|
|
31
|
+
/** Generated so defaults cannot drift from the contract. */
|
|
32
|
+
export declare const featureStackDefaults: {
|
|
33
|
+
readonly ground: "page";
|
|
34
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// GENERATED from feature-stack.contract.json. Do not edit.
|
|
2
|
+
/** The class each part carries. Apply these — do not retype them. */
|
|
3
|
+
export const featureStackParts = {
|
|
4
|
+
root: 'dds-featurestack',
|
|
5
|
+
inner: 'dds-featurestack__inner',
|
|
6
|
+
header: 'dds-featurestack__header',
|
|
7
|
+
title: 'dds-featurestack__title',
|
|
8
|
+
description: 'dds-featurestack__description',
|
|
9
|
+
link: 'dds-featurestack__link',
|
|
10
|
+
media: 'dds-featurestack__media',
|
|
11
|
+
image: 'dds-featurestack__image',
|
|
12
|
+
};
|
|
13
|
+
/** Generated so defaults cannot drift from the contract. */
|
|
14
|
+
export const featureStackDefaults = { ground: 'page' };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Scoped to this package, like the generated sheet beside it.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* From the fold, the words are centred over the picture.
|
|
7
|
+
*
|
|
8
|
+
* FeatureCards' rule and its reason: content stacked under a heading takes a centred heading. The
|
|
9
|
+
* header and its line are capped narrower than the column, so `margin-inline: auto` centres those
|
|
10
|
+
* boxes rather than their words inside a box left at the start edge; the link centres with them.
|
|
11
|
+
*
|
|
12
|
+
* `48rem` longhand because `var()` is not permitted in a container query condition, and it is the
|
|
13
|
+
* width the rest of this package folds at.
|
|
14
|
+
*/
|
|
15
|
+
@container (min-width: 48rem) {
|
|
16
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__header {
|
|
17
|
+
align-items: center;
|
|
18
|
+
margin-inline: auto;
|
|
19
|
+
text-align: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__description {
|
|
23
|
+
margin-inline: auto;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__link {
|
|
27
|
+
justify-content: center;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
* A heading with nothing under it closes up: its bound step is the distance to the line, and with
|
|
33
|
+
* nothing there it would only add to the step from the words to the picture. `:last-child` is the
|
|
34
|
+
* condition itself, DataTable's way, rather than a prop standing in for it.
|
|
35
|
+
*/
|
|
36
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__title:last-child {
|
|
37
|
+
margin-block-end: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* The illustration stands on the section's foot.
|
|
42
|
+
*
|
|
43
|
+
* It reaches down through the section's own bottom padding to the band's edge, so the picture
|
|
44
|
+
* stands on the band rather than floating above the next one — the reference design's globe, which
|
|
45
|
+
* the band ends on. space.section.default is the inner's padding, given back.
|
|
46
|
+
*/
|
|
47
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__media {
|
|
48
|
+
margin-block-end: calc(-1 * var(--space-section-default));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/*
|
|
52
|
+
* The picture keeps its own shape; the screen only decides how tall it may grow.
|
|
53
|
+
*
|
|
54
|
+
* The frame wraps the picture rather than a box the block chose: as wide as the picture's shape
|
|
55
|
+
* allows, up to the column, and centred. The picture shows at its own proportions — a square stays
|
|
56
|
+
* square, a landscape stays landscape — so a page that brings a 1:1 picture gets a 1:1 picture,
|
|
57
|
+
* whatever shape the block's own example is. What changes with the screen is the tallest it may be:
|
|
58
|
+
* aspect.portrait of the column on a phone, where the column is narrow and a portrait is what fills
|
|
59
|
+
* it; aspect.landscape of its widest from the fold, so a band never becomes a picture with a heading
|
|
60
|
+
* on top. A picture past that limit is drawn smaller, keeping its shape, never cropped.
|
|
61
|
+
*
|
|
62
|
+
* The limits are aspect.portrait (4:5) and aspect.landscape (4:3) said as factors, 1.25 and 0.75 —
|
|
63
|
+
* a ratio token is a pair, and a height has to be a length. `100cqi` is the section's width, the
|
|
64
|
+
* root declaring `container-type`; the column is that less the page gutter each side.
|
|
65
|
+
*
|
|
66
|
+
* `47.9375rem` is the last width below the fold, LogoRows' bound.
|
|
67
|
+
*/
|
|
68
|
+
/* Set on the frame rather than the section: a container query styles what is inside the container,
|
|
69
|
+
never the container itself, so the section could not take the fold's value. */
|
|
70
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__media {
|
|
71
|
+
--dds-featurestack-column: calc(100cqi - 2 * var(--space-inset-page));
|
|
72
|
+
--dds-featurestack-tallest: calc(var(--dds-featurestack-column) * 1.25);
|
|
73
|
+
inline-size: fit-content;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@container (min-width: 48rem) {
|
|
77
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__media {
|
|
78
|
+
--dds-featurestack-tallest: calc(min(var(--dds-featurestack-column), var(--size-feature-stack-media)) * 0.75);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:where([data-dds-context="marketing"]) .dds-featurestack .dds-featurestack__image {
|
|
83
|
+
block-size: auto;
|
|
84
|
+
inline-size: auto;
|
|
85
|
+
max-block-size: var(--dds-featurestack-tallest);
|
|
86
|
+
max-inline-size: 100%;
|
|
87
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* GENERATED from imagebanner.contract.json. Do not edit. */
|
|
2
|
+
|
|
3
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
container-type: inline-size;
|
|
6
|
+
display: flex;
|
|
7
|
+
inline-size: 100%;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
overflow-wrap: anywhere;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__inner {
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
inline-size: 100%;
|
|
17
|
+
min-inline-size: 0;
|
|
18
|
+
max-inline-size: var(--size-content-max);
|
|
19
|
+
padding-block: var(--space-section-default);
|
|
20
|
+
padding-inline: var(--space-inset-page);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__card {
|
|
24
|
+
box-sizing: border-box;
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
min-inline-size: 0;
|
|
28
|
+
overflow: clip;
|
|
29
|
+
position: relative;
|
|
30
|
+
border-radius: var(--radius-container);
|
|
31
|
+
color: var(--color-fg-on-brand-strong);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__content {
|
|
35
|
+
box-sizing: border-box;
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
min-inline-size: 0;
|
|
40
|
+
position: relative;
|
|
41
|
+
padding-block: var(--space-inset-card);
|
|
42
|
+
padding-inline: var(--space-inset-card);
|
|
43
|
+
row-gap: var(--space-gap-none);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__title {
|
|
47
|
+
margin-block: 0;
|
|
48
|
+
text-wrap: balance;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__description {
|
|
52
|
+
margin-block: 0;
|
|
53
|
+
font-family: var(--font-body-md-family);
|
|
54
|
+
font-size: var(--font-body-md-size);
|
|
55
|
+
font-weight: var(--font-body-md-weight);
|
|
56
|
+
letter-spacing: var(--font-body-md-letter-spacing);
|
|
57
|
+
line-height: var(--font-body-md-line-height);
|
|
58
|
+
margin-block-end: var(--space-heading-description-actions);
|
|
59
|
+
max-inline-size: var(--size-measure-description);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__action {
|
|
63
|
+
display: flex;
|
|
64
|
+
column-gap: var(--space-actions-gap);
|
|
65
|
+
row-gap: var(--space-actions-gap);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner .dds-imagebanner__media {
|
|
69
|
+
box-sizing: border-box;
|
|
70
|
+
min-inline-size: 0;
|
|
71
|
+
overflow: clip;
|
|
72
|
+
position: relative;
|
|
73
|
+
border-radius: var(--radius-none);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-media-position="end"] .dds-imagebanner__card {
|
|
77
|
+
flex-direction: row;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-media-position="start"] .dds-imagebanner__card {
|
|
81
|
+
flex-direction: row-reverse;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="page"] {
|
|
85
|
+
background-color: var(--color-bg-page);
|
|
86
|
+
color: var(--color-fg-default);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="page"] .dds-imagebanner__card {
|
|
90
|
+
background-color: var(--color-bg-brand-strong);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="strong"] {
|
|
94
|
+
background-color: var(--color-bg-brand-strong);
|
|
95
|
+
color: var(--color-fg-on-brand-strong);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="strong"] .dds-imagebanner__card {
|
|
99
|
+
background-color: var(--color-bg-surface-card-strong);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="subtle"] {
|
|
103
|
+
background-color: var(--color-bg-page);
|
|
104
|
+
background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
|
|
105
|
+
color: var(--color-fg-default);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-ground="subtle"] .dds-imagebanner__card {
|
|
109
|
+
background-color: var(--color-bg-brand-strong);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="cover"] .dds-imagebanner__title {
|
|
113
|
+
font-family: var(--font-h2-family);
|
|
114
|
+
font-size: var(--font-h2-size);
|
|
115
|
+
font-weight: var(--font-h2-weight);
|
|
116
|
+
letter-spacing: var(--font-h2-letter-spacing);
|
|
117
|
+
line-height: var(--font-h2-line-height);
|
|
118
|
+
margin-block-end: var(--space-heading-title-description);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="split"] .dds-imagebanner__media {
|
|
122
|
+
aspect-ratio: var(--aspect-landscape);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
:where([data-dds-context="marketing"]) .dds-imagebanner[data-variant="split"] .dds-imagebanner__title {
|
|
126
|
+
font-family: var(--font-h2-family);
|
|
127
|
+
font-size: var(--font-h2-size);
|
|
128
|
+
font-weight: var(--font-h2-weight);
|
|
129
|
+
letter-spacing: var(--font-h2-letter-spacing);
|
|
130
|
+
line-height: var(--font-h2-line-height);
|
|
131
|
+
margin-block-end: var(--space-heading-title-description);
|
|
132
|
+
}
|
|
133
|
+
|