diff --git a/docs/docs/components/card.md b/docs/docs/components/card.md index c6b3d9d4c..a8731c727 100644 --- a/docs/docs/components/card.md +++ b/docs/docs/components/card.md @@ -198,7 +198,19 @@ Use the `appearance` attribute to change the card's visual appearance. ``` +### Variants +Use the `variant` attribute to set the card's semantic variant, if any. + +```html {.example} +
+{% for variant in ['brand', 'success', 'warning', 'danger'] -%} + {% for appearance in ['outlined', 'outlined filled', 'outlined accent', 'plain', 'filled', 'accent'] -%} + +
{{ appearance | capitalize }}
+ {{ variant | capitalize }} variant. +
+ {%- endfor %} +{%- endfor %}
``` - diff --git a/src/components/card/card.css b/src/components/card/card.css index f121ff65a..c14c8dcde 100644 --- a/src/components/card/card.css +++ b/src/components/card/card.css @@ -21,7 +21,8 @@ color: var(--wa-color-text-normal); } -:host(:is([appearance~='filled'], [appearance~='accent'], .wa-filled, .wa-accent)) { +:host(:is([appearance~='filled'], [appearance~='accent'], .wa-filled, .wa-accent)), +:host(:is([variant='brand'], [variant='success'], [variant='warning'], [variant='danger'])) { color: var(--text-color, var(--wa-color-text-normal)); } diff --git a/src/components/card/card.ts b/src/components/card/card.ts index 6bf2693ce..704be8086 100644 --- a/src/components/card/card.ts +++ b/src/components/card/card.ts @@ -4,6 +4,7 @@ import { HasSlotController } from '../../internal/slot.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; import appearanceStyles from '../../styles/utilities/appearance.css'; import sizeStyles from '../../styles/utilities/size.css'; +import variantStyles from '../../styles/utilities/variants.css'; import styles from './card.css'; /** @@ -30,13 +31,22 @@ import styles from './card.css'; */ @customElement('wa-card') export default class WaCard extends WebAwesomeElement { - static shadowStyle = [sizeStyles, appearanceStyles, styles]; + static shadowStyle = [sizeStyles, variantStyles, appearanceStyles, styles]; private readonly hasSlotController = new HasSlotController(this, 'footer', 'header', 'image'); /** The component's size. Will be inherited by any descendants with a `size` attribute. */ @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + /** The card's theme variant. Defaults to `neutral` if not within another element with a variant. */ + @property({ reflect: true, initial: 'neutral' }) variant: + | 'brand' + | 'neutral' + | 'success' + | 'warning' + | 'danger' + | 'inherit' = 'inherit'; + /** The card's visual appearance. */ @property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'plain' = 'outlined';