/* ToggleSwitch */ /* Catalyst in dotcom applies a display: block to all web component elements. This ** rule overrides it so the status label and toggle switch are laid out correctly. */ .ToggleSwitch.ToggleSwitch { display: inline-flex; } .ToggleSwitch { align-items: center; display: inline-flex; gap: var(--primer-controlStack-medium-gap-condensed, 8px); } .ToggleSwitch--checked { & .ToggleSwitch-statusOn { height: auto; visibility: visible; } & .ToggleSwitch-statusOff { height: 0; visibility: hidden; } } .ToggleSwitch-track { position: relative; display: block; width: var(--base-size-64, 64px); height: var(--primer-control-medium-size, 32px); padding: 0; overflow: hidden; text-decoration: none; cursor: pointer; user-select: none; background-color: var(--color-switch-track-bg); border: var(--primer-borderWidth-thin, 1px) solid var(--color-switch-track-border); border-radius: var(--primer-borderRadius-medium, 6px); transition-timing-function: cubic-bezier(0.5, 1, 0.89, 1); transition-duration: 80ms; transition-property: background-color, border-color; appearance: none; &:focus, &:focus-visible { outline-offset: 1px; } &:hover { background-color: var(--color-switch-track-hover-bg); } &:active { background-color: var(--color-switch-track-active-bg); } @media (pointer: coarse) { &::before { @mixin minTouchTarget 44px; } } @media (prefers-reduced-motion) { transition: none; & * { transition: none; } } } .ToggleSwitch-track[aria-checked='true'][aria-disabled='true'] { background-color: var(--color-switch-track-disabled-bg); color: var(--color-switch-track-checked-disabled-fg); border-color: transparent; } .ToggleSwitch-track[aria-checked='true'] { background-color: var(--color-switch-track-checked-bg); border-color: var(--color-switch-track-checked-border); &:not([aria-disabled='true']) { &:hover { background-color: var(--color-switch-track-checked-hover-bg); } &:active { background-color: var(--color-switch-track-checked-active-bg); } } & .ToggleSwitch-knob { background-color: var(--color-switch-knob-checked-bg); border-color: var(--color-switch-knob-checked-border); transform: translateX(100%); } & .ToggleSwitch-lineIcon { transform: translateX(0%); } & .ToggleSwitch-circleIcon { transform: translateX(100%); } } .ToggleSwitch-track[aria-disabled='true'] { cursor: not-allowed; background-color: var(--color-switch-track-disabled-bg); border-color: transparent; transition-property: none; & .ToggleSwitch-knob { border-color: var(--color-border-default); box-shadow: none; } & .ToggleSwitch-lineIcon { color: var(--color-switch-track-disabled-fg); } & .ToggleSwitch-circleIcon { color: var(--color-switch-track-disabled-fg); } } .ToggleSwitch-icons { display: flex; align-items: center; width: 100%; height: 100%; overflow: hidden; } .ToggleSwitch-lineIcon { line-height: 0; color: var(--color-switch-track-checked-fg); transition-duration: 80ms; transition-property: transform; transform: translateX(-100%); flex: 1 0 50%; } .ToggleSwitch-circleIcon { line-height: 0; color: var(--color-switch-track-fg); transition-duration: 80ms; transition-property: transform; transform: translateX(0); flex: 1 0 50%; } .ToggleSwitch-knob { position: absolute; top: 0; bottom: 0; z-index: 1; width: 50%; background-color: var(--color-switch-knob-bg); border: var(--primer-borderWidth-thin, 1px) solid var(--color-switch-knob-border); border-radius: var(--primer-borderRadius-medium, 6px); box-shadow: var(--color-shadow-medium), var(--color-btn-inset-shadow); transition-timing-function: cubic-bezier(0.5, 1, 0.89, 1); transition-duration: 80ms; transition-property: transform; @media (prefers-reduced-motion) { transition: none; } } .ToggleSwitch-status { position: relative; font-size: var(--primer-text-body-size-medium, 14px); line-height: 1.5; color: var(--color-fg-default); text-align: right; } .ToggleSwitch-statusIcon { width: var(--base-size-16, 16px); display: flex; margin-top: 0.063rem; } .ToggleSwitch--small { & .ToggleSwitch-status { font-size: var(--primer-text-body-size-small, 12px); } & .ToggleSwitch-track { width: var(--base-size-48, 48px); height: var(--primer-control-xsmall-size, 24px); } } .ToggleSwitch--disabled { & .ToggleSwitch-status { color: var(--color-fg-muted); } } .ToggleSwitch-statusOn { height: 0; visibility: hidden; } .ToggleSwitch-statusOff { height: auto; visibility: visible; } .ToggleSwitch--statusAtEnd { flex-direction: row-reverse; & .ToggleSwitch-status { text-align: left; } }