diff --git a/libs/web-components/src/components/accordion/Accordion.svelte b/libs/web-components/src/components/accordion/Accordion.svelte index 12c70b975..4fefe5d9b 100644 --- a/libs/web-components/src/components/accordion/Accordion.svelte +++ b/libs/web-components/src/components/accordion/Accordion.svelte @@ -58,7 +58,7 @@ validateRequired("GoAAccordion", { heading }); validateHeadingSize(headingsize); ensureSlotExists(_slotEl); - + _headingSlotChildren = getHeadingChildren(); _accordionId = `accordion-${generateRandomId()}`; }); @@ -117,8 +117,8 @@ {/if} @@ -142,8 +142,8 @@ {/if} @@ -182,7 +182,7 @@ } summary { - min-height: 3.5rem; + min-height: var(--goa-accordion-heading-min-height, 3.5rem); padding: var(--goa-accordion-padding-heading-icon-left); border: var(--goa-accordion-border); border-radius: var(--goa-accordion-border-radius); @@ -203,6 +203,7 @@ summary:hover { background-color: var(--goa-accordion-color-bg-heading-hover); + border: var(--goa-accordion-border-hover, var(--goa-accordion-border)); color: var(--goa-accordion-color-heading-hover); } summary:focus-visible, @@ -242,16 +243,16 @@ } .heading { - font: var(--goa-accordion-heading-s); + font: var(--goa-accordion-heading); padding-right: 1rem; } .secondary-text { - font: var(--goa-typography-body-s); + font: var(--goa-accordion-heading-secondary-text, var(--goa-typography-body-s)); + color: var(--goa-accordion-heading-secondary-text-color, var(--goa-color-text-default)); line-height: 1.5rem; padding-right: 1rem; } - .heading-content { flex: 1; } @@ -261,7 +262,7 @@ } .container-medium { - min-height: 4rem; + min-height: var(--goa-accordion-heading-m-min-height, 4rem); } .container-medium goa-icon { @@ -291,12 +292,33 @@ border-bottom: var(--goa-accordion-divider); } + details[open] summary:hover { + border-bottom: var(--goa-accordion-divider-hover, var(--goa-accordion-divider)); + } + + details[open] summary:focus-visible::before { + border-radius: var(--goa-accordion-border-radius-focus, var(--goa-accordion-border-radius)); + } + + /* Sizes */ .heading-medium { line-height: 2rem; font: var(--goa-accordion-heading-m); } + .heading-medium + .secondary-text { + font: var(--goa-accordion-heading-m-secondary-text, var(--goa-typography-body-s)); + } + + .container-medium { + padding: var(--goa-accordion-padding-heading-m-icon-left, var(--goa-accordion-padding-heading-icon-left)); + } + + .container-medium.iconRight { + padding: var(--goa-accordion-padding-heading-m-icon-right, var(--goa-accordion-padding-heading-icon-right)); + } + @container self (--mobile) { .content { padding: var(--goa-accordion-padding-content-narrow); diff --git a/libs/web-components/src/components/callout/Callout.svelte b/libs/web-components/src/components/callout/Callout.svelte index 8784830b7..394226a1c 100644 --- a/libs/web-components/src/components/callout/Callout.svelte +++ b/libs/web-components/src/components/callout/Callout.svelte @@ -19,16 +19,23 @@ "medium", "large", ]); + const [CalloutEmphasis, validateCalloutEmphasis] = typeValidator( + "Callout emphasis", + ["high", "medium", "low"], + ); const [AriaLive, validateAriaLive] = typeValidator("Aria live", [ "off", "assertive", "polite", ]); + const [Version, validateVersion] = typeValidator("Version", ["1", "2"]); // Types type CalloutType = (typeof Types)[number]; type CalloutSize = (typeof CalloutSizes)[number]; + type CalloutEmphasisType = (typeof CalloutEmphasis)[number]; type AriaLiveType = (typeof AriaLive)[number]; + type VersionType = (typeof Version)[number]; // margin export let mt: Spacing = null; @@ -38,11 +45,13 @@ export let size: CalloutSize = "large"; export let type: CalloutType; + export let emphasis: CalloutEmphasisType = "medium"; export let heading: string = ""; export let maxwidth: string = "none"; export let testid: string = ""; export let arialive: AriaLiveType = "off"; export let icontheme: IconTheme = "outline"; + export let version: VersionType = "1"; // Private @@ -68,7 +77,9 @@ onMount(() => { validateCalloutSize(size); + validateCalloutEmphasis(emphasis); validateAriaLive(arialive); + validateVersion(version); setTimeout(() => { validateType(type); @@ -85,24 +96,35 @@ ${calculateMargin(mt, mr, mb, ml)}; max-width: ${maxwidth}; `} - class="notification {type}" + class="notification {type} emphasis-{emphasis}" class:medium={isMediumCallout} + class:v2={version === "2"} data-testid={testid} aria-live={arialive} > - - - - - {#if heading} -

{heading}

- {/if} - -
+ {#if version === "2"} +
+ +

{heading}

+
+
+ +
+ {:else} + + + + + {#if heading} +

{heading}

+ {/if} + +
+ {/if} @@ -221,4 +243,164 @@ .notification.medium .icon { padding: var(--goa-callout-m-statusbar-padding); } + + /* Version two: Layout */ + + .v2.notification { + flex-direction: column; + border: var(--goa-callout-border); + } + + .v2.notification .heading { + display: flex; + flex-direction: row; + align-items: flex-start; + padding: var(--goa-callout-heading-padding); + gap: var(--goa-callout-heading-gap); + color: var(--goa-callout-heading-color); + } + + .v2.notification .heading-label { + margin-top: var(--goa-space-3xs); + margin-bottom: var(--goa-space-3xs); + font: var(--goa-callout-heading-typography); + } + + .v2.notification .body { + padding: var(--goa-callout-body-padding); + color: var(--goa-callout-body-color); + font: var(--goa-callout-body-typography); + } + + /* Version two: Low emphasis layout */ + + .v2.emphasis-low .body { + padding: var(--goa-callout-l-with-heading-body-padding); + } + + .v2.emphasis-low:has(.heading-label:empty) { + flex-direction: row; + align-items: start; + } + + .v2.emphasis-low .heading-label:empty { + display: none; + } + + .v2.emphasis-low:has(.heading-label:empty) .heading { + padding-right: var(--goa-space-xs); + } + + .v2.emphasis-low:has(.heading-label:empty) .body { + padding: var(--goa-callout-l-without-heading-body-padding); + } + + .v2.information { + background-color: var(--goa-callout-info-content-bg-color); + } + + /* Version two: Types */ + + .v2.information .heading { + background-color: var(--goa-callout-info-heading-bg-color); + --fill-color: var(--goa-callout-info-icon-color); + } + + .v2.information.emphasis-low { + border-color: var(--goa-callout-l-info-border-color); + background-color: var(--goa-callout-l-info-content-bg-color); + } + + .v2.information.emphasis-high { + border-color: var(--goa-callout-h-info-border-color); + background-color: var(--goa-callout-h-info-content-bg-color); + } + + .v2.information.emphasis-high .heading { + background-color: var(--goa-callout-h-info-heading-bg-color); + color: var(--goa-callout-h-info-heading-color); + --fill-color: var(--goa-callout-h-info-icon-color); + } + + .v2.emergency { + background-color: var(--goa-callout-emergency-content-bg-color); + } + + .v2.emergency .heading { + background-color: var(--goa-callout-emergency-heading-bg-color); + --fill-color: var(--goa-callout-emergency-icon-color); + } + + .v2.emergency.emphasis-low { + border-color: var(--goa-callout-l-emergency-border-color); + background-color: var(--goa-callout-l-emergency-content-bg-color); + } + + .v2.emergency.emphasis-high { + border-color: var(--goa-callout-h-emergency-border-color); + background-color: var(--goa-callout-h-emergency-content-bg-color); + } + + .v2.emergency.emphasis-high .heading { + background-color: var(--goa-callout-h-emergency-heading-bg-color); + color: var(--goa-callout-h-emergency-heading-color); + --fill-color: var(--goa-callout-h-emergency-icon-color); + } + + .v2.important { + background-color: var(--goa-callout-important-content-bg-color); + } + + .v2.important .heading { + background-color: var(--goa-callout-important-heading-bg-color); + --fill-color: var(--goa-callout-important-icon-color); + } + + .v2.important.emphasis-low { + border-color: var(--goa-callout-l-important-border-color); + background-color: var(--goa-callout-l-important-content-bg-color); + } + + .v2.important.emphasis-high { + border-color: var(--goa-callout-h-important-border-color); + background-color: var(--goa-callout-h-important-content-bg-color); + } + + .v2.important.emphasis-high .heading { + background-color: var(--goa-callout-h-important-heading-bg-color); + color: var(--goa-callout-h-important-heading-color); + --fill-color: var(--goa-callout-h-important-icon-color); + } + + .v2.success { + background-color: var(--goa-callout-success-content-bg-color); + } + + .v2.success .heading { + background-color: var(--goa-callout-success-heading-bg-color); + --fill-color: var(--goa-callout-success-icon-color); + } + + .v2.success.emphasis-low { + border-color: var(--goa-callout-l-success-border-color); + background-color: var(--goa-callout-l-success-content-bg-color); + } + + .v2.success.emphasis-high { + border-color: var(--goa-callout-h-success-border-color); + background-color: var(--goa-callout-h-success-content-bg-color); + } + + .v2.success.emphasis-high .heading { + background-color: var(--goa-callout-h-success-heading-bg-color); + color: var(--goa-callout-h-success-heading-color); + --fill-color: var(--goa-callout-h-success-icon-color); + } + + .v2.information.emphasis-low .heading, + .v2.important.emphasis-low .heading, + .v2.emergency.emphasis-low .heading, + .v2.success.emphasis-low .heading { + background-color: transparent; + }