UNPKG

react-native-web-internals

Version:

React Native for Web

95 lines (94 loc) 3.91 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: !0 }); }, __copyProps = (to, from, except, desc) => { if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod); var createOrderedCSSStyleSheet_exports = {}; __export(createOrderedCSSStyleSheet_exports, { default: () => createOrderedCSSStyleSheet }); module.exports = __toCommonJS(createOrderedCSSStyleSheet_exports); const slice = Array.prototype.slice; function createOrderedCSSStyleSheet(sheet) { const groups = {}, selectors = {}; if (sheet != null) { let group; slice.call(sheet.cssRules).forEach((cssRule, i) => { const cssText = cssRule.cssText; if (cssText.indexOf("stylesheet-group") > -1) group = decodeGroupRule(cssRule), groups[group] = { start: i, rules: [cssText] }; else { const selectorText = getSelectorText(cssText); selectorText != null && (selectors[selectorText] = !0, groups[group].rules.push(cssText)); } }); } function sheetInsert(sheet2, group, text) { const orderedGroups = getOrderedGroups(groups), nextGroupIndex = orderedGroups.indexOf(group) + 1, nextGroup = orderedGroups[nextGroupIndex], position = nextGroup != null && groups[nextGroup].start != null ? groups[nextGroup].start : sheet2.cssRules.length, isInserted = insertRuleAt(sheet2, text, position); if (isInserted) { groups[group].start == null && (groups[group].start = position); for (let i = nextGroupIndex; i < orderedGroups.length; i += 1) { const groupNumber = orderedGroups[i], previousStart = groups[groupNumber].start || 0; groups[groupNumber].start = previousStart + 1; } } return isInserted; } return { /** * The textContent of the style sheet. */ getTextContent() { return getOrderedGroups(groups).map((group) => { const rules = groups[group].rules, marker = rules.shift(); return rules.sort(), rules.unshift(marker), rules.join(` `); }).join(` `); }, /** * Insert a rule into the style sheet */ insert(cssText, groupValue) { const group = Number(groupValue); if (groups[group] == null) { const markerRule = encodeGroupRule(group); groups[group] = { start: null, rules: [markerRule] }, sheet != null && sheetInsert(sheet, group, markerRule); } const selectorText = getSelectorText(cssText); selectorText != null && selectors[selectorText] == null && (selectors[selectorText] = !0, groups[group].rules.push(cssText), sheet != null && (sheetInsert(sheet, group, cssText) || groups[group].rules.pop())); } }; } function encodeGroupRule(group) { return `[stylesheet-group="${group}"]{}`; } const groupPattern = /["']/g; function decodeGroupRule(cssRule) { return Number(cssRule.selectorText.split(groupPattern)[1]); } function getOrderedGroups(obj) { return Object.keys(obj).map(Number).sort((a, b) => a > b ? 1 : -1); } const selectorPattern = /\s*([,])\s*/g; function getSelectorText(cssText) { const selector = cssText.split("{")[0].trim(); return selector !== "" ? selector.replace(selectorPattern, "$1") : null; } function insertRuleAt(root, cssText, position) { try { return root.insertRule(cssText, position), !0; } catch { return !1; } } //# sourceMappingURL=createOrderedCSSStyleSheet.js.map