UNPKG

@cbpds/web-components

Version:
380 lines (378 loc) 21.4 kB
/* * Caution: "global styles" get injected into every component and can cause file size bloat. * These should only include SASS variables and mixins that are not written out to CSS directly */ /** * @prop --cbp-button-color: var(--cbp-color-text-lightest); * @prop --cbp-button-color-hover: var(--cbp-color-text-lightest); * @prop --cbp-button-color-focus: var(--cbp-color-text-lightest); * @prop --cbp-button-color-active: var(--cbp-color-text-lightest); * @prop --cbp-button-color-bg: var(--cbp-color-interactive-primary-dark); * @prop --cbp-button-color-bg-hover: var(--cbp-color-interactive-primary-darker); * @prop --cbp-button-color-bg-focus: var(--cbp-color-interactive-focus-dark); * @prop --cbp-button-color-bg-active: var(--cbp-color-interactive-active-dark); * @prop --cbp-button-color-border: var(--cbp-color-interactive-primary-dark); * @prop --cbp-button-color-border-hover: var(--cbp-color-interactive-primary-darker); * @prop --cbp-button-color-border-focus: var(--cbp-color-interactive-focus-dark); * @prop --cbp-button-color-border-active: var(--cbp-color-interactive-active-dark); * @prop --cbp-button-color-dark: var(--cbp-color-text-darkest); * @prop --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); * @prop --cbp-button-color-focus-dark: var(--cbp-color-text-darkest); * @prop --cbp-button-color-active-dark: var(--cbp-color-text-darkest); * @prop --cbp-button-color-bg-dark: var(--cbp-color-interactive-primary-base); * @prop --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-primary-light); * @prop --cbp-button-color-bg-focus-dark: var(--cbp-color-interactive-focus-light); * @prop --cbp-button-color-bg-active-dark: var(--cbp-color-interactive-active-light); * @prop --cbp-button-color-border-dark: var(--cbp-color-interactive-primary-base); * @prop --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-primary-light); * @prop --cbp-button-color-border-focus-dark: var(--cbp-color-interactive-focus-light); * @prop --cbp-button-color-border-active-dark: var(--cbp-color-interactive-active-light); * @prop --cbp-button-color-outline-focus: var(--cbp-color-white); * @prop --cbp-button-color-outline-focus-dark: var(--cbp-color-black); * @prop --cbp-button-border-width: var(--cbp-border-size-md); * @prop --cbp-button-border-style: solid; * @prop --cbp-button-border-radius: var(--cbp-border-radius-soft); * @prop --cbp-button-gap: 0 var(--cbp-space-2x); */ /* * Buttons get customized and overridden often within the design system and may benefit from a fully fleshed-out CSS API */ :root { --cbp-button-color: var(--cbp-color-text-lightest); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-focus: var(--cbp-color-text-lightest); --cbp-button-color-active: var(--cbp-color-text-lightest); --cbp-button-color-bg: var(--cbp-color-interactive-primary-dark); --cbp-button-color-bg-hover: var(--cbp-color-interactive-primary-darker); --cbp-button-color-bg-focus: var(--cbp-color-interactive-focus-dark); --cbp-button-color-bg-active: var(--cbp-color-interactive-active-dark); --cbp-button-color-border: var(--cbp-color-interactive-primary-dark); --cbp-button-color-border-hover: var(--cbp-color-interactive-primary-darker); --cbp-button-color-border-focus: var(--cbp-color-interactive-focus-dark); --cbp-button-color-border-active: var(--cbp-color-interactive-active-dark); --cbp-button-color-dark: var(--cbp-color-text-darkest); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); --cbp-button-color-focus-dark: var(--cbp-color-text-darkest); --cbp-button-color-active-dark: var(--cbp-color-text-darkest); --cbp-button-color-bg-dark: var(--cbp-color-interactive-primary-base); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-bg-focus-dark: var(--cbp-color-interactive-focus-light); --cbp-button-color-bg-active-dark: var(--cbp-color-interactive-active-light); --cbp-button-color-border-dark: var(--cbp-color-interactive-primary-base); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-border-focus-dark: var(--cbp-color-interactive-focus-light); --cbp-button-color-border-active-dark: var(--cbp-color-interactive-active-light); --cbp-button-color-outline-focus: var(--cbp-color-white); --cbp-button-color-outline-focus-dark: var(--cbp-color-black); --cbp-button-focus-outline-width: var(--cbp-border-size-md); --cbp-button-padding: var(--cbp-space-2x); --cbp-button-border-width: var(--cbp-border-size-md); --cbp-button-border-style: solid; --cbp-button-border-radius: var(--cbp-border-radius-soft); --cbp-button-min-width: auto; --cbp-button-min-height: 2.25rem; --cbp-button-width: auto; --cbp-button-height: auto; --cbp-button-gap: 0 var(--cbp-space-2x); } /* * Dark Mode - display dark design based on mode or context. * This toggle should have the highest specificity, so that what ever values were specified for the dark version * get written to the light within the scope of this component. */ [data-cbp-theme=light] cbp-button[context*=dark]:not(#fakeId), [data-cbp-theme=dark] cbp-button:not([context=dark-inverts]):not([context=light-always]):not(#fakeId) { --cbp-button-color: var(--cbp-button-color-dark); --cbp-button-color-hover: var(--cbp-button-color-hover-dark); --cbp-button-color-focus: var(--cbp-button-color-focus-dark); --cbp-button-color-active: var(--cbp-button-color-active-dark); --cbp-button-color-bg: var(--cbp-button-color-bg-dark); --cbp-button-color-bg-hover: var(--cbp-button-color-bg-hover-dark); --cbp-button-color-bg-focus: var(--cbp-button-color-bg-focus-dark); --cbp-button-color-bg-active: var(--cbp-button-color-bg-active-dark); --cbp-button-color-border: var(--cbp-button-color-border-dark); --cbp-button-color-border-hover: var(--cbp-button-color-border-hover-dark); --cbp-button-color-border-focus: var(--cbp-button-color-border-focus-dark); --cbp-button-color-border-active: var(--cbp-button-color-border-active-dark); --cbp-button-color-outline-focus: var(--cbp-button-color-outline-focus-dark); } cbp-button { display: inline-block; width: var(--cbp-button-width); height: var(--cbp-button-height); } cbp-button button, cbp-button a { display: inline-flex; gap: var(--cbp-button-gap); align-items: center; justify-content: center; border-width: var(--cbp-button-border-width); border-style: solid; border-radius: var(--cbp-button-border-radius); font-weight: var(--cbp-font-weight-medium); text-transform: uppercase; letter-spacing: var(--cbp-letter-spacing-loose); text-decoration: none; padding: var(--cbp-button-padding); transition: all var(--cbp-motion-duration-shorter); min-width: var(--cbp-button-min-width); min-height: var(--cbp-button-min-height); width: var(--cbp-button-width); height: var(--cbp-button-height); white-space: nowrap; cursor: pointer; color: var(--cbp-button-color); background-color: var(--cbp-button-color-bg); border-color: var(--cbp-button-color-border); outline-color: var(--cbp-button-color-outline-focus); outline-style: solid; outline-width: 0; outline-offset: calc(-1 * var(--cbp-space-1x)); } cbp-button button:hover, cbp-button a:hover { --cbp-button-color: var(--cbp-button-color-hover); --cbp-button-color-bg: var(--cbp-button-color-bg-hover); --cbp-button-color-border: var(--cbp-button-color-border-hover); } cbp-button button:focus, cbp-button a:focus { --cbp-button-color: var(--cbp-button-color-focus); --cbp-button-color-bg: var(--cbp-button-color-bg-focus); --cbp-button-color-border: var(--cbp-button-color-border-focus); outline-width: var(--cbp-button-focus-outline-width); } cbp-button button:active, cbp-button a:active { --cbp-button-color: var(--cbp-button-color-active); --cbp-button-color-bg: var(--cbp-button-color-bg-active); --cbp-button-color-border: var(--cbp-button-color-border-active); } cbp-button[fill=solid] { --cbp-button-color: var(--cbp-color-text-lightest); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-dark: var(--cbp-color-text-darkest); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); } cbp-button[fill=solid][color=primary] { --cbp-button-color-bg: var(--cbp-color-interactive-primary-dark); --cbp-button-color-bg-hover: var(--cbp-color-interactive-primary-darker); --cbp-button-color-border: var(--cbp-color-interactive-primary-dark); --cbp-button-color-border-hover: var(--cbp-color-interactive-primary-darker); --cbp-button-color-bg-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-primary-lighter); --cbp-button-color-border-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-primary-lighter); } cbp-button[fill=solid][color=secondary] { --cbp-button-color-bg: var(--cbp-color-interactive-secondary-dark); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border: var(--cbp-color-interactive-secondary-dark); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-bg-dark: var(--cbp-color-interactive-secondary-light); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-dark: var(--cbp-color-interactive-secondary-light); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=solid][color=tertiary] { --cbp-button-color-bg: var(--cbp-color-interactive-secondary-base); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border: var(--cbp-color-interactive-secondary-base); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-dark: var(--cbp-color-text-lightest); --cbp-button-color-bg-dark: var(--cbp-color-interactive-secondary-base); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-dark: var(--cbp-color-interactive-secondary-base); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=solid][color=danger] { --cbp-button-color-bg: var(--cbp-color-danger-dark); --cbp-button-color-bg-hover: var(--cbp-color-danger-darker); --cbp-button-color-border: var(--cbp-color-danger-dark); --cbp-button-color-border-hover: var(--cbp-color-danger-darker); --cbp-button-color-bg-dark: var(--cbp-color-danger-light); --cbp-button-color-bg-hover-dark: var(--cbp-color-danger-lighter); --cbp-button-color-border-dark: var(--cbp-color-danger-light); --cbp-button-color-border-hover-dark: var(--cbp-color-danger-lighter); } cbp-button[fill=solid]:has(button:disabled), cbp-button[fill=solid]:has(a[aria-disabled=true]) { --cbp-button-color: var(--cbp-color-interactive-disabled-light); --cbp-button-color-hover: var(--cbp-button-color); --cbp-button-color-focus: var(--cbp-button-color); --cbp-button-color-active: var(--cbp-button-color); --cbp-button-color-bg: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-bg-hover: var(--cbp-button-color-bg); --cbp-button-color-bg-focus: var(--cbp-button-color-bg); --cbp-button-color-bg-active: var(--cbp-button-color-bg); --cbp-button-color-border: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-border-hover: var(--cbp-button-color-border); --cbp-button-color-border-focus: var(--cbp-button-color-border); --cbp-button-color-border-active: var(--cbp-button-color-border); --cbp-button-color-dark: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-hover-dark: var(--cbp-button-color-dark); --cbp-button-color-focus-dark: var(--cbp-button-color-dark); --cbp-button-color-active-dark: var(--cbp-button-color-dark); --cbp-button-color-bg-dark: var(--cbp-color-interactive-disabled-light); --cbp-button-color-bg-hover-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-bg-focus-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-bg-active-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-border-dark: var(--cbp-color-interactive-disabled-light); --cbp-button-color-border-hover-dark: var(--cbp-button-color-border-dark); --cbp-button-color-border-focus-dark: var(--cbp-button-color-border-dark); --cbp-button-color-border-active-dark: var(--cbp-button-color-border-dark); } cbp-button[fill=outline] { --cbp-button-color-bg: var(--cbp-color-white); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-bg-dark: var(--cbp-color-gray-cool-80); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); } cbp-button[fill=outline][color=primary] { --cbp-button-color: var(--cbp-color-interactive-primary-dark); --cbp-button-color-bg-hover: var(--cbp-color-interactive-primary-dark); --cbp-button-color-border: var(--cbp-color-interactive-primary-dark); --cbp-button-color-border-hover: var(--cbp-color-interactive-primary-dark); --cbp-button-color-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-border-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-primary-light); } cbp-button[fill=outline][color=secondary] { --cbp-button-color: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=outline][color=tertiary] { --cbp-button-color: var(--cbp-color-interactive-secondary-base); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border: var(--cbp-color-interactive-secondary-base); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-dark: var(--cbp-color-interactive-secondary-base); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-dark: var(--cbp-color-interactive-secondary-base); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=outline][color=danger] { --cbp-button-color: var(--cbp-color-danger-dark); --cbp-button-color-bg-hover: var(--cbp-color-danger-dark); --cbp-button-color-border: var(--cbp-color-danger-dark); --cbp-button-color-border-hover: var(--cbp-color-danger-darker); --cbp-button-color-dark: var(--cbp-color-danger-light); --cbp-button-color-bg-hover-dark: var(--cbp-color-danger-light); --cbp-button-color-border-dark: var(--cbp-color-danger-light); --cbp-button-color-border-hover-dark: var(--cbp-color-danger-light); } cbp-button[fill=outline]:has(button:disabled), cbp-button[fill=outline]:has(a[aria-disabled=true]) { --cbp-button-color: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-hover: var(--cbp-button-color); --cbp-button-color-focus: var(--cbp-button-color); --cbp-button-color-active: var(--cbp-button-color); --cbp-button-color-bg: var(--cbp-color-white); --cbp-button-color-bg-hover: var(--cbp-color-white); --cbp-button-color-bg-focus: var(--cbp-color-white); --cbp-button-color-bg-active: var(--cbp-color-white); --cbp-button-color-border: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-border-hover: var(--cbp-button-color-border); --cbp-button-color-border-focus: var(--cbp-button-color-border); --cbp-button-color-border-active: var(--cbp-button-color-border); --cbp-button-color-dark: var(--cbp-color-interactive-disabled-light); --cbp-button-color-hover-dark: var(--cbp-button-color-dark); --cbp-button-color-focus-dark: var(--cbp-button-color-dark); --cbp-button-color-active-dark: var(--cbp-button-color-dark); --cbp-button-color-bg-dark: var(--cbp-color-gray-cool-80); --cbp-button-color-bg-hover-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-bg-focus-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-bg-active-dark: var(--cbp-button-color-bg-dark); --cbp-button-color-border-dark: var(--cbp-color-interactive-disabled-light); --cbp-button-color-border-hover-dark: var(--cbp-button-color-border-dark); --cbp-button-color-border-focus-dark: var(--cbp-button-color-border-dark); --cbp-button-color-border-active-dark: var(--cbp-button-color-border-dark); } cbp-button[fill=ghost] { --cbp-button-color-bg: transparent; --cbp-button-color-border: transparent; --cbp-button-color-bg-dark: transparent; --cbp-button-color-border-dark: transparent; } cbp-button[fill=ghost][color=primary] { --cbp-button-color: var(--cbp-color-interactive-primary-dark); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-bg-hover: var(--cbp-color-interactive-primary-dark); --cbp-button-color-border-hover: var(--cbp-color-interactive-primary-dark); --cbp-button-color-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-primary-light); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-primary-light); } cbp-button[fill=ghost][color=secondary] { --cbp-button-color: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=ghost][color=tertiary] { --cbp-button-color: var(--cbp-color-interactive-secondary-base); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker); --cbp-button-color-dark: var(--cbp-color-interactive-secondary-light); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); --cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter); --cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter); } cbp-button[fill=ghost][color=danger] { --cbp-button-color: var(--cbp-color-danger-dark); --cbp-button-color-hover: var(--cbp-color-text-lightest); --cbp-button-color-bg-hover: var(--cbp-color-danger-dark); --cbp-button-color-border-hover: var(--cbp-color-danger-dark); --cbp-button-color-dark: var(--cbp-color-danger-light); --cbp-button-color-hover-dark: var(--cbp-color-text-darkest); --cbp-button-color-bg-hover-dark: var(--cbp-color-danger-light); --cbp-button-color-border-hover-dark: var(--cbp-color-danger-light); } cbp-button[fill=ghost]:has(button:disabled), cbp-button[fill=ghost]:has(a[aria-disabled=true]) { --cbp-button-color: var(--cbp-color-interactive-disabled-dark); --cbp-button-color-hover: var(--cbp-button-color); --cbp-button-color-focus: var(--cbp-button-color); --cbp-button-color-active: var(--cbp-button-color); --cbp-button-color-bg-hover: transparent; --cbp-button-color-bg-focus: transparent; --cbp-button-color-bg-active: transparent; --cbp-button-color-border-hover: transparent; --cbp-button-color-border-focus: transparent; --cbp-button-color-border-active: transparent; --cbp-button-color-dark: var(--cbp-color-interactive-disabled-light); --cbp-button-color-hover-dark: var(--cbp-button-color-dark); --cbp-button-color-focus-dark: var(--cbp-button-color-dark); --cbp-button-color-active-dark: var(--cbp-button-color-dark); --cbp-button-color-bg-hover-dark: transparent; --cbp-button-color-bg-focus-dark: transparent; --cbp-button-color-bg-active-dark: transparent; --cbp-button-color-border-hover-dark: transparent; --cbp-button-color-border-focus-dark: transparent; --cbp-button-color-border-active-dark: transparent; } cbp-button[variant=square] button, cbp-button[variant=square] a { --cbp-button-height: 2.25rem; --cbp-button-width: var(--cbp-button-height); padding: unset; letter-spacing: unset; } cbp-button[variant=cta] button, cbp-button[variant=cta] a { font-size: var(--cbp-font-size-heading-sm); padding-left: var(--cbp-space-4x); padding-right: var(--cbp-space-4x); min-height: 3.25rem; } cbp-button button:disabled, cbp-button a[aria-disabled=true] { font-style: italic; outline: 0; cursor: not-allowed; }