@morfeo/jss
Version:

45 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getStyles = exports.getStyleSheet = void 0;
const tslib_1 = require("tslib");
const web_1 = require("@morfeo/web");
const utils_1 = require("@morfeo/utils");
const initJSS_1 = tslib_1.__importDefault(require("./initJSS"));
const registry_1 = require("./registry");
function getStyleSheet(styles, options) {
const sheet = initJSS_1.default.createStyleSheet(styles, options);
registry_1.MorfeoSheetsRegistry.add(sheet);
return sheet;
}
exports.getStyleSheet = getStyleSheet;
function getStyles(styles, options) {
let sheet = getStyleSheet(styles, options);
sheet.attach();
let classes = sheet.classes;
let currentStyles = Object.assign({}, styles);
function onThemeChange() {
sheet.detach();
sheet = getStyleSheet(currentStyles, Object.assign(Object.assign({}, options), { generateId: ({ key }) => classes[key] }));
sheet.attach();
}
const update = (props) => {
currentStyles = (0, utils_1.deepMerge)(currentStyles, props);
sheet.addRules(currentStyles, Object.assign(Object.assign({}, options), { generateId: rule => {
// We need to ignore this line because the JSS's RuleOptions interface is (apparently) wrong
// and it doesn't expose the attribute name.
// @ts-ignore
const ruleName = rule.options.name;
return classes[ruleName];
} }));
classes = sheet.classes;
return classes;
};
const unsubscribe = web_1.morfeo.theme.subscribe(onThemeChange);
const destroy = () => {
sheet.detach();
unsubscribe();
};
return { classes, sheet, jss: initJSS_1.default, destroy, update };
}
exports.getStyles = getStyles;
//# sourceMappingURL=getStyles.js.map