UNPKG

@morfeo/jss

Version:

![Morfeo logo](https://morfeo.dev/img/morfeo.png)

45 lines 1.85 kB
"use strict"; 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