UNPKG

@aegisjsproject/styles

Version:

Pre-made and reusable styles for `@aegisjsproject/core`

536 lines (444 loc) 15.9 kB
import { css } from '@aegisjsproject/parsers/css.js'; import { blue, green, red, yellow, gray, cyan } from './palette/bootstrap.js'; import { SUPPORTS_CUSTOM_STATES } from './consts.js'; import { colorLight, colorDark, btnPrimary, btnPrimaryActive, btnSecondary, btnSecondaryActive, btnSecondaryHover, btnPrimaryHover, btnDisabled, btnSuccess, btnSuccessActive, btnSuccessHover, btnDanger, btnDangerActive, btnDangerHover, btnWarning, btnWarningActive, btnWarningHover, btnInfo, btnInfoHover, btnInfoActive, btnLight, btnLightHover, btnLightActive, btnDark, btnDarkHover, btnDarkActive, btnLink, btnLinkHover, btnLinkActive, linkColor, } from './palette/aegis.js'; const DISABLED_STATE = SUPPORTS_CUSTOM_STATES ? ':state(disabled)' : '._state--disabled'; const DISABLED = `:disabled, .disabled, ${DISABLED_STATE}`; const LAYER = 'components.aegisjsproject.button'; export const btn = css`@layer ${LAYER} { .btn:not([hidden]) { cursor: pointer; display: inline-block; padding: 0.6em 1.3em; border-width: var(--aegis-btn-border-width, 0px); border-style: solid; appearance: button; line-height: 1.5; text-align: center; vertical-align: middle; font-family: inherit; font-size: 1rem; border-radius: var(--aegis-btn-border-radius, 5px); text-decoration: none; transition: background-color 150ms ease-in-out, border-color 150ms ease-in-out, color 150ms ease-in-out; } .btn${DISABLED} { pointer-events: none; } .btn.btn-sm { padding: 0.5em 1em; font-size: 0.7rem; } .btn.btn-lg { padding: 0.5em 1.1em; font-size: 1.3rem; } .btn.btn-block { display: block; width: 100%; } .btn:disabled:not(.btn-system, .btn-system-accent), .btn.disabled:not(.btn-system, .btn-system-accent), .btn${DISABLED} { cursor: not-allowed; opacity: var(--aegis-btn-disabled-opacity, 0.65); filter: saturate(var(--aegis-btn-disabled-saturation, 50%)) brightness(var(--aegis-btn-disabled-brightness, 90%)); } .btn.disabled, .btn${DISABLED_STATE} { pointer-events: none; } .btn:focus-visible { outline: 2px solid; outline-offset: 2px; } }`; const system = css`@layer ${LAYER} { .btn.btn-system { background-color: ButtonFace; color: ButtonText; border-color: hsl(from ButtonFace h s calc(l - 0.2)); } .btn.btn-system:hover { background-color: hsl(from ButtonFace h s calc(l * 1.1)); border-color: hsl(from ButtonFace h s calc(l * 1.1)); } .btn.btn-system:focus-visible { background-color: hsl(from ButtonFace h calc(s * 1.05) calc(l * 1.05)); border-color: hsl(from ButtonFace h calc(s * 1.05) calc(l * 1.05)); outline: 2px solid ButtonText; outline-offset: 2px; } .btn.btn-system:active { background-color: hsl(from ButtonFace h s calc(l * 0.8)); border-color: hsl(from ButtonFace h s calc(l * 0.8)); } .btn.btn-system:disabled, .btn.btn-system.disabled, .btn.btn-system${DISABLED_STATE} { background-color: hsl(from ButtonFace h calc(s * 0.2) l); border-color: hsl(from ButtonFace h calc(s * 0.2) l); color: GrayText; } }`; const systemAccent = css`@layer ${LAYER} { .btn.btn-system-accent { background-color: AccentColor; color: AccentColorText; border-color: hsl(from AccentColor h s calc(l - 0.2)); } .btn.btn-system-accent:hover { background-color: hsl(from AccentColor h s calc(l * 1.1)); border-color: hsl(from AccentColor h s calc(l * 1.1)); } .btn.btn-system-accent:focus-visible { background-color: hsl(from AccentColor h calc(s * 1.05) calc(l * 1.05)); border-color: hsl(from AccentColor h calc(s * 1.05) calc(l * 1.05)); outline: 2px solid hsl(from AccentColor h s calc(l - 0.3)); outline-offset: 2px; } .btn.btn-system-accent:active { background-color: hsl(from AccentColor h s calc(l * 0.8)); border-color: hsl(from AccentColor h s calc(l * 0.8)); } .btn.btn-system-accent:disabled, .btn.btn-system-accent.disabled, .btn.btn-system${DISABLED_STATE} { background-color: hsl(from AccentColor h calc(s * 0.2) l); border-color: hsl(from AccentColor h calc(s * 0.2) l); color: GrayText; } }`; const primary = css`@layer ${LAYER} { .btn.btn-primary { background-color: var(--aegis-btn-primary, ${btnPrimary}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${blue[6]}; } .btn.btn-primary:hover:not(${DISABLED}), .btn.btn-primary:focus-visible { background-color: var(--aegis-btn-primary-hover, ${btnPrimaryHover}); border-color: ${blue[7]}; } .btn.btn-primary:focus-visible { outline-color: var(--aegis-btn-primary, ${btnPrimary}); } .btn.btn-primary:active { background-color: var(--aegis-btn-primary-active, ${btnPrimaryActive}); border-color: ${blue[8]}; } }`; export const btnOutlinePrimary = css`@layer ${LAYER} { .btn.btn-outline-primary { background-color: transparent; color: var(--aegis-btn-primary, ${btnPrimary}); border-color: currentColor; } .btn.btn-outline-primary:focus-visible { outline-color: var(--aegis-btn-primary, ${btnPrimary}); } .btn.btn-outline-primary:hover:not(${DISABLED}), .btn.btn-outline-primary:focus-visible { background-color: var(--aegis-btn-primary-hover, ${btnPrimaryHover}); border-color: ${blue[7]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-primary:active { background-color: var(--aegis-btn-primary-active, ${btnPrimaryActive}); border-color: ${blue[8]}; color: var(--aegis-color-dark, ${colorDark}); } }`; const secondary = css`@layer ${LAYER} { .btn.btn-secondary { background-color: var(--aegis-btn-secondary, ${btnSecondary}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${gray[7]}; } .btn.btn-secondary:hover:not(${DISABLED}), .btn.btn-secondary:focus-visible { background-color: var(--aegis-btn-secondary-hover, ${btnSecondaryHover}); border-color: ${gray[8]}; } .btn.btn-secondary:focus-visible { outline-color: var(--aegis-btn-secondary, ${btnSecondary}); } .btn.btn-secondary:active { background-color: var(--aegis-btn-secondary-active, ${btnSecondaryActive}); border-color: ${gray[8]}; } }`; export const btnOutlineSecondary = css`@layer ${LAYER} { .btn.btn-outline-secondary { background-color: transparent; color: var(--aegis-btn-secondary, ${btnSecondary}); border-color: currentColor; } .btn.btn-outline-secondary:hover:not(${DISABLED}), .btn.btn-outline-secondary:focus-visible { background-color: var(--aegis-btn-secondary-hover, ${btnSecondaryHover}); border-color: ${gray[8]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-secondary:focus-visible { outline-color: var(--aegis-btn-secondary, ${btnSecondary}); } .btn.btn-outline-secondary:active { background-color: var(--aegis-btn-secondary-active, ${btnSecondaryActive}); border-color: ${gray[8]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-secondary:disabled, .btn.btn-outline-secondary.disabled, .btn.btn-outline-seconday${DISABLED_STATE} { color: var(--aegis-btn-active-disabled, ${btnDisabled}); } }`; const success = css`@layer ${LAYER} { .btn.btn-success { background-color: var(--aegis-btn-success, ${btnSuccess}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${green[6]}; } .btn.btn-success:hover:not(${DISABLED}), .btn.btn-success:focus-visible { background-color: var(--aegis-btn-success-hover, ${btnSuccessHover}); border-color: ${green[7]}; } .btn.btn-success:focus-visible { outline-color: var(--aegis-btn-success, ${btnSuccess}); } .btn.btn-success:active { background-color: var(--aegis-btn-success-active, ${btnSuccessActive}); border-color: ${green[8]}; } }`; export const btnOutlineSuccess = css`@layer ${LAYER} { .btn.btn-outline-success { background-color: transparent; color: var(--aegis-btn-success, ${btnSuccess}); border-color: currentColor; } .btn.btn-outline-success:hover:not(${DISABLED}), .btn.btn-outline-success:focus-visible { background-color: var(--aegis-btn-success-hover, ${btnSuccessHover}); border-color: ${green[7]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-success:focus-visible { outline-color: var(--aegis-btn-success, ${btnSuccess}); } .btn.btn-outline-success:active { background-color: var(--aegis-btn-success-active, ${btnSuccessActive}); border-color: ${green[8]}; color: var(--aegis-color-dark, ${colorDark}); } }`; const info = css`@layer ${LAYER} { .btn.btn-info { background-color: var(--aegis-btn-info, ${btnInfo}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${cyan[6]}; } .btn.btn-info:not(${DISABLED}), .btn.btn-info:focus-visible { background-color: var(--aegis-btn-info-hover, ${btnInfoHover}); border-color: ${cyan[7]}; } .btn.btn-info:focus-visible { outline-color: var(--aegis-btn-info, ${btnInfo}); } .btn.btn-info:active { background-color: var(--aegis-btn-info-active, ${btnInfoActive}); border-color: ${cyan[8]}; } }`; export const btnOutlineInfo = css`@layer ${LAYER} { .btn.btn-outline-info { background-color: transparent; color: var(--aegis-btn-info, ${btnInfo}); border-color: currentColor; } .btn.btn-outline-info:hover:not(${DISABLED}), .btn.btn-outline-info:focus-visible { background-color: var(--aegis-btn-info-hover, ${btnInfoHover}); border-color: ${cyan[7]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-info:focus-visible { outline-color: var(--aegis-btn-info, ${btnInfo}); } .btn.btn-outline-info:active { background-color: var(--aegis-btn-info-active, ${btnInfoActive}); border-color: ${cyan[8]}; color: var(--aegis-color-dark, ${colorDark}); } }`; const danger = css`@layer ${LAYER} { .btn.btn-danger { background-color: var(--aegis-btn-danger, ${btnDanger}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${red[6]}; } .btn.btn-danger:hover:not(${DISABLED}), .btn.btn-danger:focus-visible { background-color: var(--aegis-btn-danger-hover, ${btnDangerHover}); border-color: ${red[7]}; } .btn.btn-danger:focus-visible { outline-color: var(--aegis-btn-danger, ${btnDanger}); } .btn.btn-danger:active { background-color: var(--aegis-btn-danger-active, ${btnDangerActive}); border-color: ${red[8]}; } }`; export const btnOutlineDanger = css`@layer ${LAYER} { .btn.btn-outline-danger { background-color: transparent; color: var(--aegis-btn-danger, ${btnDanger}); border-color: currentColor; } .btn.btn-outline-danger:hover:not(${DISABLED}), .btn.btn-outline-danger:focus-visible { background-color: var(--aegis-btn-danger-hover, ${btnDangerHover}); border-color: ${red[7]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-danger:focus-visible { outline-color: var(--aegis-btn-danger, ${btnDanger}); } .btn.btn-outline-danger:active { background-color: var(--aegis-btn-danger-active, ${btnDangerActive}); border-color: ${red[8]}; color: var(--aegis-color-dark, ${colorDark}); } }`; const warning = css`@layer ${LAYER} { .btn.btn-warning { background-color: var(--aegis-btn-warning, ${btnWarning}); color: var(--aegis-color-light, ${colorLight}); border-color: ${yellow[6]}; } .btn.btn-warning:hover:not(${DISABLED}), .btn.btn-warning:focus-visible { background-color: var(--aegis-btn-warning-hover, ${btnWarningHover}); border-color: ${yellow[7]}; } .btn.btn-warning:focus-visible { outline-color: var(--aegis-btn-warning, ${btnWarning}); } .btn.btn-warning:active { background-color: var(--aegis-btn-warning-active, ${btnWarningActive}); border-color: ${yellow[8]}; } }`; export const btnOutlineWarning = css`@layer ${LAYER} { .btn.btn-outline-warning { background-color: transparent; color: var(--aegis-btn-warning, ${btnWarning}); border-color: currentColor; } .btn.btn-outline-warning:hover:not(${DISABLED}), .btn.btn-outline-warning:focus-visible { background-color: var(--aegis-btn-warning-hover, ${btnWarningHover}); border-color: ${yellow[7]}; color: var(--aegis-color-light, ${colorLight}); } .btn.btn-outline-warning:active { background-color: var(--aegis-btn-warning-active, ${btnWarningActive}); border-color: ${yellow[8]}; color: var(--aegis-color-light, ${colorLight}); } .btn.btn-outline-warning:focus-visible { outline-color: var(--aegis-btn-warning, ${btnWarning}); } }`; const light = css`@layer ${LAYER} { .btn.btn-light { background-color: var(--aegis-btn-light, ${btnLight}); color: var(--aegis-color-light, ${colorLight}); border-color: ${gray[2]}; } .btn.btn-light:hover:not(${DISABLED}), .btn.btn-light:focus-visible { background-color: var(--aegis-btn-light-hover, ${btnLightHover}); border-color: ${gray[3]}; } .btn.btn-light:focus-visible { outline-color: var(--aegis-btn-light, ${btnLight}); } .btn.btn-light:active { background-color: var(--aegis-btn-light-active, ${btnLightActive}); border-color: ${gray[4]}; } }`; export const btnOutlineLight = css`@layer ${LAYER} { .btn.btn-outline-light { background-color: transparent; color: var(--aegis-btn-light, ${btnLight}); border-color: currentColor; } .btn.btn-outline-light:hover:not(${DISABLED}), .btn.btn-outline-light:focus-visible { background-color: var(--aegis-btn-light-hover, ${btnLightHover}); border-color: ${gray[3]}; color: var(--aegis-color-light, ${colorLight}); } .btn.btn-outline-light:focus-visible { outline-color: var(--aegis-btn-light, ${btnLight}); } .btn.btn-outline-light:active { background-color: var(--aegis-btn-light-active, ${btnLightActive}); border-color: ${gray[4]}; color: var(--aegis-btn-light-active, ${btnLightActive}); } }`; const dark = css`@layer ${LAYER} { .btn.btn-dark { background-color: var(--aegis-btn-dark, ${btnDark}); color: var(--aegis-color-dark, ${colorDark}); border-color: ${gray[7]}; } .btn.btn-dark:hover:not(${DISABLED}), .btn.btn-dark:focus-visible { background-color: var(--aegis-btn-dark-hover, ${btnDarkHover}); border-color: ${gray[8]}; } .btn.btn-dark:focus-visible { outline-color: var(--aegis-btn-dark, ${btnDark}); } .btn.btn-dark:active { background-color: var(--aegis-btn-dark-active, ${btnDarkActive}); border-color: ${gray[8]}; } }`; export const btnOutlineDark = css`@layer ${LAYER} { .btn.btn-outline-dark { background-color: transparent; color: var(--aegis-btn-dar, ${btnDark}); border-color: currentColor; } .btn.btn-outline-dark:hover:not(${DISABLED}), .btn.btn-outline-dark:focus-visible { background-color: var(--aegis-btn-dark-hover, ${btnDarkHover}); border-color: ${gray[8]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-dark:focus-visible { outline-color: var(--aegis-btn-dark, ${btnDark}); } .btn.btn-outline-dark:active { background-color: var(--aegis-btn-dark-active, ${btnDarkActive}); border-color: ${gray[8]}; color: var(--aegis-color-dark, ${colorDark}); } .btn.btn-outline-secondary:disabled, .btn.btn-outline-secondary.disabled, .btn.btn-outline-secondary${DISABLED_STATE} { color: var(--aegis-btn-active-disabled, ${btnDisabled}); } }`; const link = css`@layer ${LAYER} { .btn.btn-link { background-color: var(--aegis-btn-link, ${btnLink}); color: ${linkColor}; border-color: transparent; text-decoration: none; } .btn.btn-link:hover:not(${DISABLED}), .btn.btn-link:focus-visible { background-color: var(--aegis-btn-link-hover, ${btnLinkHover}); text-decoration: underline; } .btn.btn-link:focus-visible { outline-color: var(--aegis-btn-link, ${btnLink}); } .btn.btn-link:active { background-color: var(--aegis-btn-link-active, ${btnLinkActive}); text-decoration: underline; } }`; export { primary as btnPrimary, secondary as btnSecondary, success as btnSuccess, info as btnInfo, danger as btnDanger, warning as btnWarning, dark as btnDark, light as btnLight, link as btnLink, system as btnSystem, systemAccent as btnSystemAccent, };