UNPKG

extjs-gpl

Version:

GPL licensed version of Sencha Ext JS

403 lines (385 loc) 12.1 kB
Ext.define('Ext.theme.Material', { singleton: true, _autoUpdateMeta: true, _defaultWeight: '500', _colors: { 'red': { '50': '#ffebee', '100': '#ffcdd2', '200': '#ef9a9a', '300': '#e57373', '400': '#ef5350', '500': '#f44336', '600': '#e53935', '700': '#d32f2f', '800': '#c62828', '900': '#b71c1c', 'a100': '#ff8a80', 'a200': '#ff5252', 'a400': '#ff1744', 'a700': '#d50000' }, 'pink': { '50': '#fce4ec', '100': '#f8bbd0', '200': '#f48fb1', '300': '#f06292', '400': '#ec407a', '500': '#e91e63', '600': '#d81b60', '700': '#c2185b', '800': '#ad1457', '900': '#880e4f', 'a100': '#ff80ab', 'a200': '#ff4081', 'a400': '#f50057', 'a700': '#c51162' }, 'purple': { '50': '#f3e5f5', '100': '#e1bee7', '200': '#ce93d8', '300': '#ba68c8', '400': '#ab47bc', '500': '#9c27b0', '600': '#8e24aa', '700': '#7b1fa2', '800': '#6a1b9a', '900': '#4a148c', 'a100': '#ea80fc', 'a200': '#e040fb', 'a400': '#d500f9', 'a700': '#aa00ff' }, 'deep-purple': { '50': '#ede7f6', '100': '#d1c4e9', '200': '#b39ddb', '300': '#9575cd', '400': '#7e57c2', '500': '#673ab7', '600': '#5e35b1', '700': '#512da8', '800': '#4527a0', '900': '#311b92', 'a100': '#b388ff', 'a200': '#7c4dff', 'a400': '#651fff', 'a700': '#6200ea' }, 'indigo': { '50': '#e8eaf6', '100': '#c5cae9', '200': '#9fa8da', '300': '#7986cb', '400': '#5c6bc0', '500': '#3f51b5', '600': '#3949ab', '700': '#303f9f', '800': '#283593', '900': '#1a237e', 'a100': '#8c9eff', 'a200': '#536dfe', 'a400': '#3d5afe', 'a700': '#304ffe' }, 'blue': { '50': '#e3f2fd', '100': '#bbdefb', '200': '#90caf9', '300': '#64b5f6', '400': '#42a5f5', '500': '#2196f3', '600': '#1e88e5', '700': '#1976d2', '800': '#1565c0', '900': '#0d47a1', 'a100': '#82b1ff', 'a200': '#448aff', 'a400': '#2979ff', 'a700': '#2962ff' }, 'light-blue': { '50': '#e1f5fe', '100': '#b3e5fc', '200': '#81d4fa', '300': '#4fc3f7', '400': '#29b6f6', '500': '#03a9f4', '600': '#039be5', '700': '#0288d1', '800': '#0277bd', '900': '#01579b', 'a100': '#80d8ff', 'a200': '#40c4ff', 'a400': '#00b0ff', 'a700': '#0091ea' }, 'cyan': { '50': '#e0f7fa', '100': '#b2ebf2', '200': '#80deea', '300': '#4dd0e1', '400': '#26c6da', '500': '#00bcd4', '600': '#00acc1', '700': '#0097a7', '800': '#00838f', '900': '#006064', 'a100': '#84ffff', 'a200': '#18ffff', 'a400': '#00e5ff', 'a700': '#00b8d4' }, 'teal': { '50': '#e0f2f1', '100': '#b2dfdb', '200': '#80cbc4', '300': '#4db6ac', '400': '#26a69a', '500': '#009688', '600': '#00897b', '700': '#00796b', '800': '#00695c', '900': '#004d40', 'a100': '#a7ffeb', 'a200': '#64ffda', 'a400': '#1de9b6', 'a700': '#00bfa5' }, 'green': { '50': '#e8f5e9', '100': '#c8e6c9', '200': '#a5d6a7', '300': '#81c784', '400': '#66bb6a', '500': '#4caf50', '600': '#43a047', '700': '#388e3c', '800': '#2e7d32', '900': '#1b5e20', 'a100': '#b9f6ca', 'a200': '#69f0ae', 'a400': '#00e676', 'a700': '#00c853' }, 'light-green': { '50': '#f1f8e9', '100': '#dcedc8', '200': '#c5e1a5', '300': '#aed581', '400': '#9ccc65', '500': '#8bc34a', '600': '#7cb342', '700': '#689f38', '800': '#558b2f', '900': '#33691e', 'a100': '#ccff90', 'a200': '#b2ff59', 'a400': '#76ff03', 'a700': '#64dd17' }, 'lime': { '50': '#f9fbe7', '100': '#f0f4c3', '200': '#e6ee9c', '300': '#dce775', '400': '#d4e157', '500': '#cddc39', '600': '#c0ca33', '700': '#afb42b', '800': '#9e9d24', '900': '#827717', 'a100': '#f4ff81', 'a200': '#eeff41', 'a400': '#c6ff00', 'a700': '#aeea00' }, 'yellow': { '50': '#fffde7', '100': '#fff9c4', '200': '#fff59d', '300': '#fff176', '400': '#ffee58', '500': '#ffeb3b', '600': '#fdd835', '700': '#fbc02d', '800': '#f9a825', '900': '#f57f17', 'a100': '#ffff8d', 'a200': '#ffff00', 'a400': '#ffea00', 'a700': '#ffd600' }, 'amber': { '50': '#fff8e1', '100': '#ffecb3', '200': '#ffe082', '300': '#ffd54f', '400': '#ffca28', '500': '#ffc107', '600': '#ffb300', '700': '#ffa000', '800': '#ff8f00', '900': '#ff6f00', 'a100': '#ffe57f', 'a200': '#ffd740', 'a400': '#ffc400', 'a700': '#ffab00' }, 'orange': { '50': '#fff3e0', '100': '#ffe0b2', '200': '#ffcc80', '300': '#ffb74d', '400': '#ffa726', '500': '#ff9800', '600': '#fb8c00', '700': '#f57c00', '800': '#ef6c00', '900': '#e65100', 'a100': '#ffd180', 'a200': '#ffab40', 'a400': '#ff9100', 'a700': '#ff6d00' }, 'deep-orange': { '50': '#fbe9e7', '100': '#ffccbc', '200': '#ffab91', '300': '#ff8a65', '400': '#ff7043', '500': '#ff5722', '600': '#f4511e', '700': '#e64a19', '800': '#d84315', '900': '#bf360c', 'a100': '#ff9e80', 'a200': '#ff6e40', 'a400': '#ff3d00', 'a700': '#dd2c00' }, 'brown': { '50': '#efebe9', '100': '#d7ccc8', '200': '#bcaaa4', '300': '#a1887f', '400': '#8d6e63', '500': '#795548', '600': '#6d4c41', '700': '#5d4037', '800': '#4e342e', '900': '#3e2723' }, 'grey': { '50': '#fafafa', '100': '#f5f5f5', '200': '#eeeeee', '300': '#e0e0e0', '400': '#bdbdbd', '500': '#9e9e9e', '600': '#757575', '700': '#616161', '800': '#424242', '900': '#212121' }, 'blue-grey': { '50': '#eceff1', '100': '#cfd8dc', '200': '#b0bec5', '300': '#90a4ae', '400': '#78909c', '500': '#607d8b', '600': '#546e7a', '700': '#455a64', '800': '#37474f', '900': '#263238', '1000': '#11171a' } }, hasFashion: function() { return !!Fashion.css && Fashion.css.setVariables; }, setAutoUpdateMeta: function(value) { this._autoUpdateMeta = value; }, getAutoUpdateMeta: function() { return this._autoUpdateMeta; }, getDefaultWeight: function () { return this._defaultWeight; }, setDarkMode: function (value) { if (!this.hasFashion()) { //<debug> Ext.Logger.warn('Fashion was not found and is required to set CSS Variables for Material Theme'); //</debug> return; } Fashion.css.setVariables({'dark-mode': value ? 'true' : 'false'}); }, /** * Sets the colors for the Material theme Dynamically with CSS Variables and Fashion * @param {Object} colorsConfig * @param {String} colorsConfig.base Name of the base color (red, green, blue, etc) * @param {String} colorsConfig.baseWeight Weight for the base color ('500', '400', '300', etc) * @param {String} colorsConfig.accent Name of the accent color (red, green, blue, etc) * @param {String} colorsConfig.accentWeight Weight for the accent color ('500', '400', '300', etc) * @param {Boolean} colorsConfig.darkMode Determines if the theme is in Light or Dark Mode */ setColors: function (colorsConfig) { if (!this.hasFashion()) { //<debug> Ext.Logger.warn('Fashion was not found and is required to set CSS Variables for Material Theme'); //</debug> return; } colorsConfig = Ext.merge( { baseWeight: this.getDefaultWeight(), accentWeight: this.getDefaultWeight()}, colorsConfig); var baseColor = this._colors[colorsConfig.base], accentColor = this._colors[colorsConfig.accent], obj = {}; if (baseColor) { baseColor = baseColor[colorsConfig.baseWeight]; if (baseColor) { obj['base-color'] = baseColor; if (this.getAutoUpdateMeta()) { this.updateMetaThemeColor(colorsConfig.base, colorsConfig.baseWeight); } } else { Ext.Logger.warn("Base color weight: " + colorsConfig.baseWeight + " is not a valid weight", this); } } else if (colorsConfig.base) { Ext.Logger.warn("Base color: " + colorsConfig.base + " is not a valid material color", this); } if (accentColor) { accentColor = accentColor[colorsConfig.accentWeight]; if (accentColor) { obj['accent-color'] = accentColor; } else { Ext.Logger.warn("Accent color weight: " + colorsConfig.accentWeight + " is not a valid weight", this); } } else if (colorsConfig.accent) { Ext.Logger.warn("Accent color: " + colorsConfig.accent + " is not a valid material color", this); } if (colorsConfig.darkMode !== null) { obj['dark-mode'] = colorsConfig.darkMode ? 'true' : 'false'; } Fashion.css.setVariables(obj); }, updateMetaThemeColor: function (colorName, weight) { var color = this._colors[colorName], toolbarIsDynamic = Ext.manifest.material.toolbar.dynamic, meta; if (!weight) { weight = this.getDefaultWeight(); } if (Ext.platformTags.android && Ext.platformTags.chrome && toolbarIsDynamic && color) { color = color[weight]; meta = Ext.query('meta[name="theme-color"]')[0]; if (meta) { meta.setAttribute('content', color); } } }, getColors: function () { return this._colors; } });