Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 72 additions & 19 deletions packages/eds-core-react/src/components/next/Button/button.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,23 @@
--_label-height: round(1cap, 4px);
--captured-size-2: var(--_label-height); /* capture cap-height before SVG overrides font-size */
--_font-family: var(--eds-typography-ui-body-font-family);
--_color: var(--eds-color-text-strong-on-emphasis);
--_bg-color: var(--eds-color-bg-fill-emphasis-default);

/* Colours from the eds-tokens beta (Tokens Studio) semantic interactive
* group. The --_ indirection only exists so data-color-appearance can
* switch the accent/neutral/danger token set — states read these vars.
* The text-interactive group deliberately has no neutral variant:
* neutral interactive text uses --eds-text-primary by design (#5283). */
--_bg-emphasis: var(--eds-background-interactive-accent-emphasis-default);
--_bg-emphasis-hover: var(--eds-background-interactive-accent-emphasis-hover);
--_bg-emphasis-pressed: var(
--eds-background-interactive-accent-emphasis-pressed
);
--_bg-muted-hover: var(--eds-background-interactive-accent-muted-hover);
--_bg-muted-pressed: var(--eds-background-interactive-accent-muted-pressed);
--_text-interactive: var(--eds-text-interactive-accent-default);
--_border-interactive: var(--eds-border-interactive-accent-emphasis-default);
--_color: var(--eds-text-on-emphasis);
--_bg-color: var(--_bg-emphasis);
--_padding-block: var(--eds-selectable-space-vertical);

cursor: pointer;
Expand Down Expand Up @@ -85,6 +100,43 @@
}
}

/* ===== TONES ===== */
/* The tone prop sets data-color-appearance on the button itself */

.eds-button[data-color-appearance='neutral'] {
--_bg-emphasis: var(--eds-background-interactive-neutral-emphasis-default);
--_bg-emphasis-hover: var(
--eds-background-interactive-neutral-emphasis-hover
);
--_bg-emphasis-pressed: var(
--eds-background-interactive-neutral-emphasis-pressed
);
--_bg-muted-hover: var(--eds-background-interactive-neutral-muted-hover);
--_bg-muted-pressed: var(
--eds-background-interactive-neutral-muted-pressed
);
--_text-interactive: var(--eds-text-primary);
--_border-interactive: var(
--eds-border-interactive-neutral-emphasis-default
);
}

.eds-button[data-color-appearance='danger'] {
--_bg-emphasis: var(--eds-background-interactive-danger-emphasis-default);
--_bg-emphasis-hover: var(
--eds-background-interactive-danger-emphasis-hover
);
--_bg-emphasis-pressed: var(
--eds-background-interactive-danger-emphasis-pressed
);
--_bg-muted-hover: var(--eds-background-interactive-danger-muted-hover);
--_bg-muted-pressed: var(--eds-background-interactive-danger-muted-pressed);
--_text-interactive: var(--eds-text-interactive-danger-default);
--_border-interactive: var(
--eds-border-interactive-danger-emphasis-default
);
}

/* ===== SIZE VARIANTS ===== */
/* Font size and line-height scale with data-selectable-space.
* Button height is derived from padding-block + line-height.
Expand Down Expand Up @@ -113,42 +165,42 @@
/* ===== PRIMARY VARIANT ===== */

.eds-button[data-variant='primary'] {
--_color: var(--eds-color-text-strong-on-emphasis);
--_bg-color: var(--eds-color-bg-fill-emphasis-default);
--_color: var(--eds-text-on-emphasis);
--_bg-color: var(--_bg-emphasis);
}

.eds-button[data-variant='primary']:disabled {
--_bg-color: var(--eds-color-bg-fill-emphasis-disabled);
--_color: var(--eds-color-text-disabled);
--_bg-color: var(--eds-background-interactive-disabled);
--_color: var(--eds-text-interactive-disabled);

cursor: not-allowed;
}

.eds-button[data-variant='primary']:hover:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-emphasis-hover);
--_bg-color: var(--_bg-emphasis-hover);
}

.eds-button[data-variant='primary']:active:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-emphasis-active);
--_bg-color: var(--_bg-emphasis-pressed);
}

/* ===== SECONDARY VARIANT ===== */

.eds-button[data-variant='secondary'] {
--_color: var(--eds-color-text-subtle);
--_color: var(--_text-interactive);
--_bg-color: transparent;

outline: var(--eds-border-width-default, 1px) solid
var(--eds-color-border-strong);
var(--_border-interactive);
outline-offset: calc(-1 * var(--eds-border-width-default, 1px));
}

.eds-button[data-variant='secondary']:disabled {
--_color: var(--eds-color-text-disabled);
--_color: var(--eds-text-interactive-disabled);

cursor: not-allowed;
outline: var(--eds-border-width-default, 1px) solid
var(--eds-color-border-disabled);
var(--eds-border-interactive-disabled);
outline-offset: calc(-1 * var(--eds-border-width-default, 1px));
}

Expand All @@ -157,38 +209,39 @@
}

.eds-button[data-variant='secondary']:hover:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-muted-default);
--_bg-color: var(--_bg-muted-hover);
}

.eds-button[data-variant='secondary']:active:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-muted-hover);
--_bg-color: var(--_bg-muted-pressed);
}

/* ===== GHOST VARIANT ===== */

.eds-button[data-variant='ghost'] {
--_color: var(--eds-color-text-subtle);
--_color: var(--_text-interactive);
--_bg-color: transparent;
}

.eds-button[data-variant='ghost']:disabled {
--_color: var(--eds-color-text-disabled);
--_color: var(--eds-text-interactive-disabled);

cursor: not-allowed;
}

.eds-button[data-variant='ghost']:hover:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-muted-default);
--_bg-color: var(--_bg-muted-hover);
}

.eds-button[data-variant='ghost']:active:not(:disabled) {
--_bg-color: var(--eds-color-bg-fill-muted-hover);
--_bg-color: var(--_bg-muted-pressed);
}

/* ===== FOCUS STATE ===== */

.eds-button:focus-visible {
outline: var(--eds-sizing-stroke-thick) solid var(--eds-color-border-focus);
outline: var(--eds-sizing-stroke-thick) solid
var(--eds-border-interactive-focus);
outline-offset: var(--eds-sizing-stroke-thin);
}

Expand Down
Loading