'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; }