UNPKG

material-ui

Version:

Material Design UI components built with React

241 lines (229 loc) 9.33 kB
'use strict'; var Colors = require('./colors'); var ColorManipulator = require('../utils/color-manipulator'); var Extend = require('../utils/extend'); var update = require('react-addons-update'); module.exports = { //get the MUI theme corresponding to a raw theme getMuiTheme: function getMuiTheme(rawTheme) { var returnObj = { appBar: { color: rawTheme.palette.primary1Color, textColor: rawTheme.palette.alternateTextColor, height: rawTheme.spacing.desktopKeylineIncrement }, avatar: { borderColor: 'rgba(0, 0, 0, 0.08)' }, button: { height: 36, minWidth: 88, iconButtonSize: rawTheme.spacing.iconSize * 2 }, checkbox: { boxColor: rawTheme.palette.textColor, checkedColor: rawTheme.palette.primary1Color, requiredColor: rawTheme.palette.primary1Color, disabledColor: rawTheme.palette.disabledColor, labelColor: rawTheme.palette.textColor, labelDisabledColor: rawTheme.palette.disabledColor }, datePicker: { color: rawTheme.palette.primary1Color, textColor: rawTheme.palette.alternateTextColor, calendarTextColor: rawTheme.palette.textColor, selectColor: rawTheme.palette.primary2Color, selectTextColor: rawTheme.palette.alternateTextColor }, dropDownMenu: { accentColor: rawTheme.palette.borderColor }, flatButton: { color: rawTheme.palette.alternateTextColor, textColor: rawTheme.palette.textColor, primaryTextColor: rawTheme.palette.accent1Color, secondaryTextColor: rawTheme.palette.primary1Color }, floatingActionButton: { buttonSize: 56, miniSize: 40, color: rawTheme.palette.accent1Color, iconColor: rawTheme.palette.alternateTextColor, secondaryColor: rawTheme.palette.primary1Color, secondaryIconColor: rawTheme.palette.alternateTextColor, disabledTextColor: rawTheme.palette.disabledColor }, gridTile: { textColor: Colors.white }, inkBar: { backgroundColor: rawTheme.palette.accent1Color }, leftNav: { width: rawTheme.spacing.desktopKeylineIncrement * 4, color: rawTheme.palette.canvasColor }, listItem: { nestedLevelDepth: 18 }, menu: { backgroundColor: rawTheme.palette.canvasColor, containerBackgroundColor: rawTheme.palette.canvasColor }, menuItem: { dataHeight: 32, height: 48, hoverColor: 'rgba(0, 0, 0, .035)', padding: rawTheme.spacing.desktopGutter, selectedTextColor: rawTheme.palette.accent1Color }, menuSubheader: { padding: rawTheme.spacing.desktopGutter, borderColor: rawTheme.palette.borderColor, textColor: rawTheme.palette.primary1Color }, paper: { backgroundColor: rawTheme.palette.canvasColor }, radioButton: { borderColor: rawTheme.palette.textColor, backgroundColor: rawTheme.palette.alternateTextColor, checkedColor: rawTheme.palette.primary1Color, requiredColor: rawTheme.palette.primary1Color, disabledColor: rawTheme.palette.disabledColor, size: 24, labelColor: rawTheme.palette.textColor, labelDisabledColor: rawTheme.palette.disabledColor }, raisedButton: { color: rawTheme.palette.alternateTextColor, textColor: rawTheme.palette.textColor, primaryColor: rawTheme.palette.accent1Color, primaryTextColor: rawTheme.palette.alternateTextColor, secondaryColor: rawTheme.palette.primary1Color, secondaryTextColor: rawTheme.palette.alternateTextColor }, refreshIndicator: { strokeColor: rawTheme.palette.borderColor, loadingStrokeColor: rawTheme.palette.primary1Color }, slider: { trackSize: 2, trackColor: rawTheme.palette.primary3Color, trackColorSelected: rawTheme.palette.accent3Color, handleSize: 12, handleSizeDisabled: 8, handleSizeActive: 18, handleColorZero: rawTheme.palette.borderColor, handleFillColor: rawTheme.palette.alternateTextColor, selectionColor: rawTheme.palette.primary1Color, rippleColor: rawTheme.palette.primary1Color }, snackbar: { textColor: rawTheme.palette.alternateTextColor, backgroundColor: rawTheme.palette.textColor, actionColor: rawTheme.palette.accent1Color }, table: { backgroundColor: rawTheme.palette.canvasColor }, tableHeader: { borderColor: rawTheme.palette.borderColor }, tableHeaderColumn: { textColor: rawTheme.palette.primary3Color, height: 56, spacing: 24 }, tableFooter: { borderColor: rawTheme.palette.borderColor, textColor: rawTheme.palette.primary3Color }, tableRow: { hoverColor: rawTheme.palette.accent2Color, stripeColor: ColorManipulator.lighten(rawTheme.palette.primary1Color, 0.55), selectedColor: rawTheme.palette.borderColor, textColor: rawTheme.palette.textColor, borderColor: rawTheme.palette.borderColor }, tableRowColumn: { height: 48, spacing: 24 }, timePicker: { color: rawTheme.palette.alternateTextColor, textColor: rawTheme.palette.accent3Color, accentColor: rawTheme.palette.primary1Color, clockColor: rawTheme.palette.primary3Color, selectColor: rawTheme.palette.primary2Color, selectTextColor: rawTheme.palette.alternateTextColor }, toggle: { thumbOnColor: rawTheme.palette.primary1Color, thumbOffColor: rawTheme.palette.accent2Color, thumbDisabledColor: rawTheme.palette.borderColor, thumbRequiredColor: rawTheme.palette.primary1Color, trackOnColor: ColorManipulator.fade(rawTheme.palette.primary1Color, 0.5), trackOffColor: rawTheme.palette.primary3Color, trackDisabledColor: rawTheme.palette.primary3Color, labelColor: rawTheme.palette.textColor, labelDisabledColor: rawTheme.palette.disabledColor }, toolbar: { backgroundColor: ColorManipulator.darken(rawTheme.palette.accent2Color, 0.05), height: 56, titleFontSize: 20, iconColor: 'rgba(0, 0, 0, .40)', separatorColor: 'rgba(0, 0, 0, .175)', menuHoverColor: 'rgba(0, 0, 0, .10)' }, tabs: { backgroundColor: rawTheme.palette.primary1Color }, textField: { textColor: rawTheme.palette.textColor, hintColor: rawTheme.palette.disabledColor, floatingLabelColor: rawTheme.palette.textColor, disabledTextColor: rawTheme.palette.disabledColor, errorColor: Colors.red500, focusColor: rawTheme.palette.primary1Color, backgroundColor: 'transparent', borderColor: rawTheme.palette.borderColor }, isRtl: false }; //add properties to objects inside 'returnObj' that depend on existing properties returnObj.flatButton.disabledTextColor = ColorManipulator.fade(returnObj.flatButton.textColor, 0.3); returnObj.raisedButton.disabledColor = ColorManipulator.darken(returnObj.raisedButton.color, 0.1); returnObj.raisedButton.disabledTextColor = ColorManipulator.fade(returnObj.raisedButton.textColor, 0.3); returnObj.toggle.trackRequiredColor = ColorManipulator.fade(returnObj.toggle.thumbRequiredColor, 0.5); //append the raw theme object to 'returnObj' returnObj.rawTheme = rawTheme; //set 'static' key as true (by default) on return object. This is to support the ContextPure mixin. returnObj['static'] = true; return returnObj; }, //functions to modify properties of raw theme, namely spacing, palette //and font family. These functions use the React update immutability helper //to create a new object for the raw theme, and return a new MUI theme object //function to modify the spacing of the raw theme. This function recomputes //the MUI theme and returns it based on the new theme. modifyRawThemeSpacing: function modifyRawThemeSpacing(muiTheme, newSpacing) { var newRawTheme = update(muiTheme.rawTheme, { spacing: { $set: newSpacing } }); return this.getMuiTheme(newRawTheme); }, //function to modify the palette of the raw theme. This function recomputes //the MUI theme and returns it based on the new raw theme. //keys inside 'newPalette' override values for existing keys in palette modifyRawThemePalette: function modifyRawThemePalette(muiTheme, newPaletteKeys) { var newPalette = Extend(muiTheme.rawTheme.palette, newPaletteKeys); var newRawTheme = update(muiTheme.rawTheme, { palette: { $set: newPalette } }); return this.getMuiTheme(newRawTheme); }, //function to modify the font family of the raw theme. This function recomputes //the MUI theme and returns it based on the new raw theme. modifyRawThemeFontFamily: function modifyRawThemeFontFamily(muiTheme, newFontFamily) { var newRawTheme = update(muiTheme.rawTheme, { fontFamily: { $set: newFontFamily } }); return this.getMuiTheme(newRawTheme); } };