@purpurds/card 5.34.4 → 5.35.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/dist/styles.css CHANGED
@@ -1 +1 @@
1
- ._purpur-card_1owb4_1{transition:box-shadow var(--purpur-motion-duration-150) var(--purpur-motion-easing-ease-in-out);overflow:hidden;border-radius:var(--purpur-border-radius-md);container:card/inline-size}@container card (min-width: 600px){._purpur-card_1owb4_1{border-radius:var(--purpur-border-radius-lg)}}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]){border:var(--purpur-border-width-xs) solid var(--purpur-color-border-weak)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible){border-color:var(--purpur-color-border-interactive-subtle-hover);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-50)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:not([class*=purpur-card-trigger-item--disabled]):focus-visible) [class*=purpur-card-link-arrow],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:not([class*=purpur-card-trigger-item--disabled]):focus-visible) [class*=purpur-card-cta]{background:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary);border-color:var(--purpur-color-border-interactive-primary)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])){box-shadow:var(--purpur-shadow-sm);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-primary-hover);outline-offset:-1px}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta]{background:var(--purpur-color-background-interactive-transparent-hover);color:var(--purpur-color-text-interactive-primary-hover);border-color:var(--purpur-color-border-interactive-primary-hover)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])){border-color:var(--purpur-color-border-interactive-subtle-hover);box-shadow:var(--purpur-shadow-sm);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-50)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta]{background:var(--purpur-color-background-interactive-transparent-hover);color:var(--purpur-color-text-interactive-primary-hover);border-color:var(--purpur-color-border-interactive-primary-hover)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])),._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])){outline:none;border-color:1px solid var(--purpur-color-border-interactive-primary-active)}._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1owb4_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta]{background:var(--purpur-color-background-interactive-transparent-active);color:var(--purpur-color-text-interactive-primary-active);border-color:var(--purpur-color-border-interactive-primary-active)}._purpur-card-badge_r7moe_1{position:absolute;top:var(--purpur-spacing-100);right:var(--purpur-spacing-100)}._purpur-card-content_2uc00_1{display:flex;flex-direction:column;gap:var(--purpur-spacing-250)}._purpur-card-content-container_ueryq_1{display:flex;flex-direction:column;gap:var(--purpur-spacing-300);padding:var(--purpur-spacing-250) var(--purpur-spacing-200)}@media screen and (min-width: 600px){._purpur-card-content-container_ueryq_1{padding:calc(var(--purpur-spacing-400) + var(--purpur-spacing-100)) var(--purpur-spacing-300) var(--purpur-spacing-400) var(--purpur-spacing-300)}}._purpur-card-content-container--footer_ueryq_12{padding:0 var(--purpur-spacing-200) var(--purpur-spacing-200)}@media screen and (min-width: 600px){._purpur-card-content-container--footer_ueryq_12{padding:0 var(--purpur-spacing-300) var(--purpur-spacing-300)}}._purpur-card-cta_10ord_1{align-items:center;border-radius:var(--purpur-border-radius-full);border-width:0;cursor:pointer;display:inline-flex;font-size:var(--purpur-typography-scale-100);font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-medium);gap:var(--purpur-spacing-100);justify-content:center;line-height:var(--purpur-spacing-300);outline:0;position:relative;text-decoration:none;transition:all var(--purpur-motion-duration-100) ease;width:auto}._purpur-card-cta_10ord_1:focus:before{border-radius:var(--purpur-border-radius-full);box-shadow:0 0 0 var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);content:"";display:block;inset:calc(var(--purpur-spacing-25) * -1);position:absolute}._purpur-card-cta_10ord_1:focus:not(:focus-visible):before{box-shadow:none}._purpur-card-cta_10ord_1 svg{display:block}._purpur-card-cta--xs_10ord_33{padding:var(--purpur-spacing-50) var(--purpur-spacing-250)}._purpur-card-cta--xs_10ord_33._purpur-card-cta--icon-only_10ord_36{padding:var(--purpur-spacing-100)}._purpur-card-cta--sm_10ord_39{padding:var(--purpur-spacing-100) var(--purpur-spacing-250)}._purpur-card-cta--sm_10ord_39._purpur-card-cta--icon-only_10ord_36{padding:var(--purpur-spacing-100)}._purpur-card-cta--md_10ord_45{padding:var(--purpur-spacing-150) var(--purpur-spacing-300)}._purpur-card-cta--md_10ord_45._purpur-card-cta--icon-only_10ord_36{padding:var(--purpur-spacing-150)}._purpur-card-cta--lg_10ord_51{padding:var(--purpur-spacing-200) var(--purpur-spacing-400)}._purpur-card-cta--lg_10ord_51._purpur-card-cta--icon-only_10ord_36{padding:var(--purpur-spacing-200)}._purpur-card-cta--full-width_10ord_57{width:100%}._purpur-card-cta--primary_10ord_60{background-color:var(--purpur-color-background-interactive-primary);color:var(--purpur-color-text-interactive-on-primary)}._purpur-card-cta--primary_10ord_60:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-primary-hover)}._purpur-card-cta--primary_10ord_60:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-primary-active)}._purpur-card-cta--primary-negative_10ord_70{background-color:var(--purpur-color-background-interactive-primary-negative);color:var(--purpur-color-text-interactive-on-primary-negative)}._purpur-card-cta--primary-negative_10ord_70:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-primary-negative-hover);border-color:var(--purpur-color-background-interactive-primary-negative-hover)}._purpur-card-cta--primary-negative_10ord_70:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-primary-negative-active);border-color:var(--purpur-color-background-interactive-primary-negative-active)}._purpur-card-cta--secondary_10ord_82{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary);color:var(--purpur-color-text-interactive-primary)}._purpur-card-cta--secondary_10ord_82:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-card-cta--secondary_10ord_82:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-card-cta--secondary-negative_10ord_93{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary-negative);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-card-cta--secondary-negative_10ord_93:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-transparent-negative-hover)}._purpur-card-cta--secondary-negative_10ord_93:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-transparent-negative-active)}._purpur-card-cta--expressive_10ord_104{background-color:var(--purpur-color-background-interactive-expressive);color:var(--purpur-color-text-interactive-on-expressive)}._purpur-card-cta--expressive_10ord_104:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-expressive-hover)}._purpur-card-cta--expressive_10ord_104:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-expressive-active)}._purpur-card-cta--expressive-negative_10ord_114{background-color:var(--purpur-color-background-interactive-expressive-negative);color:var(--purpur-color-text-interactive-on-expressive-negative)}._purpur-card-cta--expressive-negative_10ord_114:hover:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-expressive-negative-hover);color:var(--purpur-color-text-interactive-on-expressive-negative-hover)}._purpur-card-cta--expressive-negative_10ord_114:active:not(._purpur-card-cta--disabled_10ord_64){background-color:var(--purpur-color-background-interactive-expressive-negative-active);color:var(--purpur-color-text-interactive-on-expressive-negative-active)}._purpur-card-cta--secondary_10ord_82._purpur-card-cta--disabled_10ord_64{box-shadow:none}._purpur-card-cta--disabled_10ord_64{background-color:var(--purpur-color-background-interactive-disabled);color:var(--purpur-color-text-weak);cursor:not-allowed}._purpur-card-cta--text_10ord_134{width:100%;box-sizing:border-box}._purpur-card-feature-list_ej4qm_1{list-style-type:none;margin:0;padding:0}._purpur-card-feature-list__list-item_ej4qm_6{align-items:center;display:flex;gap:var(--purpur-spacing-100)}._purpur-card-link-arrow_blsmb_1{align-items:center;border-radius:var(--purpur-border-radius-full);border-width:0;cursor:pointer;display:inline-flex;font-size:var(--purpur-typography-scale-100);font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-medium);gap:var(--purpur-spacing-100);justify-content:center;line-height:var(--purpur-spacing-300);outline:0;position:relative;text-decoration:none;transition:all var(--purpur-motion-duration-100) ease;width:auto}._purpur-card-link-arrow_blsmb_1:focus:before{border-radius:var(--purpur-border-radius-full);box-shadow:0 0 0 var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);content:"";display:block;inset:calc(var(--purpur-spacing-25) * -1);position:absolute}._purpur-card-link-arrow_blsmb_1:focus:not(:focus-visible):before{box-shadow:none}._purpur-card-link-arrow_blsmb_1 svg{display:block}._purpur-card-link-arrow--xs_blsmb_33{padding:var(--purpur-spacing-50) var(--purpur-spacing-250)}._purpur-card-link-arrow--xs_blsmb_33._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-100)}._purpur-card-link-arrow--sm_blsmb_39{padding:var(--purpur-spacing-100) var(--purpur-spacing-250)}._purpur-card-link-arrow--sm_blsmb_39._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-100)}._purpur-card-link-arrow--md_blsmb_45{padding:var(--purpur-spacing-150) var(--purpur-spacing-300)}._purpur-card-link-arrow--md_blsmb_45._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-150)}._purpur-card-link-arrow--lg_blsmb_51{padding:var(--purpur-spacing-200) var(--purpur-spacing-400)}._purpur-card-link-arrow--lg_blsmb_51._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-200)}._purpur-card-link-arrow--full-width_blsmb_57{width:100%}._purpur-card-link-arrow--primary_blsmb_60{background-color:var(--purpur-color-background-interactive-primary);color:var(--purpur-color-text-interactive-on-primary)}._purpur-card-link-arrow--primary_blsmb_60:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-hover)}._purpur-card-link-arrow--primary_blsmb_60:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-active)}._purpur-card-link-arrow--primary-negative_blsmb_70{background-color:var(--purpur-color-background-interactive-primary-negative);color:var(--purpur-color-text-interactive-on-primary-negative)}._purpur-card-link-arrow--primary-negative_blsmb_70:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-negative-hover);border-color:var(--purpur-color-background-interactive-primary-negative-hover)}._purpur-card-link-arrow--primary-negative_blsmb_70:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-negative-active);border-color:var(--purpur-color-background-interactive-primary-negative-active)}._purpur-card-link-arrow--secondary_blsmb_82{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary);color:var(--purpur-color-text-interactive-primary)}._purpur-card-link-arrow--secondary_blsmb_82:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-card-link-arrow--secondary_blsmb_82:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-card-link-arrow--secondary-negative_blsmb_93{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary-negative);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-card-link-arrow--secondary-negative_blsmb_93:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-negative-hover)}._purpur-card-link-arrow--secondary-negative_blsmb_93:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-negative-active)}._purpur-card-link-arrow--expressive_blsmb_104{background-color:var(--purpur-color-background-interactive-expressive);color:var(--purpur-color-text-interactive-on-expressive)}._purpur-card-link-arrow--expressive_blsmb_104:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-hover)}._purpur-card-link-arrow--expressive_blsmb_104:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-active)}._purpur-card-link-arrow--expressive-negative_blsmb_114{background-color:var(--purpur-color-background-interactive-expressive-negative);color:var(--purpur-color-text-interactive-on-expressive-negative)}._purpur-card-link-arrow--expressive-negative_blsmb_114:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-negative-hover);color:var(--purpur-color-text-interactive-on-expressive-negative-hover)}._purpur-card-link-arrow--expressive-negative_blsmb_114:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-negative-active);color:var(--purpur-color-text-interactive-on-expressive-negative-active)}._purpur-card-link-arrow--secondary_blsmb_82._purpur-card-link-arrow--disabled_blsmb_64{box-shadow:none}._purpur-card-link-arrow--disabled_blsmb_64{background-color:var(--purpur-color-background-interactive-disabled);color:var(--purpur-color-text-weak);cursor:not-allowed}._purpur-card-overline_192fe_1._purpur-card-overline_192fe_1{color:var(--purpur-color-text-medium);font-size:var(--purpur-typography-scale-75);font-weight:var(--purpur-typography-weight-normal);margin-bottom:var(--purpur-spacing-50)}._purpur-card-root_bqk1d_1{border-radius:var(--purpur-border-radius-md);display:flex;flex-direction:column;overflow:hidden;position:relative}._purpur-card-root--primary_bqk1d_8{background-color:var(--purpur-color-background-primary)}._purpur-card-root--secondary_bqk1d_11{background-color:var(--purpur-color-background-secondary)}._purpur-card-root--full-height_bqk1d_14{height:100%;justify-content:space-between}._purpur-card-trigger-item_1sp43_1{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}._purpur-card-trigger-item--button_1sp43_6{background-color:transparent;border:none;cursor:pointer}._purpur-card-trigger-item--disabled_1sp43_11{cursor:not-allowed}._purpur-card-trigger-item_1sp43_1:focus-visible{outline:none}
1
+ ._purpur-card_1ruml_1{transition:box-shadow var(--purpur-motion-duration-150) var(--purpur-motion-easing-ease-in-out);overflow:hidden;border-radius:var(--purpur-border-radius-md);container:card/inline-size}@container card (min-width: 600px){._purpur-card_1ruml_1{border-radius:var(--purpur-border-radius-lg)}}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]){border:var(--purpur-border-width-xs) solid transparent}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible){border-color:var(--purpur-color-border-interactive-subtle-hover);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-50)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:not([class*=purpur-card-trigger-item--disabled]):focus-visible) [class*=purpur-card-link-arrow],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:not([class*=purpur-card-trigger-item--disabled]):focus-visible) [class*=purpur-card-cta--button-styling]{background:var(--purpur-color-background-interactive-transparent);color:var(--purpur-color-text-interactive-primary);border-color:var(--purpur-color-border-interactive-primary)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])){box-shadow:var(--purpur-shadow-sm);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-primary-hover);outline-offset:-1px}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta--button-styling]{background:var(--purpur-color-background-interactive-transparent-hover);color:var(--purpur-color-text-interactive-primary-hover);border-color:var(--purpur-color-border-interactive-primary-hover)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])){border-color:var(--purpur-color-border-interactive-subtle-hover);box-shadow:var(--purpur-shadow-sm);outline:var(--purpur-border-width-sm) solid var(--purpur-color-border-interactive-focus);outline-offset:var(--purpur-spacing-50)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:hover:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta--button-styling]{background:var(--purpur-color-background-interactive-transparent-hover);color:var(--purpur-color-text-interactive-primary-hover);border-color:var(--purpur-color-border-interactive-primary-hover)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])),._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])){outline:none;border-color:1px solid var(--purpur-color-border-interactive-primary-active)}._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta--button-styling],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-link-arrow],._purpur-card_1ruml_1:has([class*=purpur-card-trigger-item]:focus-visible:active:not([class*=purpur-card-trigger-item--disabled])) [class*=purpur-card-cta--button-styling]{background:var(--purpur-color-background-interactive-transparent-active);color:var(--purpur-color-text-interactive-primary-active);border-color:var(--purpur-color-border-interactive-primary-active)}._purpur-card-badge_r7moe_1{position:absolute;top:var(--purpur-spacing-100);right:var(--purpur-spacing-100)}._purpur-card-content_2uc00_1{display:flex;flex-direction:column;gap:var(--purpur-spacing-250)}._purpur-card-content-container_putaw_1{display:flex;flex-direction:column;gap:var(--purpur-spacing-300);padding:var(--purpur-spacing-250) var(--purpur-spacing-200)}@container card (min-width: 600px){._purpur-card-content-container_putaw_1{padding:calc(var(--purpur-spacing-400) + var(--purpur-spacing-100)) var(--purpur-spacing-300) var(--purpur-spacing-400) var(--purpur-spacing-300)}}._purpur-card-content-container--footer_putaw_12{padding:0 var(--purpur-spacing-200) var(--purpur-spacing-200)}@container card (min-width: 600px){._purpur-card-content-container--footer_putaw_12{padding:0 var(--purpur-spacing-300) var(--purpur-spacing-300)}}._purpur-card-content-container--gap-size--sm_putaw_20{gap:var(--purpur-spacing-100)}._purpur-card-content-container--gap-size--md_putaw_23{gap:var(--purpur-spacing-200)}._purpur-card-content-container--gap-size--lg_putaw_26{gap:var(--purpur-spacing-300)}._purpur-card-cta--button-styling_1wc0z_1{align-items:center;border-radius:var(--purpur-border-radius-full);border-width:0;cursor:pointer;display:inline-flex;font-size:var(--purpur-typography-scale-100);font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-medium);gap:var(--purpur-spacing-100);justify-content:center;line-height:var(--purpur-spacing-300);outline:0;position:relative;text-decoration:none;transition:all var(--purpur-motion-duration-100) ease;width:auto}._purpur-card-cta--button-styling_1wc0z_1:focus:before{border-radius:var(--purpur-border-radius-full);box-shadow:0 0 0 var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);content:"";display:block;inset:calc(var(--purpur-spacing-25) * -1);position:absolute}._purpur-card-cta--button-styling_1wc0z_1:focus:not(:focus-visible):before{box-shadow:none}._purpur-card-cta--button-styling_1wc0z_1 svg{display:block}._purpur-card-cta--button-styling--xs_1wc0z_33{padding:var(--purpur-spacing-50) var(--purpur-spacing-250)}._purpur-card-cta--button-styling--xs_1wc0z_33._purpur-card-cta--button-styling--icon-only_1wc0z_36{padding:var(--purpur-spacing-100)}._purpur-card-cta--button-styling--sm_1wc0z_39{padding:var(--purpur-spacing-100) var(--purpur-spacing-250)}._purpur-card-cta--button-styling--sm_1wc0z_39._purpur-card-cta--button-styling--icon-only_1wc0z_36{padding:var(--purpur-spacing-100)}._purpur-card-cta--button-styling--md_1wc0z_45{padding:var(--purpur-spacing-150) var(--purpur-spacing-300)}._purpur-card-cta--button-styling--md_1wc0z_45._purpur-card-cta--button-styling--icon-only_1wc0z_36{padding:var(--purpur-spacing-150)}._purpur-card-cta--button-styling--lg_1wc0z_51{padding:var(--purpur-spacing-200) var(--purpur-spacing-400)}._purpur-card-cta--button-styling--lg_1wc0z_51._purpur-card-cta--button-styling--icon-only_1wc0z_36{padding:var(--purpur-spacing-200)}._purpur-card-cta--button-styling--full-width_1wc0z_57{width:100%}._purpur-card-cta--button-styling--primary_1wc0z_60{background-color:var(--purpur-color-background-interactive-primary);color:var(--purpur-color-text-interactive-on-primary)}._purpur-card-cta--button-styling--primary_1wc0z_60:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-primary-hover)}._purpur-card-cta--button-styling--primary_1wc0z_60:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-primary-active)}._purpur-card-cta--button-styling--primary-negative_1wc0z_70{background-color:var(--purpur-color-background-interactive-primary-negative);color:var(--purpur-color-text-interactive-on-primary-negative)}._purpur-card-cta--button-styling--primary-negative_1wc0z_70:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-primary-negative-hover);border-color:var(--purpur-color-background-interactive-primary-negative-hover)}._purpur-card-cta--button-styling--primary-negative_1wc0z_70:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-primary-negative-active);border-color:var(--purpur-color-background-interactive-primary-negative-active)}._purpur-card-cta--button-styling--secondary_1wc0z_82{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary);color:var(--purpur-color-text-interactive-primary)}._purpur-card-cta--button-styling--secondary_1wc0z_82:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-card-cta--button-styling--secondary_1wc0z_82:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-card-cta--button-styling--secondary-negative_1wc0z_93{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary-negative);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-card-cta--button-styling--secondary-negative_1wc0z_93:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-transparent-negative-hover)}._purpur-card-cta--button-styling--secondary-negative_1wc0z_93:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-transparent-negative-active)}._purpur-card-cta--button-styling--expressive_1wc0z_104{background-color:var(--purpur-color-background-interactive-expressive);color:var(--purpur-color-text-interactive-on-expressive)}._purpur-card-cta--button-styling--expressive_1wc0z_104:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-expressive-hover)}._purpur-card-cta--button-styling--expressive_1wc0z_104:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-expressive-active)}._purpur-card-cta--button-styling--expressive-negative_1wc0z_114{background-color:var(--purpur-color-background-interactive-expressive-negative);color:var(--purpur-color-text-interactive-on-expressive-negative)}._purpur-card-cta--button-styling--expressive-negative_1wc0z_114:hover:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-expressive-negative-hover);color:var(--purpur-color-text-interactive-on-expressive-negative-hover)}._purpur-card-cta--button-styling--expressive-negative_1wc0z_114:active:not(._purpur-card-cta--button-styling--disabled_1wc0z_64){background-color:var(--purpur-color-background-interactive-expressive-negative-active);color:var(--purpur-color-text-interactive-on-expressive-negative-active)}._purpur-card-cta--cta-styling_1wc0z_126{display:flex;align-items:center;color:var(--purpur-color-text-interactive-primary)}._purpur-card-cta--secondary_1wc0z_131._purpur-card-cta--disabled_1wc0z_131{box-shadow:none}._purpur-card-cta--disabled_1wc0z_131{background-color:var(--purpur-color-background-interactive-disabled);color:var(--purpur-color-text-weak);cursor:not-allowed}._purpur-card-cta--text_1wc0z_139{width:100%;box-sizing:border-box}._purpur-card-feature-list_ej4qm_1{list-style-type:none;margin:0;padding:0}._purpur-card-feature-list__list-item_ej4qm_6{align-items:center;display:flex;gap:var(--purpur-spacing-100)}._purpur-card-heading_8heg4_1{display:flex;align-items:start;justify-content:space-between}._purpur-card-heading__heading_8heg4_6{display:flex;align-items:start;gap:var(--purpur-spacing-150)}._purpur-card-heading__icon_8heg4_11{flex-shrink:0}._purpur-card-link-arrow_blsmb_1{align-items:center;border-radius:var(--purpur-border-radius-full);border-width:0;cursor:pointer;display:inline-flex;font-size:var(--purpur-typography-scale-100);font-family:var(--purpur-typography-family-default);font-weight:var(--purpur-typography-weight-medium);gap:var(--purpur-spacing-100);justify-content:center;line-height:var(--purpur-spacing-300);outline:0;position:relative;text-decoration:none;transition:all var(--purpur-motion-duration-100) ease;width:auto}._purpur-card-link-arrow_blsmb_1:focus:before{border-radius:var(--purpur-border-radius-full);box-shadow:0 0 0 var(--purpur-border-width-sm) var(--purpur-color-border-interactive-focus);content:"";display:block;inset:calc(var(--purpur-spacing-25) * -1);position:absolute}._purpur-card-link-arrow_blsmb_1:focus:not(:focus-visible):before{box-shadow:none}._purpur-card-link-arrow_blsmb_1 svg{display:block}._purpur-card-link-arrow--xs_blsmb_33{padding:var(--purpur-spacing-50) var(--purpur-spacing-250)}._purpur-card-link-arrow--xs_blsmb_33._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-100)}._purpur-card-link-arrow--sm_blsmb_39{padding:var(--purpur-spacing-100) var(--purpur-spacing-250)}._purpur-card-link-arrow--sm_blsmb_39._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-100)}._purpur-card-link-arrow--md_blsmb_45{padding:var(--purpur-spacing-150) var(--purpur-spacing-300)}._purpur-card-link-arrow--md_blsmb_45._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-150)}._purpur-card-link-arrow--lg_blsmb_51{padding:var(--purpur-spacing-200) var(--purpur-spacing-400)}._purpur-card-link-arrow--lg_blsmb_51._purpur-card-link-arrow--icon-only_blsmb_36{padding:var(--purpur-spacing-200)}._purpur-card-link-arrow--full-width_blsmb_57{width:100%}._purpur-card-link-arrow--primary_blsmb_60{background-color:var(--purpur-color-background-interactive-primary);color:var(--purpur-color-text-interactive-on-primary)}._purpur-card-link-arrow--primary_blsmb_60:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-hover)}._purpur-card-link-arrow--primary_blsmb_60:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-active)}._purpur-card-link-arrow--primary-negative_blsmb_70{background-color:var(--purpur-color-background-interactive-primary-negative);color:var(--purpur-color-text-interactive-on-primary-negative)}._purpur-card-link-arrow--primary-negative_blsmb_70:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-negative-hover);border-color:var(--purpur-color-background-interactive-primary-negative-hover)}._purpur-card-link-arrow--primary-negative_blsmb_70:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-primary-negative-active);border-color:var(--purpur-color-background-interactive-primary-negative-active)}._purpur-card-link-arrow--secondary_blsmb_82{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary);color:var(--purpur-color-text-interactive-primary)}._purpur-card-link-arrow--secondary_blsmb_82:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-hover)}._purpur-card-link-arrow--secondary_blsmb_82:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-active)}._purpur-card-link-arrow--secondary-negative_blsmb_93{background-color:var(--purpur-color-background-interactive-transparent);box-shadow:inset 0 0 0 var(--purpur-border-width-xs) var(--purpur-color-border-interactive-primary-negative);color:var(--purpur-color-text-interactive-primary-negative)}._purpur-card-link-arrow--secondary-negative_blsmb_93:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-negative-hover)}._purpur-card-link-arrow--secondary-negative_blsmb_93:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-transparent-negative-active)}._purpur-card-link-arrow--expressive_blsmb_104{background-color:var(--purpur-color-background-interactive-expressive);color:var(--purpur-color-text-interactive-on-expressive)}._purpur-card-link-arrow--expressive_blsmb_104:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-hover)}._purpur-card-link-arrow--expressive_blsmb_104:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-active)}._purpur-card-link-arrow--expressive-negative_blsmb_114{background-color:var(--purpur-color-background-interactive-expressive-negative);color:var(--purpur-color-text-interactive-on-expressive-negative)}._purpur-card-link-arrow--expressive-negative_blsmb_114:hover:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-negative-hover);color:var(--purpur-color-text-interactive-on-expressive-negative-hover)}._purpur-card-link-arrow--expressive-negative_blsmb_114:active:not(._purpur-card-link-arrow--disabled_blsmb_64){background-color:var(--purpur-color-background-interactive-expressive-negative-active);color:var(--purpur-color-text-interactive-on-expressive-negative-active)}._purpur-card-link-arrow--secondary_blsmb_82._purpur-card-link-arrow--disabled_blsmb_64{box-shadow:none}._purpur-card-link-arrow--disabled_blsmb_64{background-color:var(--purpur-color-background-interactive-disabled);color:var(--purpur-color-text-weak);cursor:not-allowed}._purpur-card-media_udc1o_1{width:100%}._purpur-card-media_udc1o_1 img,._purpur-card-media_udc1o_1 video{width:100%;display:block;object-fit:cover;aspect-ratio:2/1}@container card (min-width: 600px){._purpur-card-media_udc1o_1 img,._purpur-card-media_udc1o_1 video{aspect-ratio:auto;height:100%}}._purpur-card-media-layout_1yfvb_1{display:grid}._purpur-card-media-layout_1yfvb_1>div{order:1}._purpur-card-media-layout_1yfvb_1>div:has(img,video){order:0}@container card (min-width: 600px){._purpur-card-media-layout_1yfvb_1{grid-template-columns:repeat(2,1fr)}._purpur-card-media-layout_1yfvb_1>div{order:0}._purpur-card-media-layout_1yfvb_1>div:has(img,video){order:0}}._purpur-card-overline_192fe_1._purpur-card-overline_192fe_1{color:var(--purpur-color-text-medium);font-size:var(--purpur-typography-scale-75);font-weight:var(--purpur-typography-weight-normal);margin-bottom:var(--purpur-spacing-50)}._purpur-card-root_bqk1d_1{border-radius:var(--purpur-border-radius-md);display:flex;flex-direction:column;overflow:hidden;position:relative}._purpur-card-root--primary_bqk1d_8{background-color:var(--purpur-color-background-primary)}._purpur-card-root--secondary_bqk1d_11{background-color:var(--purpur-color-background-secondary)}._purpur-card-root--full-height_bqk1d_14{height:100%;justify-content:space-between}._purpur-card-trigger-item_1sp43_1{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}._purpur-card-trigger-item--button_1sp43_6{background-color:transparent;border:none;cursor:pointer}._purpur-card-trigger-item--disabled_1sp43_11{cursor:not-allowed}._purpur-card-trigger-item_1sp43_1:focus-visible{outline:none}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpurds/card",
3
- "version": "5.34.4",
3
+ "version": "5.35.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "main": "./dist/card.cjs.js",
6
6
  "types": "./dist/card.d.ts",
@@ -16,12 +16,12 @@
16
16
  "source": "src/card.tsx",
17
17
  "dependencies": {
18
18
  "classnames": "~2.5.0",
19
- "@purpurds/spinner": "5.34.4",
20
- "@purpurds/icon": "5.34.4",
21
- "@purpurds/tokens": "5.34.4",
22
- "@purpurds/badge": "5.34.4",
23
- "@purpurds/visually-hidden": "5.34.4",
24
- "@purpurds/paragraph": "5.34.4"
19
+ "@purpurds/icon": "5.35.0",
20
+ "@purpurds/paragraph": "5.35.0",
21
+ "@purpurds/badge": "5.35.0",
22
+ "@purpurds/spinner": "5.35.0",
23
+ "@purpurds/tokens": "5.35.0",
24
+ "@purpurds/visually-hidden": "5.35.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@rushstack/eslint-patch": "~1.10.0",
@@ -46,11 +46,11 @@
46
46
  "typescript": "^5.6.3",
47
47
  "vite": "5.4.8",
48
48
  "vitest": "^2.1.2",
49
- "@purpurds/action": "5.34.4",
50
- "@purpurds/heading": "5.34.4",
49
+ "@purpurds/action": "5.35.0",
50
+ "@purpurds/button": "5.35.0",
51
+ "@purpurds/heading": "5.35.0",
51
52
  "@purpurds/component-rig": "1.0.0",
52
- "@purpurds/button": "5.34.4",
53
- "@purpurds/grid": "5.34.4"
53
+ "@purpurds/grid": "5.35.0"
54
54
  },
55
55
  "scripts": {
56
56
  "build:dev": "vite",
@@ -6,7 +6,7 @@
6
6
  gap: var(--purpur-spacing-300);
7
7
  padding: var(--purpur-spacing-250) var(--purpur-spacing-200);
8
8
 
9
- @media screen and (min-width: #{$purpur-breakpoint-md}) {
9
+ @container card (min-width: #{$purpur-breakpoint-md}) {
10
10
  padding: calc(var(--purpur-spacing-400) + var(--purpur-spacing-100)) var(--purpur-spacing-300)
11
11
  var(--purpur-spacing-400) var(--purpur-spacing-300);
12
12
  }
@@ -14,8 +14,20 @@
14
14
  &--footer {
15
15
  padding: 0 var(--purpur-spacing-200) var(--purpur-spacing-200);
16
16
 
17
- @media screen and (min-width: #{$purpur-breakpoint-md}) {
17
+ @container card (min-width: #{$purpur-breakpoint-md}) {
18
18
  padding: 0 var(--purpur-spacing-300) var(--purpur-spacing-300);
19
19
  }
20
20
  }
21
+
22
+ &--gap-size--sm {
23
+ gap: var(--purpur-spacing-100);
24
+ }
25
+
26
+ &--gap-size--md {
27
+ gap: var(--purpur-spacing-200);
28
+ }
29
+
30
+ &--gap-size--lg {
31
+ gap: var(--purpur-spacing-300);
32
+ }
21
33
  }
@@ -20,17 +20,20 @@ type CardContentContainerProps = {
20
20
  * Flag to remove the top padding
21
21
  */
22
22
  isFooter?: boolean;
23
+ gapSize?: "sm" | "md" | "lg";
23
24
  };
24
25
 
25
26
  export const CardContentContainer = ({
26
27
  ["data-testid"]: dataTestId = "purpur-card-content-container",
27
28
  children,
28
29
  isFooter = false,
30
+ gapSize = "md",
29
31
  }: CardContentContainerProps) => {
30
32
  return (
31
33
  <div
32
34
  className={cx([
33
35
  rootClassName,
36
+ `${rootClassName}--gap-size--${gapSize}`,
34
37
  {
35
38
  [`${rootClassName}--footer`]: isFooter,
36
39
  },
@@ -2,7 +2,16 @@
2
2
 
3
3
  .purpur-card-cta {
4
4
  $root: &;
5
- @include action.action();
5
+
6
+ &--button-styling {
7
+ @include action.action();
8
+ }
9
+
10
+ &--cta-styling {
11
+ display: flex;
12
+ align-items: center;
13
+ color: var(--purpur-color-text-interactive-primary);
14
+ }
6
15
 
7
16
  &--secondary#{$root}--disabled {
8
17
  box-shadow: none;
package/src/card-cta.tsx CHANGED
@@ -17,6 +17,10 @@ export type CardCtaProps = {
17
17
  */
18
18
  iconPosition?: "left" | "right";
19
19
  loading?: boolean;
20
+ /**
21
+ * Use this to style the cta as a link (no border)
22
+ */
23
+ linkStyling?: boolean;
20
24
  text?: string;
21
25
  };
22
26
 
@@ -30,6 +34,7 @@ export const CardCta = ({
30
34
  iconPosition = "right",
31
35
  loading = false,
32
36
  text,
37
+ linkStyling = false,
33
38
  ...props
34
39
  }: CardCtaProps) => {
35
40
  return (
@@ -37,12 +42,15 @@ export const CardCta = ({
37
42
  className={`${cx([
38
43
  rootClassName,
39
44
  className,
40
- `${rootClassName}--md`,
41
- `${rootClassName}--secondary`,
45
+
42
46
  {
43
47
  [`${rootClassName}--disabled`]: disabled,
44
- [`${rootClassName}--icon-only`]: !text,
45
48
  [`${rootClassName}--text`]: !!text,
49
+ [`${rootClassName}--cta-styling`]: linkStyling,
50
+ [`${rootClassName}--button-styling`]: !linkStyling,
51
+ [`${rootClassName}--button-styling--md`]: !linkStyling,
52
+ [`${rootClassName}--button-styling--secondary`]: !linkStyling,
53
+ [`${rootClassName}--button-styling--icon-only`]: !linkStyling && !text,
46
54
  },
47
55
  ])} ${rootClassName}`}
48
56
  data-testid={dataTestId}
@@ -0,0 +1,16 @@
1
+ .purpur-card-heading {
2
+ display: flex;
3
+
4
+ align-items: start;
5
+ justify-content: space-between;
6
+
7
+ &__heading {
8
+ display: flex;
9
+ align-items: start;
10
+ gap: var(--purpur-spacing-150);
11
+ }
12
+
13
+ &__icon {
14
+ flex-shrink: 0;
15
+ }
16
+ }
@@ -0,0 +1,44 @@
1
+ import React, { ReactNode } from "react";
2
+ import { type HeadingTagType, Heading } from "@purpurds/heading";
3
+ import c from "classnames/bind";
4
+
5
+ import styles from "./card-heading.module.scss";
6
+
7
+ const cx = c.bind(styles);
8
+
9
+ export type CardHeadingProps = {
10
+ /**
11
+ * Use this to set a testid on the feature list
12
+ */
13
+ ["data-testid"]?: string;
14
+ title: string;
15
+ /**
16
+ * Use when you want an icon to the left of the title
17
+ */
18
+ icon?: React.ReactNode;
19
+ /**
20
+ * Use for the CTA, it will positioned to the right
21
+ */
22
+ children?: ReactNode;
23
+ titleTag?: HeadingTagType;
24
+ };
25
+
26
+ const rootClassName = "purpur-card-heading";
27
+
28
+ export const CardHeading = ({
29
+ ["data-testid"]: dataTestId = "purpur-card-heading",
30
+ title,
31
+ icon,
32
+ children,
33
+ titleTag = "h2",
34
+ }: CardHeadingProps) => (
35
+ <div className={cx(rootClassName)} data-testid={dataTestId}>
36
+ <div className={cx(`${rootClassName}__heading`)}>
37
+ {icon && <div className={cx(`${rootClassName}__icon`)}>{icon}</div>}
38
+ <Heading tag={titleTag} variant="title-100">
39
+ {title}
40
+ </Heading>
41
+ </div>
42
+ {children}
43
+ </div>
44
+ );
@@ -0,0 +1,22 @@
1
+ @use "@purpurds/tokens/breakpoint/variables" as *;
2
+
3
+ .purpur-card-media-layout {
4
+ display: grid;
5
+
6
+ > div {
7
+ order: 1;
8
+ }
9
+ > div:has(img, video) {
10
+ order: 0;
11
+ }
12
+
13
+ @container card (min-width: #{$purpur-breakpoint-md}) {
14
+ grid-template-columns: repeat(2, 1fr);
15
+ > div {
16
+ order: 0;
17
+ }
18
+ > div:has(img, video) {
19
+ order: 0;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ import React, { ReactNode } from "react";
2
+ import c from "classnames/bind";
3
+
4
+ import styles from "./card-media-layout.module.scss";
5
+
6
+ const cx = c.bind(styles);
7
+
8
+ export type CardMediaLayoutProps = {
9
+ ["data-testid"]?: string;
10
+ className?: string;
11
+ children?: ReactNode;
12
+ };
13
+
14
+ const rootClassName = "purpur-card-media-layout";
15
+
16
+ export const CardMediaLayout = ({
17
+ ["data-testid"]: dataTestId = "purpur-card-media-layout",
18
+ className,
19
+ children,
20
+ }: CardMediaLayoutProps) => (
21
+ <div className={cx([rootClassName, className])} data-testid={dataTestId}>
22
+ {children}
23
+ </div>
24
+ );
@@ -0,0 +1,18 @@
1
+ @use "@purpurds/tokens/breakpoint/variables" as *;
2
+
3
+ .purpur-card-media {
4
+ width: 100%;
5
+
6
+ img,
7
+ video {
8
+ width: 100%;
9
+ display: block;
10
+ object-fit: cover;
11
+ aspect-ratio: 2/1;
12
+
13
+ @container card (min-width: #{$purpur-breakpoint-md}) {
14
+ aspect-ratio: auto;
15
+ height: 100%;
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import c from "classnames/bind";
3
+
4
+ import styles from "./card-media.module.scss";
5
+
6
+ const cx = c.bind(styles);
7
+
8
+ export type CardMediaProps = {
9
+ ["data-testid"]?: string;
10
+ className?: string;
11
+ children?: React.ReactNode;
12
+ };
13
+
14
+ const rootClassName = "purpur-card-media";
15
+
16
+ export const CardMedia = ({
17
+ ["data-testid"]: dataTestId = "purpur-card-media",
18
+ className,
19
+ children,
20
+ }: CardMediaProps) => (
21
+ <div className={cx([rootClassName, className])} data-testid={dataTestId}>
22
+ {children}
23
+ </div>
24
+ );
@@ -24,7 +24,7 @@ export const CardTriggerItem = ({
24
24
  onClick,
25
25
  screenReaderText,
26
26
  }: CardTriggerItemProps) => {
27
- const handleClick = (e: MouseEvent<HTMLButtonElement>): void => {
27
+ const handleClick = (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>): void => {
28
28
  if (disabled) {
29
29
  e.preventDefault();
30
30
  } else if (onClick) {
@@ -49,6 +49,7 @@ export const CardTriggerItem = ({
49
49
  data-testid={dataTestId}
50
50
  href={disabled ? undefined : href}
51
51
  tabIndex={disabled ? 0 : undefined}
52
+ onClick={handleClick}
52
53
  >
53
54
  <VisuallyHidden>{screenReaderText}</VisuallyHidden>
54
55
  </a>
@@ -2,7 +2,8 @@
2
2
 
3
3
  $card-trigger-item-selector: "[class*=" purpur-card-trigger-item "]";
4
4
  $card-trigger-item-disabled-selector: "[class*=" purpur-card-trigger-item--disabled "]";
5
- $card-link-arrow-selector: "[class*=" purpur-card-link-arrow "], [class*=" purpur-card-cta "]";
5
+ $card-link-arrow-selector: "[class*=" purpur-card-link-arrow "], [class*="
6
+ purpur-card-cta--button-styling "]";
6
7
 
7
8
  .purpur-card {
8
9
  transition: box-shadow var(--purpur-motion-duration-150) var(--purpur-motion-easing-ease-in-out);
@@ -15,7 +16,7 @@ $card-link-arrow-selector: "[class*=" purpur-card-link-arrow "], [class*=" purpu
15
16
  }
16
17
 
17
18
  &:has(#{$card-trigger-item-selector}) {
18
- border: var(--purpur-border-width-xs) solid var(--purpur-color-border-weak);
19
+ border: var(--purpur-border-width-xs) solid transparent;
19
20
  }
20
21
 
21
22
  &:has(#{$card-trigger-item-selector}:focus-visible) {
@@ -2,7 +2,7 @@
2
2
  import React from "react";
3
3
  import { Grid } from "@purpurds/grid";
4
4
  import { Heading } from "@purpurds/heading";
5
- import { IconArrowRight, IconCart } from "@purpurds/icon";
5
+ import { IconArrowRight, IconCart, IconSimcard } from "@purpurds/icon";
6
6
  import { Paragraph } from "@purpurds/paragraph";
7
7
  import type { Meta, StoryObj } from "@storybook/react";
8
8
 
@@ -30,6 +30,12 @@ const meta = {
30
30
  "Card.FeatureList": Card.FeatureList,
31
31
  //@ts-ignore
32
32
  "Card.Overline": Card.Overline,
33
+ //@ts-ignore
34
+ "Card.Heading": Card.Heading,
35
+ //@ts-ignore
36
+ "Card.Media": Card.Media,
37
+ //@ts-ignore
38
+ "Card.MediaLayout": Card.MediaLayout,
33
39
  },
34
40
  args: {
35
41
  href: "/?path=/docs/components-card--docs",
@@ -54,13 +60,103 @@ const meta = {
54
60
  export default meta;
55
61
  type Story = StoryObj<typeof Card>;
56
62
 
57
- export const Showcase: Story = {
63
+ const adaptiveBackground = (variant = "primary") => ({
64
+ margin: "calc(var(--purpur-spacing-250) * -1)",
65
+ padding: "var(--purpur-spacing-250)",
66
+ backgroundColor:
67
+ variant === "primary" ? "var(--purpur-color-background-secondary)" : "transparent",
68
+ });
69
+
70
+ export const CardWithHeading: Story = {
71
+ render: (args) => (
72
+ <div style={adaptiveBackground(args.variant)}>
73
+ <Grid colsMd={2} colsSm={1} colsLg={4}>
74
+ {Array(4)
75
+ .fill(0)
76
+ .map((_, index) => (
77
+ // eslint-disable-next-line react/no-array-index-key
78
+ <Card {...args} key={index}>
79
+ <Card.ContentContainer gapSize="sm">
80
+ <Card.Heading title="Tips and tricks" icon={<IconSimcard size="sm" />}>
81
+ <Card.Cta linkStyling>
82
+ <IconArrowRight size="sm" />
83
+ </Card.Cta>
84
+ </Card.Heading>
85
+ <Paragraph>
86
+ Read about how to improve your self-service experience with our tips and tricks.
87
+ Learn how to manage your account, troubleshoot common issues, and make the most
88
+ out of our services efficiently and effectively.
89
+ </Paragraph>
90
+ </Card.ContentContainer>
91
+ </Card>
92
+ ))}
93
+ </Grid>
94
+ </div>
95
+ ),
96
+ tags: ["visual:check"],
97
+ };
98
+
99
+ export const CardWithHeadingAndImage: Story = {
100
+ render: (args) => (
101
+ <div style={adaptiveBackground(args.variant)}>
102
+ <Grid colsMd={1}>
103
+ <Card {...args}>
104
+ <Card.MediaLayout>
105
+ <Card.Media>
106
+ <img
107
+ alt="A family looking with joy at something"
108
+ src="https://www.telia.se/images/i15skfqwpurk/5YYelnwdIJGush05RYsE6A/04d4eeb571bca6d5c72b557f6da92c92/Telia_Company_Reinvention_69.jpg?fit=scale&w=536&fm=jpg&q=70"
109
+ />
110
+ </Card.Media>
111
+ <Card.ContentContainer gapSize="sm">
112
+ <Card.Heading title="Tips and tricks" icon={<IconSimcard size="sm" />}>
113
+ <Card.Cta linkStyling>
114
+ <IconArrowRight size="sm" />
115
+ </Card.Cta>
116
+ </Card.Heading>
117
+ <Paragraph>
118
+ Read about how to improve your self-service experience with our tips and tricks.
119
+ Learn how to manage your account, troubleshoot common issues, and make the most out
120
+ of our services efficiently and effectively.
121
+ </Paragraph>
122
+ </Card.ContentContainer>
123
+ </Card.MediaLayout>
124
+ </Card>
125
+ <Card {...args}>
126
+ <Card.MediaLayout>
127
+ <Card.ContentContainer gapSize="sm">
128
+ <Card.Heading title="Tips and tricks" icon={<IconSimcard size="sm" />}>
129
+ <Card.Cta linkStyling>
130
+ <IconArrowRight size="sm" />
131
+ </Card.Cta>
132
+ </Card.Heading>
133
+ <Paragraph>
134
+ Read about how to improve your self-service experience with our tips and tricks.
135
+ Learn how to manage your account, troubleshoot common issues, and make the most out
136
+ of our services efficiently and effectively.
137
+ </Paragraph>
138
+ </Card.ContentContainer>
139
+ <Card.Media>
140
+ <img
141
+ alt="A family looking with joy at something"
142
+ src="https://www.telia.se/images/i15skfqwpurk/5YYelnwdIJGush05RYsE6A/04d4eeb571bca6d5c72b557f6da92c92/Telia_Company_Reinvention_69.jpg?fit=scale&w=536&fm=jpg&q=70"
143
+ />
144
+ </Card.Media>
145
+ </Card.MediaLayout>
146
+ </Card>
147
+ </Grid>
148
+ </div>
149
+ ),
150
+ tags: ["visual:check"],
151
+ };
152
+
153
+ export const CardWithBadgeAndFeaturelist: Story = {
58
154
  render: (args) => (
59
- <Grid colsMd={2}>
60
- <Card {...args}>
61
- <Card.ContentContainer>
62
- <Card.Badge variant="information" text="Best hit" />
63
- <Card.Content>
155
+ <div style={adaptiveBackground(args.variant)}>
156
+ <Grid colsMd={2}>
157
+ <Card {...args}>
158
+ <Card.ContentContainer>
159
+ <Card.Badge variant="information" text="Best hit" />
64
160
  <div>
65
161
  <Card.Overline overline="TELIA" />
66
162
  <Heading tag="h2" variant="title-200">
@@ -78,13 +174,11 @@ export const Showcase: Story = {
78
174
  </Card.Cta>
79
175
  </div>
80
176
  </div>
81
- </Card.Content>
82
- </Card.ContentContainer>
83
- </Card>
84
- <Card {...args}>
85
- <Card.ContentContainer>
86
- <Card.Badge variant="information" text="Best hit" />
87
- <Card.Content>
177
+ </Card.ContentContainer>
178
+ </Card>
179
+ <Card {...args}>
180
+ <Card.ContentContainer>
181
+ <Card.Badge variant="information" text="Best hit" />
88
182
  <div>
89
183
  <Card.Overline overline="TELIA" />
90
184
  <Heading tag="h2" variant="title-200">
@@ -101,10 +195,10 @@ export const Showcase: Story = {
101
195
  </Card.Cta>
102
196
  </div>
103
197
  </div>
104
- </Card.Content>
105
- </Card.ContentContainer>
106
- </Card>
107
- </Grid>
198
+ </Card.ContentContainer>
199
+ </Card>
200
+ </Grid>
201
+ </div>
108
202
  ),
109
203
  tags: ["visual:check"],
110
204
  };
package/src/card.tsx CHANGED
@@ -7,7 +7,10 @@ import { CardContent } from "./card-content.tsx";
7
7
  import { CardContentContainer } from "./card-content-container.tsx";
8
8
  import { CardCta } from "./card-cta.tsx";
9
9
  import { CardFeatureList } from "./card-feature-list";
10
+ import { CardHeading } from "./card-heading";
10
11
  import { CardLinkArrow } from "./card-link-arrow";
12
+ import { CardMedia } from "./card-media";
13
+ import { CardMediaLayout } from "./card-media-layout";
11
14
  import { CardOverline } from "./card-overline";
12
15
  import type {
13
16
  CardRootButtonProps,
@@ -27,6 +30,9 @@ type CardCmp<P> = React.FunctionComponent<P> & {
27
30
  FeatureList: typeof CardFeatureList;
28
31
  LinkArrow: typeof CardLinkArrow;
29
32
  Overline: typeof CardOverline;
33
+ Heading: typeof CardHeading;
34
+ Media: typeof CardMedia;
35
+ MediaLayout: typeof CardMediaLayout;
30
36
  };
31
37
 
32
38
  export type CardProps = CardRootProps;
@@ -61,5 +67,8 @@ Card.ContentContainer = CardContentContainer;
61
67
  Card.Cta = CardCta;
62
68
  Card.FeatureList = CardFeatureList;
63
69
  Card.Overline = CardOverline;
70
+ Card.Heading = CardHeading;
71
+ Card.Media = CardMedia;
72
+ Card.MediaLayout = CardMediaLayout;
64
73
 
65
74
  Card.displayName = "Card";