208 lines
7.4 KiB
JavaScript
208 lines
7.4 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.dark = exports.light = undefined;
|
|
|
|
var _extends2 = require('babel-runtime/helpers/extends');
|
|
|
|
var _extends3 = _interopRequireDefault(_extends2);
|
|
|
|
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
|
|
|
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
|
|
|
exports.default = createPalette;
|
|
|
|
var _warning = require('warning');
|
|
|
|
var _warning2 = _interopRequireDefault(_warning);
|
|
|
|
var _deepmerge = require('deepmerge');
|
|
|
|
var _deepmerge2 = _interopRequireDefault(_deepmerge);
|
|
|
|
var _indigo = require('../colors/indigo');
|
|
|
|
var _indigo2 = _interopRequireDefault(_indigo);
|
|
|
|
var _pink = require('../colors/pink');
|
|
|
|
var _pink2 = _interopRequireDefault(_pink);
|
|
|
|
var _grey = require('../colors/grey');
|
|
|
|
var _grey2 = _interopRequireDefault(_grey);
|
|
|
|
var _red = require('../colors/red');
|
|
|
|
var _red2 = _interopRequireDefault(_red);
|
|
|
|
var _common = require('../colors/common');
|
|
|
|
var _common2 = _interopRequireDefault(_common);
|
|
|
|
var _colorManipulator = require('./colorManipulator');
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
// < 1kb payload overhead when lodash/merge is > 3kb.
|
|
var light = exports.light = {
|
|
// The colors used to style the text.
|
|
text: {
|
|
// The most important text.
|
|
primary: 'rgba(0, 0, 0, 0.87)',
|
|
// Secondary text.
|
|
secondary: 'rgba(0, 0, 0, 0.54)',
|
|
// Disabled text have even lower visual prominence.
|
|
disabled: 'rgba(0, 0, 0, 0.38)',
|
|
// Text hints.
|
|
hint: 'rgba(0, 0, 0, 0.38)'
|
|
},
|
|
// The color used to divide different elements.
|
|
divider: 'rgba(0, 0, 0, 0.12)',
|
|
// The background colors used to style the surfaces.
|
|
// Consistency between these values is important.
|
|
background: {
|
|
paper: _common2.default.white,
|
|
default: _grey2.default[50]
|
|
},
|
|
// The colors used to style the action elements.
|
|
action: {
|
|
// The color of an active action like an icon button.
|
|
active: 'rgba(0, 0, 0, 0.54)',
|
|
// The color of an hovered action.
|
|
hover: 'rgba(0, 0, 0, 0.08)',
|
|
// The color of a selected action.
|
|
selected: 'rgba(0, 0, 0, 0.14)',
|
|
// The color of a disabled action.
|
|
disabled: 'rgba(0, 0, 0, 0.26)',
|
|
// The background color of a disabled action.
|
|
disabledBackground: 'rgba(0, 0, 0, 0.12)'
|
|
}
|
|
};
|
|
|
|
var dark = exports.dark = {
|
|
text: {
|
|
primary: _common2.default.white,
|
|
secondary: 'rgba(255, 255, 255, 0.7)',
|
|
disabled: 'rgba(255, 255, 255, 0.5)',
|
|
hint: 'rgba(255, 255, 255, 0.5)',
|
|
icon: 'rgba(255, 255, 255, 0.5)'
|
|
},
|
|
divider: 'rgba(255, 255, 255, 0.12)',
|
|
background: {
|
|
paper: _grey2.default[800],
|
|
default: '#303030'
|
|
},
|
|
action: {
|
|
active: _common2.default.white,
|
|
hover: 'rgba(255, 255, 255, 0.1)',
|
|
selected: 'rgba(255, 255, 255, 0.2)',
|
|
disabled: 'rgba(255, 255, 255, 0.3)',
|
|
disabledBackground: 'rgba(255, 255, 255, 0.12)'
|
|
}
|
|
};
|
|
|
|
function addLightOrDark(intent, direction, shade, tonalOffset) {
|
|
if (!intent[direction]) {
|
|
if (intent.hasOwnProperty(shade)) {
|
|
intent[direction] = intent[shade];
|
|
} else if (direction === 'light') {
|
|
intent.light = (0, _colorManipulator.lighten)(intent.main, tonalOffset);
|
|
} else if (direction === 'dark') {
|
|
intent.dark = (0, _colorManipulator.darken)(intent.main, tonalOffset * 1.5);
|
|
}
|
|
}
|
|
}
|
|
|
|
function createPalette(palette) {
|
|
var _palette$primary = palette.primary,
|
|
primary = _palette$primary === undefined ? {
|
|
light: _indigo2.default[300],
|
|
main: _indigo2.default[500],
|
|
dark: _indigo2.default[700]
|
|
} : _palette$primary,
|
|
_palette$secondary = palette.secondary,
|
|
secondary = _palette$secondary === undefined ? {
|
|
light: _pink2.default.A200,
|
|
main: _pink2.default.A400,
|
|
dark: _pink2.default.A700
|
|
} : _palette$secondary,
|
|
_palette$error = palette.error,
|
|
error = _palette$error === undefined ? {
|
|
light: _red2.default[300],
|
|
main: _red2.default[500],
|
|
dark: _red2.default[700]
|
|
} : _palette$error,
|
|
_palette$type = palette.type,
|
|
type = _palette$type === undefined ? 'light' : _palette$type,
|
|
_palette$contrastThre = palette.contrastThreshold,
|
|
contrastThreshold = _palette$contrastThre === undefined ? 3 : _palette$contrastThre,
|
|
_palette$tonalOffset = palette.tonalOffset,
|
|
tonalOffset = _palette$tonalOffset === undefined ? 0.2 : _palette$tonalOffset,
|
|
other = (0, _objectWithoutProperties3.default)(palette, ['primary', 'secondary', 'error', 'type', 'contrastThreshold', 'tonalOffset']);
|
|
|
|
|
|
function getContrastText(background) {
|
|
// Use the same logic as
|
|
// Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59
|
|
// and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54
|
|
var contrastText = (0, _colorManipulator.getContrastRatio)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;
|
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
var contrast = (0, _colorManipulator.getContrastRatio)(background, contrastText);
|
|
process.env.NODE_ENV !== "production" ? (0, _warning2.default)(contrast >= 3, ['Material-UI: the contrast ratio of ' + contrast + ':1 for ' + contrastText + ' on ' + background, 'falls below the WACG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\n')) : void 0;
|
|
}
|
|
|
|
return contrastText;
|
|
}
|
|
|
|
function augmentColor(color, mainShade, lightShade, darkShade) {
|
|
if (!color.main && color[mainShade]) {
|
|
color.main = color[mainShade];
|
|
}
|
|
addLightOrDark(color, 'light', lightShade, tonalOffset);
|
|
addLightOrDark(color, 'dark', darkShade, tonalOffset);
|
|
if (!color.contrastText) {
|
|
color.contrastText = getContrastText(color.main);
|
|
}
|
|
}
|
|
|
|
augmentColor(primary, 500, 300, 700);
|
|
augmentColor(secondary, 'A400', 'A200', 'A700');
|
|
augmentColor(error, 500, 300, 700);
|
|
|
|
var types = { dark: dark, light: light };
|
|
|
|
process.env.NODE_ENV !== "production" ? (0, _warning2.default)(types[type], 'Material-UI: the palette type `' + type + '` is not supported.') : void 0;
|
|
|
|
var paletteOutput = (0, _deepmerge2.default)((0, _extends3.default)({
|
|
// A collection of common colors.
|
|
common: _common2.default,
|
|
// The palette type, can be light or dark.
|
|
type: type,
|
|
// The colors used to represent primary interface elements for a user.
|
|
primary: primary,
|
|
// The colors used to represent secondary interface elements for a user.
|
|
secondary: secondary,
|
|
// The colors used to represent interface elements that the user should be made aware of.
|
|
error: error,
|
|
// The grey colors.
|
|
grey: _grey2.default,
|
|
// Used by `getContrastText()` to maximize the contrast between the background and
|
|
// the text.
|
|
contrastThreshold: contrastThreshold,
|
|
// Take a background color and return the color of the text to maximize the contrast.
|
|
getContrastText: getContrastText,
|
|
// Used by the functions below to shift a color's luminance by approximately
|
|
// two indexes within its tonal palette.
|
|
// E.g., shift from Red 500 to Red 300 or Red 700.
|
|
tonalOffset: tonalOffset
|
|
}, types[type]), other, {
|
|
clone: false // No need to clone deep
|
|
});
|
|
|
|
return paletteOutput;
|
|
} |