UNPKG

react-themable-hoc

Version:

React higher-order-components that allow for css-in-js-style themes.

112 lines (98 loc) 3.9 kB
(function (global, factory) { if (typeof define === "function" && define.amd) { define(['exports', 'prop-types', 'react', 'invariant'], factory); } else if (typeof exports !== "undefined") { factory(exports, require('prop-types'), require('react'), require('invariant')); } else { var mod = { exports: {} }; factory(mod.exports, global.propTypes, global.react, global.invariant); global.ThemeManager = mod.exports; } })(this, function (exports, _propTypes, _react, _invariant) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _propTypes2 = _interopRequireDefault(_propTypes); var _react2 = _interopRequireDefault(_react); var _invariant2 = _interopRequireDefault(_invariant); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var ThemeManager = function () { function ThemeManager() { _classCallCheck(this, ThemeManager); } _createClass(ThemeManager, null, [{ key: 'setStyleInterface', value: function setStyleInterface(styleInterface) { this.styleInterface = styleInterface; } }, { key: 'addTheme', value: function addTheme(themeName, themeStyles) { this.themes[themeName] = themeStyles; } }, { key: 'getTheme', value: function getTheme(themeName) { (0, _invariant2.default)(this.themes[themeName], 'Theme "' + themeName + '" does not exist. Make sure to\n call "ThemeManager.addTheme".'); return this.themes[themeName]; } }, { key: 'setCurrentTheme', value: function setCurrentTheme(themeName) { this.currentTheme = themeName; } }, { key: 'getCurrentTheme', value: function getCurrentTheme() { return this.getTheme(this.currentTheme); } }, { key: 'css', value: function css(styles) { (0, _invariant2.default)(this.styleInterface, 'No style interface set'); (0, _invariant2.default)(typeof this.styleInterface.css === 'function', 'Style interface does not implement the "css" function to create styles'); return this.styleInterface.css(styles) || {}; } }, { key: 'reset', value: function reset() { this.defaultTheme = {}; this.themes = {}; this.styleInterface = undefined; this.currentTheme = undefined; } }]); return ThemeManager; }(); ThemeManager.defaultTheme = {}; ThemeManager.themes = {}; exports.default = ThemeManager; });