{"version":3,"sources":["jsdelivr-header.js","/npm/particle-emitter@0.5.0/ParticleEmitter.js"],"names":[],"mappings":"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","file":"/npm/particle-emitter@0.5.0/ParticleEmitter.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/particle-emitter@0.5.0/ParticleEmitter.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = (condition, error) => {\n    if (!condition) {\n        throw new Error(error);\n    }\n};\nconst getMap = (array = []) => new Map(array\n    .map(elem => typeof elem === 'string'\n    ? [elem, elem]\n    : (elem === null\n        ? ['', null]\n        : elem))\n    .map(([key, val]) => Array.isArray(key)\n    ? key.map(innerKey => [innerKey, val])\n    : [[key, val]])\n    .reduce((accumulator, currentValue) => {\n    currentValue.forEach(innerArray => accumulator.push(innerArray));\n    return accumulator;\n}, []));\nconst getPlainObject = (objOrPrimitive) => {\n    if (typeof objOrPrimitive === 'object') {\n        if (objOrPrimitive instanceof Map) {\n            return Array\n                .from(objOrPrimitive)\n                .map(([key, value]) => [key, getPlainObject(value)]);\n        }\n        if (Array.isArray(objOrPrimitive)) {\n            return objOrPrimitive.map(element => getPlainObject(element));\n        }\n        if (!objOrPrimitive) {\n            return null;\n        }\n        const result = {};\n        for (let key in objOrPrimitive) {\n            result[key] = getPlainObject(objOrPrimitive[key]);\n        }\n        return result;\n    }\n    return objOrPrimitive;\n};\nclass ParticleEmitter {\n    constructor(config) {\n        const { rules, mediaQueries = [], lists = [], defaultSelectorTemplate = '.$prefix$mapKey$suffix$mediaQuery', defaultRuleTemplate = '$mapValue;', } = JSON.parse(JSON.stringify(config));\n        const configWithDefaults = {\n            rules,\n            mediaQueries,\n            lists,\n            defaultSelectorTemplate,\n            defaultRuleTemplate,\n        };\n        ParticleEmitter.validate(configWithDefaults);\n        const tempRules = getMap(rules);\n        tempRules.forEach((rule) => {\n            if (rule.map) {\n                rule.map = getMap(rule.map);\n            }\n            if (rule.mapWithDefaultTemplates) {\n                rule.mapWithDefaultTemplates = getMap(rule.mapWithDefaultTemplates);\n            }\n        });\n        this.rules = tempRules;\n        this.mediaQueries = getMap(mediaQueries);\n        const tempLists = getMap(lists);\n        tempLists.forEach((val, key) => {\n            tempLists.set(key, getMap(val));\n        });\n        this.lists = tempLists;\n        this.defaultSelectorTemplate = defaultSelectorTemplate;\n        this.defaultRuleTemplate = defaultRuleTemplate;\n    }\n    static validate({ rules }) {\n        assert(rules && rules.length, 'No rules found');\n    }\n    getJson() {\n        return getPlainObject(this);\n    }\n    getCss() {\n        let css = '';\n        Array.from(this.rules).forEach(([key], index) => {\n            css += this.getRuleCss({ key, });\n            if (index < this.rules.size - 1) {\n                css += '\\n';\n            }\n        });\n        const mediaQueryDependentRules = Array\n            .from(this.rules)\n            .filter(([key, value]) => value.repeatForMediaQueries);\n        if (this.mediaQueries.size && mediaQueryDependentRules.length) {\n            let indent;\n            this.mediaQueries.forEach((mediaQueryMinMax, mediaQuery) => {\n                css += '\\n';\n                if (!mediaQuery) {\n                    mediaQuery = '';\n                    indent = '';\n                }\n                else {\n                    css += '@media screen';\n                    if (mediaQueryMinMax[0]) {\n                        css += ` and (min-width: ${mediaQueryMinMax[0]})`;\n                    }\n                    if (mediaQueryMinMax[1]) {\n                        css += ` and (max-width: ${mediaQueryMinMax[1]})`;\n                    }\n                    css += ' {\\n';\n                    indent = '  ';\n                }\n                mediaQueryDependentRules.forEach(([key, ruleDescription], index) => {\n                    css += this.getRuleCss({ indent, mediaQuery, key });\n                    if (index < mediaQueryDependentRules.length - 1) {\n                        css += '\\n';\n                    }\n                });\n                if (mediaQuery) {\n                    css += '}\\n';\n                }\n            });\n        }\n        return css;\n    }\n    getRuleDescription(key) {\n        const ruleDescription = this.rules.get(key);\n        if (!ruleDescription) {\n            throw new Error(`Cannot find rule with the key \"${key}\"`);\n        }\n        return ruleDescription;\n    }\n    getRuleCss({ indent = '', mediaQuery = '', key, }) {\n        let ruleCss = '';\n        const ruleDescription = this.getRuleDescription(key);\n        const { prefix = '', suffix = '', map, selectorTemplate = this.defaultSelectorTemplate, ruleTemplate = this.defaultRuleTemplate, staticRules = '', mapWithDefaultTemplates, repeatFor = [], } = ruleDescription;\n        if (!mediaQuery && staticRules) {\n            ruleCss += staticRules + '\\n';\n        }\n        const repeatForMaps = new Map();\n        if (map && map.size) {\n            repeatForMaps.set('map', map);\n        }\n        repeatFor.forEach(listName => {\n            const list = this.lists.get(listName);\n            if (list) {\n                repeatForMaps.set(listName, list);\n            }\n        });\n        if (repeatForMaps.size) {\n            const loops = [];\n            let depth = 0;\n            repeatForMaps.forEach((map, name) => {\n                loops.push({\n                    map: map,\n                    depth: depth,\n                    keyName: name + 'Key',\n                    valueName: name + 'Value',\n                });\n                depth++;\n            });\n            if (loops.length > 1) {\n            }\n            const looper = (loops = [], depth = 0, maxDepth = loops.length, loopStack = []) => {\n                if (depth < maxDepth) {\n                    return loops[depth].map.forEach((value, key) => {\n                        loopStack.push([key, value]);\n                        looper(loops, depth + 1, maxDepth, loopStack);\n                        loopStack.pop();\n                    });\n                }\n                else {\n                    const replacements = [\n                        ['prefix', prefix],\n                        ['suffix', suffix],\n                        ['mediaQuery', mediaQuery],\n                    ];\n                    loopStack.forEach(() => {\n                        let outputDepth = 0;\n                        loopStack.forEach(([key, value]) => {\n                            replacements.push([loops[outputDepth].keyName, key + '']);\n                            replacements.push([loops[outputDepth].valueName, value]);\n                            outputDepth++;\n                        });\n                    });\n                    let loopCss = `${indent}${selectorTemplate} { ${ruleTemplate} }\\n`;\n                    replacements.forEach(([find, replaceWith]) => {\n                        loopCss = loopCss.replace(new RegExp('\\\\$' + find, 'g'), replaceWith);\n                    });\n                    ruleCss += loopCss;\n                }\n            };\n            looper(loops);\n        }\n        if (mapWithDefaultTemplates) {\n            mapWithDefaultTemplates.forEach((value, key) => {\n                ruleCss += `${indent}${this.defaultSelectorTemplate} { ${this.defaultRuleTemplate} }\\n`\n                    .replace(/\\$prefix/g, prefix)\n                    .replace(/\\$suffix/g, suffix)\n                    .replace(/\\$mapKey/g, key)\n                    .replace(/\\$mapValue/g, value)\n                    .replace(/\\$mediaQuery/g, mediaQuery);\n            });\n        }\n        return ruleCss;\n    }\n}\nexports.default = ParticleEmitter;\n"]}