@fluid-topics/ft-button
Version:
A generic Fluid Topics tag
479 lines (369 loc) • 21 kB
JavaScript
import { css, } from "lit";
import { noTextSelect, setVariable } from "@fluid-topics/ft-wc-utils";
import { FtRippleCssVariables } from "@fluid-topics/ft-ripple/build/ft-ripple.styles";
import { FtLoaderCssVariables } from "@fluid-topics/ft-loader/build/ft-loader.styles";
import { FtIconCssVariables } from "@fluid-topics/ft-icon/build/ft-icon.styles";
import { button } from "@fluid-topics/design-system-variables";
export { button as FtdsButtonCssVariables } from "@fluid-topics/design-system-variables";
//language=css
export const designSystemStyles = [
css `
:host {
display: inline-block;
max-width: 100%;
pointer-events: none;
}
/** Remove default button styles **/
.ft-button {
box-shadow: 0 0 0 transparent;
border: 0 solid transparent;
text-shadow: 0 0 0 transparent;
text-decoration: none;
}
.ft-button:hover {
box-shadow: 0 0 0 transparent;
text-shadow: 0 0 0 transparent;
}
.ft-button:active {
outline: none;
}
.ft-button:focus {
outline: 0;
}
/** Base styles **/
.ft-button {
position: relative;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
overflow: hidden;
box-sizing: border-box;
pointer-events: auto;
}
.ft-button:not([disabled]):hover {
cursor: pointer;
}
.ft-button:focus {
outline: none;
}
.ft-button:focus-visible {
outline-color: ${button.focusFocusRingColor};
outline-style: solid;
}
ft-icon {
flex-shrink: 0;
position: relative;
}
.ft-button:not(.ft-button--trailing-icon) ft-icon,
.ft-button:not(.ft-button--trailing-icon) ft-loader {
order: -1;
}
.ft-button--label {
position: relative;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
}
.ft-button--label[hidden] {
display: none;
}
.ft-button.ft-button--icon-only {
padding: unset;
border-radius: 50%;
}
/** Brand Primary styles **/
.ftds--family-brand.ft-button--primary {
${setVariable(FtLoaderCssVariables.color, button.primaryBrandIconColor)};
${setVariable(FtRippleCssVariables.color, button.primaryBrandStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.primaryBrandHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.primaryBrandFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.primaryBrandActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.primaryBrandActiveStateLayerOpacity)};
background-color: ${button.primaryBrandBackgroundColor};
color: ${button.primaryBrandColor};
border-style: none;
}
.ftds--family-brand.ft-button--primary[disabled] {
opacity: ${button.primaryBrandDisabledComponentOpacity};
}
.ftds--family-brand.ft-button--primary ft-icon {
color: ${button.primaryBrandIconColor};
}
/** Brand Secondary styles **/
.ftds--family-brand.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondaryBrandIconColor)};
${setVariable(FtRippleCssVariables.color, button.secondaryBrandStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondaryBrandHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondaryBrandFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondaryBrandActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondaryBrandActiveStateLayerOpacity)};
background-color: ${button.secondaryBrandBackgroundColor};
color: ${button.secondaryBrandColor};
border-color: ${button.secondaryBrandBorderColor};
border-style: solid;
}
.ftds--family-brand.ft-button--secondary[disabled] {
opacity: ${button.secondaryBrandDisabledComponentOpacity};
}
.ftds--family-brand.ft-button--secondary ft-icon {
color: ${button.secondaryBrandIconColor};
}
/** Brand Tertiary styles **/
.ftds--family-brand.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiaryBrandIconColor)};
${setVariable(FtRippleCssVariables.color, button.tertiaryBrandStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiaryBrandHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiaryBrandFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiaryBrandActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiaryBrandActiveStateLayerOpacity)};
background-color: ${button.tertiaryBrandBackgroundColor};
color: ${button.tertiaryBrandColor};
border-style: none;
}
.ftds--family-brand.ft-button--tertiary[disabled] {
opacity: ${button.tertiaryBrandDisabledComponentOpacity};
}
.ftds--family-brand.ft-button--tertiary ft-icon {
color: ${button.tertiaryBrandIconColor};
}
/** Neutral Secondary styles **/
.ftds--family-neutral.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondaryNeutralIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.secondaryNeutralStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondaryNeutralHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondaryNeutralFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondaryNeutralActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondaryNeutralActiveStateLayerOpacity)};
background-color: ${button.secondaryNeutralBackgroundColor};
color: ${button.secondaryNeutralColor};
border-color: ${button.secondaryNeutralBorderColor};
border-style: solid;
}
.ftds--family-neutral.ft-button--secondary[disabled] {
opacity: ${button.secondaryNeutralDisabledComponentOpacity};
}
.ftds--family-neutral.ft-button--secondary ft-icon {
color: ${button.secondaryNeutralIconColor};
}
/** Neutral Tertiary styles **/
.ftds--family-neutral.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiaryNeutralIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.tertiaryNeutralStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiaryNeutralHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiaryNeutralFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiaryNeutralActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiaryNeutralActiveStateLayerOpacity)};
background-color: ${button.tertiaryNeutralBackgroundColor};
color: ${button.tertiaryNeutralColor};
border-style: none;
}
.ftds--family-neutral.ft-button--tertiary[disabled] {
opacity: ${button.tertiaryNeutralDisabledComponentOpacity};
}
.ftds--family-neutral.ft-button--tertiary ft-icon {
color: ${button.tertiaryNeutralIconColor};
}
/** Info Secondary styles **/
.ftds--family-info.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondaryInfoIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.secondaryInfoStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondaryInfoHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondaryInfoFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondaryInfoActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondaryInfoActiveStateLayerOpacity)};
background-color: ${button.secondaryInfoBackgroundColor};
color: ${button.secondaryInfoColor};
border-color: ${button.secondaryInfoBorderColor};
border-style: solid;
}
.ftds--family-info.ft-button--secondary[disabled] {
opacity: ${button.secondaryInfoDisabledComponentOpacity};
}
.ftds--family-info.ft-button--secondary ft-icon {
color: ${button.secondaryInfoIconColor};
}
/** Info Tertiary styles **/
.ftds--family-info.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiaryInfoIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.tertiaryInfoStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiaryInfoHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiaryInfoFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiaryInfoActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiaryInfoActiveStateLayerOpacity)};
background-color: ${button.tertiaryInfoBackgroundColor};
color: ${button.tertiaryInfoColor};
border-style: none;
}
.ftds--family-info.ft-button--tertiary[disabled] {
opacity: ${button.tertiaryInfoDisabledComponentOpacity};
}
.ftds--family-info.ft-button--tertiary ft-icon {
color: ${button.tertiaryInfoIconColor};
}
/** Success Secondary styles **/
.ftds--family-success.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondarySuccessIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.secondarySuccessStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondarySuccessHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondarySuccessFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondarySuccessActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondarySuccessActiveStateLayerOpacity)};
background-color: ${button.secondarySuccessBackgroundColor};
color: ${button.secondarySuccessColor};
border-color: ${button.secondarySuccessBorderColor};
border-style: solid;
}
.ftds--family-success.ft-button--secondary[disabled] {
opacity: ${button.secondarySuccessDisabledComponentOpacity};
}
.ftds--family-success.ft-button--secondary ft-icon {
color: ${button.secondarySuccessIconColor};
}
/** Success Tertiary styles **/
.ftds--family-success.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiarySuccessIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.tertiarySuccessStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiarySuccessHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiarySuccessFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiarySuccessActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiarySuccessActiveStateLayerOpacity)};
background-color: ${button.tertiarySuccessBackgroundColor};
color: ${button.tertiarySuccessColor};
border-style: none;
}
.ftds--family-success.ft-button--tertiary[disabled] {
opacity: ${button.tertiarySuccessDisabledComponentOpacity};
}
.ftds--family-success.ft-button--tertiary ft-icon {
color: ${button.tertiarySuccessIconColor};
}
/** Warning Secondary styles **/
.ftds--family-warning.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondaryWarningIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.secondaryWarningStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondaryWarningHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondaryWarningFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondaryWarningActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondaryWarningActiveStateLayerOpacity)};
background-color: ${button.secondaryWarningBackgroundColor};
color: ${button.secondaryWarningColor};
border-color: ${button.secondaryWarningBorderColor};
border-style: solid;
}
.ftds--family-warning.ft-button--secondary[disabled] {
opacity: ${button.secondaryWarningDisabledComponentOpacity};
}
.ftds--family-warning.ft-button--secondary ft-icon {
color: ${button.secondaryWarningIconColor};
}
/** Warning Tertiary styles **/
.ftds--family-warning.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiaryWarningIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.tertiaryWarningStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiaryWarningHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiaryWarningFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiaryWarningActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiaryWarningActiveStateLayerOpacity)};
background-color: ${button.tertiaryWarningBackgroundColor};
color: ${button.tertiaryWarningColor};
border-style: none;
}
.ftds--family-warning.ft-button--tertiary[disabled] {
opacity: ${button.tertiaryWarningDisabledComponentOpacity};
}
.ftds--family-warning.ft-button--tertiary ft-icon {
color: ${button.tertiaryWarningIconColor};
}
/** Error Secondary styles **/
.ftds--family-error.ft-button--secondary {
${setVariable(FtLoaderCssVariables.color, button.secondaryErrorIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.secondaryErrorStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.secondaryErrorHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.secondaryErrorFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.secondaryErrorActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.secondaryErrorActiveStateLayerOpacity)};
background-color: ${button.secondaryErrorBackgroundColor};
color: ${button.secondaryErrorColor};
border-color: ${button.secondaryErrorBorderColor};
border-style: solid;
}
.ftds--family-error.ft-button--secondary[disabled] {
opacity: ${button.secondaryErrorDisabledComponentOpacity};
}
.ftds--family-error.ft-button--secondary ft-icon {
color: ${button.secondaryErrorIconColor};
}
/** Error Tertiary styles **/
.ftds--family-error.ft-button--tertiary {
${setVariable(FtLoaderCssVariables.color, button.tertiaryErrorIconColor)};
${setVariable(FtRippleCssVariables.backgroundColor, button.tertiaryErrorStateLayerColor)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceHover, button.tertiaryErrorHoverStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceFocused, button.tertiaryErrorFocusStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfaceSelected, button.tertiaryErrorActiveStateLayerOpacity)};
${setVariable(FtRippleCssVariables.opacityContentOnSurfacePressed, button.tertiaryErrorActiveStateLayerOpacity)};
background-color: ${button.tertiaryErrorBackgroundColor};
color: ${button.tertiaryErrorColor};
border-style: none;
}
.ftds--family-error.ft-button--tertiary[disabled] {
opacity: ${button.tertiaryErrorDisabledComponentOpacity};
}
.ftds--family-error.ft-button--tertiary ft-icon {
color: ${button.tertiaryErrorIconColor};
}
/** Large styles **/
.ftds--size-large {
${setVariable(FtIconCssVariables.size, button.largeIconSize)};
${setVariable(FtLoaderCssVariables.size, button.largeIconSize)};
height: ${button.largeHeight};
padding: 0 ${button.largeHorizontalPadding};
gap: ${button.largeGap};
border-radius: ${button.largeBorderRadius};
border-width: ${button.largeBorderWidth};
}
.ftds--size-large:focus-visible {
outline-width: ${button.largeFocusOutlineWidth};
outline-offset: ${button.largeFocusOutlineOffset};
}
.ftds--size-large.ft-button--icon-only {
width: ${button.largeIconOnlyWidth};
}
/** Small styles **/
.ftds--size-medium {
${setVariable(FtIconCssVariables.size, button.mediumIconSize)};
${setVariable(FtLoaderCssVariables.size, button.mediumIconSize)};
height: ${button.mediumHeight};
padding: 0 ${button.mediumHorizontalPadding};
gap: ${button.mediumGap};
border-radius: ${button.mediumBorderRadius};
border-width: ${button.mediumBorderWidth};
}
.ftds--size-medium:focus-visible {
outline-width: ${button.mediumFocusOutlineWidth};
outline-offset: ${button.mediumFocusOutlineOffset};
}
.ftds--size-medium.ft-button--icon-only {
width: ${button.mediumIconOnlyWidth};
}
/** Small styles **/
.ftds--size-small {
${setVariable(FtIconCssVariables.size, button.smallIconSize)};
${setVariable(FtLoaderCssVariables.size, button.smallIconSize)};
height: ${button.smallHeight};
padding: 0 ${button.smallHorizontalPadding};
gap: ${button.smallGap};
border-radius: ${button.smallBorderRadius};
border-width: ${button.smallBorderWidth};
}
.ftds--size-small:focus-visible {
outline-width: ${button.smallFocusOutlineWidth};
outline-offset: ${button.smallFocusOutlineOffset};
}
.ftds--size-small.ft-button--icon-only {
width: ${button.smallIconOnlyWidth};
}
`,
noTextSelect
];