UNPKG

@patreon/studio

Version:

Patreon Studio Design System

377 lines (318 loc) 13.5 kB
.root { align-items: center; background-color: var(--Button-backgroundColor); border: var(--Button-border); border-radius: var(--global-radius-md); box-shadow: var(--Button-boxShadow); box-sizing: border-box; color: var(--Button-foregroundColor); display: inline-flex; justify-content: center; outline-offset: 0; padding: var(--Button-padding); position: relative; text-decoration: none; transition: var(--global-transition-regular-easing) var(--global-transition-regular-duration); } .root:focus-visible { background-color: var(--Button-focusColor, var(--Button-backgroundHoverColor)); } .root:focus { border: var(--Button-border); } .root:focus:not(:focus-visible) { border: var(--Button-borderHover); outline: none; } .root[aria-disabled='true'] { opacity: var(--global-opacity-disabled); } .root.isActive:hover { background-color: var(--Button-backgroundHoverColor); border: var(--Button-borderHover); box-shadow: var(--Button-boxShadowHover); } .root.isActive:active { background-color: var(--Button-backgroundPressedColor); border: var(--Button-borderPressed); } .root.isInactive { cursor: not-allowed } .root.cornersPill { border-radius: var(--global-radius-pill); } .root.hasDimensions { max-height: var(--Button-dimension); min-height: var(--Button-dimension); } .root.hasDimensions.variantIconOnly { min-width: var(--Button-dimension); } /* Fluid */ .fluidSet { width: 100%; } .fluidUnset { width: auto; width: initial; } /* Themes */ .themePrimary.isFilled { --Button-foregroundColor: var(--component-button-onAction-default); --Button-backgroundColor: var(--component-button-action-default); --Button-backgroundHoverColor: var(--component-button-action-hover); --Button-backgroundPressedColor: var(--component-button-action-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } .themePrimary.isUnfilled { --Button-foregroundColor: var(--global-primary-action-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-primary-muted-hover); --Button-backgroundPressedColor: var(--global-primary-muted-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; --Button-focusColor: var(--global-primary-muted-default); } .themeSecondary.isFilled { --Button-foregroundColor: var(--global-primary-onMuted-default); --Button-backgroundColor: var(--global-secondary-action-default); --Button-backgroundHoverColor: var(--global-secondary-action-hover); --Button-backgroundPressedColor: var(--global-secondary-action-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } .themeSecondary.isUnfilled { --Button-foregroundColor: var(--global-primary-onMuted-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-secondary-muted-hover); --Button-backgroundPressedColor: var(--global-secondary-muted-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; --Button-focusColor: var(--global-secondary-muted-default); } .themeTertiary.isFilled { --Button-foregroundColor: var(--global-content-regular-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: 'transparent'; --Button-backgroundPressedColor: 'transparent'; --Button-border: var(--global-borderWidth-thin) solid var(--global-border-action-default); --Button-borderHover: var(--global-borderWidth-thin) solid var(--global-border-action-hover); --Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-border-action-pressed); } .themeTertiary.isUnfilled { --Button-foregroundColor: var(--global-content-muted-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-secondary-muted-hover); --Button-backgroundPressedColor: var(--global-secondary-muted-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; --Button-focusColor: var(--global-secondary-muted-default); } .themeCritical.isFilled { --Button-foregroundColor: var(--global-critical-onAction-default); --Button-backgroundColor: var(--global-critical-action-default); --Button-backgroundHoverColor: var(--global-critical-action-hover); --Button-backgroundPressedColor: var(--global-critical-action-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } .themeCritical.isUnfilled { --Button-foregroundColor: var(--global-critical-action-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-critical-muted-default); --Button-backgroundPressedColor: var(--global-critical-muted-hover); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } .themeFloating.isFilled { --Button-foregroundColor: var(--global-content-regular-default); --Button-backgroundColor: var(--global-bg-elevated-default); --Button-backgroundHoverColor: var(--global-bg-elevated-hover); --Button-backgroundPressedColor: var(--global-bg-elevated-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; --Button-boxShadow: var(--global-boxShadow-mid); } .themeFloating.isUnfilled { --Button-foregroundColor: var(--global-content-regular-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-bg-elevated-hover); --Button-backgroundPressedColor: var(--global-bg-elevated-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; --Button-boxShadowHover: var(--global-boxShadow-mid); } .themeInsetWhite.isFilled { --Button-foregroundColor: var(--global-constant-black-default); --Button-backgroundColor: var(--global-constant-white-default); --Button-backgroundHoverColor: var(--global-constant-white-hover); --Button-backgroundPressedColor: var(--global-constant-white-pressed); --Button-border: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-default); --Button-borderHover: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-hover); --Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-pressed); } .themeInsetWhite.isUnfilled { --Button-foregroundColor: var(--global-constant-white-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-constant-blackSubtle-hover); --Button-backgroundPressedColor: var(--global-constant-blackSubtle-pressed); --Button-border: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-default); --Button-borderHover: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-hover); --Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-pressed); } .themeInsetBlack.isFilled { --Button-foregroundColor: var(--global-constant-white-default); --Button-backgroundColor: var(--global-constant-blackMuted-default); --Button-backgroundHoverColor: var(--global-constant-blackMuted-hover); --Button-backgroundPressedColor: var(--global-constant-blackMuted-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } .themeInsetBlack.isUnfilled { --Button-foregroundColor: var(--global-constant-white-default); --Button-backgroundColor: 'transparent'; --Button-backgroundHoverColor: var(--global-constant-blackSubtle-hover); --Button-backgroundPressedColor: var(--global-constant-blackSubtle-pressed); --Button-border: var(--global-borderWidth-thin) solid transparent; --Button-borderHover: var(--global-borderWidth-thin) solid transparent; --Button-borderPressed: var(--global-borderWidth-thin) solid transparent; } /* Sizes */ .sizeXs { --Button-dimension: 32px; } .sizeXs.variantLabelOnly,.sizeXs.variantLabelAndIcon,.sizeXs.variantDisclosureAndLabel,.sizeXs.variantIconAndDisclosureOnly,.sizeXs.variantIconLabelAndDisclosure { --Button-padding: 0 8px; } .sizeSm { --Button-dimension: 36px; } .sizeSm.variantLabelOnly { --Button-padding: 0 18px; } .sizeSm.variantLabelAndIcon { --Button-padding: 0 18px 0 14px; } .sizeSm.variantDisclosureAndLabel { --Button-padding: 0 14px 0 18px; } .sizeSm.variantIconAndDisclosureOnly { --Button-padding: 0 8px; } .sizeSm.variantIconLabelAndDisclosure { --Button-padding: 0 14px; } .sizeMd { --Button-dimension: 44px; } .sizeMd.variantLabelOnly { --Button-padding: 0 20px; } .sizeMd.variantLabelAndIcon { --Button-padding: 0 20px 0 18px; } .sizeMd.variantDisclosureAndLabel { --Button-padding: 0 18px 0 20px; } .sizeMd.variantIconAndDisclosureOnly { --Button-padding: 0 10px; } .sizeMd.variantIconLabelAndDisclosure { --Button-padding: 0 18px; } .sizeLg { --Button-dimension: 64px; } .sizeLg.variantLabelOnly { --Button-padding: 0 34px; } .sizeLg.variantLabelAndIcon { --Button-padding: 0 34px 0 30px; } .sizeLg.variantDisclosureAndLabel { --Button-padding: 0 30px 0 34px; } .sizeLg.variantIconAndDisclosureOnly { --Button-padding: 0 20px; } .sizeLg.variantIconLabelAndDisclosure { --Button-padding: 0 30px; } /* Content container */ .contentContainer { align-items: center; -moz-column-gap: var(--global-space-x8); column-gap: var(--global-space-x8); display: flex; justify-content: center; margin: auto 0; padding: 0; visibility: visible; } .isLoading .contentContainer { visibility: hidden; } .hasTextAlign .contentContainer { width: 100%; } /* Label container */ .labelContainer { align-items: center; display: flex; flex-direction: column; height: 100%; justify-content: center; white-space: nowrap; } .hasTextAlign .labelContainer { flex-grow: 1; } .textAlignLeft .labelContainer { align-items: flex-start; } .textAlignRight .labelContainer { align-items: flex-end; } /* Loading spinner */ .loadingWrapper { align-items: center; display: flex; height: 100%; justify-content: center; left: 0; position: absolute; top: 0; width: 100%; z-index: 1; } @media (min-width: 588px) { .fluidSetBreakpointSm { width: 100%; } .fluidUnsetBreakpointSm { width: auto; width: initial; } .sizeXs { --Button-dimension: 28px; } .sizeSm { --Button-dimension: 32px; } .sizeSm.variantLabelOnly { --Button-padding: 0 16px; } .sizeSm.variantLabelAndIcon { --Button-padding: 0 16px 0 12px; } .sizeSm.variantDisclosureAndLabel { --Button-padding: 0 12px 0 16px; } .sizeSm.variantIconLabelAndDisclosure { --Button-padding: 0 12px; } .sizeMd { --Button-dimension: 40px; } .sizeMd.variantLabelAndIcon { --Button-padding: 0 20px 0 16px; } .sizeMd.variantDisclosureAndLabel { --Button-padding: 0 16px 0 20px; } .sizeMd.variantIconLabelAndDisclosure { --Button-padding: 0 16px; } .sizeLg { --Button-dimension: 52px; } .sizeLg.variantLabelOnly { --Button-padding: 0 24px; } .sizeLg.variantLabelAndIcon { --Button-padding: 0 24px 0 20px; } .sizeLg.variantDisclosureAndLabel { --Button-padding: 0 20px 0 24px; } .sizeLg.variantIconAndDisclosureOnly { --Button-padding: 0 14px; } .sizeLg.variantIconLabelAndDisclosure { --Button-padding: 0 20px; } } @media (min-width: 796px) { .fluidSetBreakpointMd { width: 100%; } .fluidUnsetBreakpointMd { width: auto; width: initial; } } @media (min-width: 978px) { .fluidSetBreakpointLg { width: 100%; } .fluidUnsetBreakpointLg { width: auto; width: initial; } } @media (min-width: 1280px) { .fluidSetBreakpointXl { width: 100%; } .fluidUnsetBreakpointXl { width: auto; width: initial; } } @media (min-width: 1440px) { .fluidSetBreakpointXxl { width: 100%; } .fluidUnsetBreakpointXxl { width: auto; width: initial; } }