UNPKG

@dialpad/dialtone-css

Version:

Dialpad's design system

205 lines (171 loc) 6.55 kB
// // DIALTONE // COMPONENTS: TABS // // These are tab classes for Dialpad's design system Dialtone. // For further documentation of these and other classes, // visit https://dialtone.dialpad.com/components/tabs // // TABLE OF CONTENTS // • BASE STYLE // • ALTERNATE STYLES // // ============================================================================ // $ WRAPPERS // ---------------------------------------------------------------------------- .d-tablist { // -- COMPONENT CSS VARS // ------------------------------------------------------------------------ --tab-color-background: var(--dt-action-color-background-base-default); --tab-color-text: var(--dt-action-color-foreground-muted-default); --tab-font-style: var(--dt-typography-button-md); --tab-border-radius: var(--dt-button-size-radius-md); --tab-padding-x: calc(var(--dt-space-450) - var(--dt-size-border-100)); --tab-padding-y: calc(var(--dt-space-400) - var(--dt-size-border-100)); position: relative; display: flex; flex-wrap: wrap; gap: var(--dt-space-300); align-items: baseline; &:focus { outline: 0; } // Add a bottom border unless no border is requested &:not(.d-tablist--no-border)::after { position: absolute; inset-inline: 0; inset-block-end: 0; z-index: var(--zi-base1); block-size: var(--dt-size-border-100); background-color: var(--dt-color-border-default); content: ''; } } // ============================================================================ // $ BASE STYLE // ---------------------------------------------------------------------------- .d-tab { position: relative; display: inline-flex; gap: var(--dt-space-400); align-items: center; justify-content: center; box-sizing: border-box; padding: var(--tab-padding-y) var(--tab-padding-x); color: var(--tab-color-text); font: var(--tab-font-style); background-color: var(--tab-color-background); border: var(--dt-size-border-100) solid transparent; border-radius: var(--tab-border-radius) var(--tab-border-radius) 0 0; cursor: pointer; transition-timing-function: var(--ttf-out-quint); transition-duration: var(--td100); transition-property: background-color, border, color, box-shadow; fill: currentColor; .d-tablist--no-border &:not(.d-tab--selected) { border-radius: var(--tab-border-radius); } &:first-of-type { margin-inline-start: 0; } &:last-of-type { margin-inline-end: 0; } &::after { position: absolute; block-size: var(--dt-size-border-200); background-color: var(--tab-color-background); content: ''; inset-inline: var(--dt-size-100-negative) var(--dt-size-100-negative); inset-block-end: var(--dt-size-100-negative); .d-tablist--no-border & { background-color: transparent; } } &:focus-visible { outline: none; box-shadow: var(--dt-shadow-focus-inset); } &:disabled { --tab-color-text: var(--dt-action-color-foreground-disabled-default); cursor: not-allowed; } &:not(:disabled):hover { --tab-color-background: var(--dt-action-color-background-muted-hover); --tab-color-text: var(--dt-action-color-foreground-muted-hover); } &:not(:disabled):active { --tab-color-background: var(--dt-action-color-background-muted-active); --tab-color-text: var(--dt-action-color-foreground-muted-active); } // Turn off animations if someone doesn't want them. @media (prefers-reduced-motion) { transition: none; } // ============================================================================ // $ SIZES // ---------------------------------------------------------------------------- .d-tablist--sm & { --tab-padding-x: calc(var(--dt-space-400) - var(--dt-size-border-100)); --tab-border-radius: var(--dt-button-size-radius-xs); --tab-font-style: var(--dt-typography-button-xs); .d-tablist--no-border &:not(.d-tab--selected) { border-radius: var(--tab-border-radius); } } } // ============================================================================ // $ SELECTED STYLE // ---------------------------------------------------------------------------- .d-tab--selected { --tab-color-text: var(--dt-action-color-foreground-base-default); z-index: var(--zi-selected); &:not(:disabled):hover { --tab-color-background: var(--dt-action-color-background-base-hover); --tab-color-text: var(--dt-action-color-foreground-base-hover); } &:not(:disabled):active { --tab-color-background: var(--dt-action-color-background-base-active); --tab-color-text: var(--dt-action-color-foreground-base-active); } &::after, &:hover::after { --tab-color-background: var(--dt-action-color-foreground-base-default); .d-tablist--no-border & { background-color: var(--tab-color-background); } } } // ============================================================================ // $ INVERTED STYLE // ---------------------------------------------------------------------------- .d-tablist--inverted { --tab-color-text: var(--dt-action-color-foreground-inverted-default); &::after { background-color: var(--dt-color-border-moderate-inverted); } &:not(.d-tablist--no-border)::after { background-color: var(--dt-color-foreground-primary-inverted); } .d-tab { --tab-color-text: var(--dt-action-color-foreground-inverted-default); &:not(:disabled):hover { --tab-color-text: var(--dt-action-color-foreground-inverted-hover); --tab-color-background: var(--dt-action-color-background-inverted-hover); } &:not(:disabled):active { --tab-color-text: var(--dt-action-color-foreground-inverted-active); --tab-color-background: var(--dt-action-color-background-inverted-active); } &:disabled { --tab-color-text: var(--dt-action-color-foreground-disabled-default); cursor: not-allowed; } } .d-tab--selected { --tab-color-text: var(--dt-action-color-foreground-inverted-default); &::after { --tab-color-background: currentColor; } } }