2024-01-29 09:26:07 +08:00

169 lines
5.7 KiB
JavaScript

import { rgba, composite, scaleColor } from 'seemly';
import commonVariables from "./_common.mjs";
const base = {
neutralBase: '#000',
neutralInvertBase: '#fff',
neutralTextBase: '#fff',
neutralPopover: 'rgb(72, 72, 78)',
neutralCard: 'rgb(24, 24, 28)',
neutralModal: 'rgb(44, 44, 50)',
neutralBody: 'rgb(16, 16, 20)',
alpha1: '0.9',
alpha2: '0.82',
alpha3: '0.52',
alpha4: '0.38',
alpha5: '0.28',
alphaClose: '0.52',
alphaDisabled: '0.38',
alphaDisabledInput: '0.06',
alphaPending: '0.09',
alphaTablePending: '0.06',
alphaTableStriped: '0.05',
alphaPressed: '0.05',
alphaAvatar: '0.18',
alphaRail: '0.2',
alphaProgressRail: '0.12',
alphaBorder: '0.24',
alphaDivider: '0.09',
alphaInput: '0.1',
alphaAction: '0.06',
alphaTab: '0.04',
alphaScrollbar: '0.2',
alphaScrollbarHover: '0.3',
alphaCode: '0.12',
alphaTag: '0.2',
// primary
primaryHover: '#7fe7c4',
primaryDefault: '#63e2b7',
primaryActive: '#5acea7',
primarySuppl: 'rgb(42, 148, 125)',
// info
infoHover: '#8acbec',
infoDefault: '#70c0e8',
infoActive: '#66afd3',
infoSuppl: 'rgb(56, 137, 197)',
// error
errorHover: '#e98b8b',
errorDefault: '#e88080',
errorActive: '#e57272',
errorSuppl: 'rgb(208, 58, 82)',
// warning
warningHover: '#f5d599',
warningDefault: '#f2c97d',
warningActive: '#e6c260',
warningSuppl: 'rgb(240, 138, 0)',
// success
successHover: '#7fe7c4',
successDefault: '#63e2b7',
successActive: '#5acea7',
successSuppl: 'rgb(42, 148, 125)'
};
const baseBackgroundRgb = rgba(base.neutralBase);
const baseInvertBackgroundRgb = rgba(base.neutralInvertBase);
const overlayPrefix = 'rgba(' + baseInvertBackgroundRgb.slice(0, 3).join(', ') + ', ';
function overlay(alpha) {
return overlayPrefix + String(alpha) + ')';
}
function neutral(alpha) {
const overlayRgba = Array.from(baseInvertBackgroundRgb);
overlayRgba[3] = Number(alpha);
return composite(baseBackgroundRgb, overlayRgba);
}
const derived = Object.assign(Object.assign({
name: 'common'
}, commonVariables), {
baseColor: base.neutralBase,
// primary color
primaryColor: base.primaryDefault,
primaryColorHover: base.primaryHover,
primaryColorPressed: base.primaryActive,
primaryColorSuppl: base.primarySuppl,
// info color
infoColor: base.infoDefault,
infoColorHover: base.infoHover,
infoColorPressed: base.infoActive,
infoColorSuppl: base.infoSuppl,
// success color
successColor: base.successDefault,
successColorHover: base.successHover,
successColorPressed: base.successActive,
successColorSuppl: base.successSuppl,
// warning color
warningColor: base.warningDefault,
warningColorHover: base.warningHover,
warningColorPressed: base.warningActive,
warningColorSuppl: base.warningSuppl,
// error color
errorColor: base.errorDefault,
errorColorHover: base.errorHover,
errorColorPressed: base.errorActive,
errorColorSuppl: base.errorSuppl,
// text color
textColorBase: base.neutralTextBase,
textColor1: overlay(base.alpha1),
textColor2: overlay(base.alpha2),
textColor3: overlay(base.alpha3),
// textColor4: overlay(base.alpha4), // disabled, placeholder, icon
// textColor5: overlay(base.alpha5),
textColorDisabled: overlay(base.alpha4),
placeholderColor: overlay(base.alpha4),
placeholderColorDisabled: overlay(base.alpha5),
iconColor: overlay(base.alpha4),
iconColorDisabled: overlay(base.alpha5),
iconColorHover: overlay(Number(base.alpha4) * 1.25),
iconColorPressed: overlay(Number(base.alpha4) * 0.8),
opacity1: base.alpha1,
opacity2: base.alpha2,
opacity3: base.alpha3,
opacity4: base.alpha4,
opacity5: base.alpha5,
dividerColor: overlay(base.alphaDivider),
borderColor: overlay(base.alphaBorder),
// close
closeIconColorHover: overlay(Number(base.alphaClose)),
closeIconColor: overlay(Number(base.alphaClose)),
closeIconColorPressed: overlay(Number(base.alphaClose)),
closeColorHover: 'rgba(255, 255, 255, .12)',
closeColorPressed: 'rgba(255, 255, 255, .08)',
// clear
clearColor: overlay(base.alpha4),
clearColorHover: scaleColor(overlay(base.alpha4), {
alpha: 1.25
}),
clearColorPressed: scaleColor(overlay(base.alpha4), {
alpha: 0.8
}),
scrollbarColor: overlay(base.alphaScrollbar),
scrollbarColorHover: overlay(base.alphaScrollbarHover),
scrollbarWidth: '5px',
scrollbarHeight: '5px',
scrollbarBorderRadius: '5px',
progressRailColor: overlay(base.alphaProgressRail),
railColor: overlay(base.alphaRail),
popoverColor: base.neutralPopover,
tableColor: base.neutralCard,
cardColor: base.neutralCard,
modalColor: base.neutralModal,
bodyColor: base.neutralBody,
tagColor: neutral(base.alphaTag),
avatarColor: overlay(base.alphaAvatar),
invertedColor: base.neutralBase,
inputColor: overlay(base.alphaInput),
codeColor: overlay(base.alphaCode),
tabColor: overlay(base.alphaTab),
actionColor: overlay(base.alphaAction),
tableHeaderColor: overlay(base.alphaAction),
hoverColor: overlay(base.alphaPending),
tableColorHover: overlay(base.alphaTablePending),
tableColorStriped: overlay(base.alphaTableStriped),
pressedColor: overlay(base.alphaPressed),
opacityDisabled: base.alphaDisabled,
inputColorDisabled: overlay(base.alphaDisabledInput),
buttonColor2: 'rgba(255, 255, 255, .08)',
buttonColor2Hover: 'rgba(255, 255, 255, .12)',
buttonColor2Pressed: 'rgba(255, 255, 255, .08)',
boxShadow1: '0 1px 2px -2px rgba(0, 0, 0, .24), 0 3px 6px 0 rgba(0, 0, 0, .18), 0 5px 12px 4px rgba(0, 0, 0, .12)',
boxShadow2: '0 3px 6px -4px rgba(0, 0, 0, .24), 0 6px 12px 0 rgba(0, 0, 0, .16), 0 9px 18px 8px rgba(0, 0, 0, .10)',
boxShadow3: '0 6px 16px -9px rgba(0, 0, 0, .08), 0 9px 28px 0 rgba(0, 0, 0, .05), 0 12px 48px 16px rgba(0, 0, 0, .03)'
});
export default derived;