import { css } from '@tokenami/css';
// Shared focus ring for accessibility
const focusRing = css({
'--focus-visible_outline': 'var(--outline_focus)',
'--focus-visible_outline-offset': 2,
});
// Base interactive element
const interactive = css.compose({
'--cursor': 'pointer',
'--transition': 'var(--morph_colors)',
'--user-select': 'none',
});
// Button base
const buttonBase = css.compose({
includes: [interactive, focusRing],
'--display': 'inline-flex',
'--align-items': 'center',
'--justify-content': 'center',
'--border-radius': 'var(--radii_md)',
'--font-weight': 'var(--weight_medium)',
'--padding-inline': 4,
'--padding-block': 2,
});
// Primary button variant
const primaryButton = css.compose({
includes: [buttonBase],
'--background': 'var(--color_primary)',
'--color': 'var(--color_white)',
'--hover_background': 'var(--color_primary-dark)',
});
// Secondary button variant
const secondaryButton = css.compose({
includes: [buttonBase],
'--background': 'var(--color_gray2)',
'--color': 'var(--color_gray12)',
'--hover_background': 'var(--color_gray3)',
});
export function PrimaryButton(props) {
const [cn, css] = primaryButton();
return <button {...props} className={cn(props.className)} style={css(props.style)} />;
}
export function SecondaryButton(props) {
const [cn, css] = secondaryButton();
return <button {...props} className={cn(props.className)} style={css(props.style)} />;
}