{"version":3,"sources":["jsdelivr-header.js","/npm/@cosmos.css/core@0.0.0/cosmos.js"],"names":[],"mappings":"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","file":"/npm/@cosmos.css/core@0.0.0/cosmos.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@cosmos.css/core@0.0.0/cosmos.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const path       = require('path');\r\nconst fs         = require('fs');\r\nconst css        = require('css.of');\r\n                   require('css.escape');\r\nconst components = require('./components.js');\r\n\r\nfunction doContent(source, support) {\r\n  var content   = '';\r\n  var extname   = path.extname(source);\r\n  var directory = fs.statSync(source).isDirectory();\r\n\r\n  if (!directory) {\r\n    let ext = support.includes(extname);\r\n    content = ext ? fs.readFileSync(source, 'utf8') : '';\r\n  } else {\r\n    fs.readdirSync(source).forEach(data =>\r\n      content += doContent(path.join(source, data), support)\r\n    );\r\n  }\r\n\r\n  return content;\r\n};\r\n\r\nconst unique = (array) => [ ...new Set(array) ];\r\nconst truthy = (array) => array.filter(e => e);\r\n\r\nconst outside = (value) => value.split(/\\([^()]+\\)/).filter(e => e);\r\nconst between = (value) => value.split(/(?:x|y|l|r|t|b|w|h|c)\\(/).filter(e => e).map(e => e = e.slice(0, -1));\r\n\r\nmodule.exports = {\r\n\r\n  css: function(source = '', output = 'cosmos.css', config = {}) {\r\n\r\n    if (!source) {\r\n      console.error(\r\n        '[\\x1b[36mcosmos.css\\x1b[0m]',\r\n        '\\x1b[31mERROR: No source path found.\\x1b[0m\\nPlease enter a path for your source file(s).'\r\n      );\r\n      return;\r\n    }\r\n\r\n    const cfg = {\r\n      support: [ '.html', '.jsx' ],\r\n      options: {\r\n        breakpoints: {\r\n          'sm': '@media (min-width: 30em)',\r\n          'md': '@media (min-width: 60em)',\r\n          'lg': '@media (min-width: 90em)',\r\n          ...(config.options || {}).breakpoints\r\n        },\r\n        fonts      : {\r\n          'serif': 'serif',\r\n          'sans' : 'sans-serif',\r\n          'mono' : 'monospace',\r\n          ...(config.options || {}).fonts\r\n        },\r\n        colors     : {\r\n          'navy' : '#030333',\r\n          'pink' : '#eab3d3',\r\n          'white': '#ffffff',\r\n          'black': '#000000',\r\n          ...(config.options || {}).colors\r\n        },\r\n        scales     : {\r\n          type  : {\r\n            1: '12px',\r\n            2: '14px',\r\n            3: '16px',\r\n            4: '18px',\r\n            5: '24px',\r\n            6: '30px',\r\n            7: '36px',\r\n            8: '48px',\r\n            9: '60px',\r\n            ...((config.options || {}).scales || {}).type\r\n          },\r\n          indent: {\r\n            1: '1em',\r\n            2: '2em',\r\n            3: '3em',\r\n            4: '4em',\r\n            5: '5em',\r\n            6: '6em',\r\n            7: '7em',\r\n            8: '8em',\r\n            9: '9em',\r\n            ...((config.options || {}).scales || {}).indent\r\n          },\r\n          size  : {\r\n            1: '30px',\r\n            2: '60px',\r\n            3: '90px',\r\n            4: '120px',\r\n            5: '180px',\r\n            6: '240px',\r\n            7: '360px',\r\n            8: '480px',\r\n            9: '600px',\r\n            ...((config.options || {}).scales || {}).size\r\n          },\r\n          space : {\r\n            1:  '3px',\r\n            2:  '5px',\r\n            3:  '9px',\r\n            4: '15px',\r\n            5: '30px',\r\n            6: '45px',\r\n            7: '60px',\r\n            8: '75px',\r\n            9: '90px',\r\n            ...((config.options || {}).scales || {}).space\r\n          },\r\n          border: {\r\n            1: '1px',\r\n            2: '2px',\r\n            3: '3px',\r\n            4: '4px',\r\n            5: '5px',\r\n            6: '6px',\r\n            7: '7px',\r\n            8: '8px',\r\n            9: '9px',\r\n            ...((config.options || {}).scales || {}).border\r\n          }\r\n        },\r\n        containers : {\r\n          box : '1200px',\r\n          wide: '1800px',\r\n          full: '100%'\r\n        }\r\n      }\r\n    };\r\n\r\n    const actions = {\r\n      'a' : 'active',\r\n      'al': 'any-link',\r\n      'c' : 'checked',\r\n      'b' : 'blank',\r\n      'd' : 'default',\r\n      'da': 'disabled',\r\n      'e' : 'empty',\r\n      'ea': 'enabled',\r\n      'fr': 'first',\r\n      'fc': 'first-child',\r\n      'fs': 'fullscreen',\r\n      'f' : 'focus',\r\n      'fw': 'focus-within',\r\n      'h' : 'hover',\r\n      'iv': 'invalid',\r\n      'v' : 'valid',\r\n      'vi': 'visited'\r\n    };\r\n\r\n    const support = cfg.support;\r\n    const options = cfg.options;\r\n\r\n    const content = doContent(source, support);\r\n\r\n    if (!content) {\r\n      console.warn(\r\n        '[\\x1b[36mcosmos.css\\x1b[0m]',\r\n        '\\x1b[33mWARNING: Content is empty.\\x1b[0m\\nPlease add some content and make sure your source file extensions are ok.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    const generalRegExp = RegExp(`\\\\b(?:class|className)\\\\b\\\\s*=\\\\s*(?:\"([^\"]+)\"|'([^']+)'|([^\"'<>\\\\s]+))`, 'g');\r\n    const grammarRegExp = RegExp(`^(?:(${Object.keys(actions).join('|')})\\\\.)?(?:([a-z]{1,6}):)?([0-9A-Za-z()%.+/-]+)(!)?(?:@(${Object.keys(options.breakpoints).join('|')}))?$`);\r\n\r\n    /*\r\n\r\n    /^\r\n    (?:(a|al|c|b|d|da|e|ea|fr|fc|fs|f|fw|h|iv|v|vi)\\.)?\r\n    (?:([a-z]{1,6}):)?\r\n    ([0-9A-Za-z()%.+/-]+)\r\n    (!)?\r\n    (?:@(sm|md|lg))?\r\n    ()\r\n    $/\r\n\r\n    */\r\n\r\n    var matches = [], match;\r\n\r\n    do {\r\n      match = generalRegExp.exec(content);\r\n      if (match) {\r\n        let found = match[1] || match[2] || match[3];\r\n        found && matches.push(found);\r\n      }\r\n    } while (match)\r\n\r\n    matches = matches.reduce((acc, cur) => acc.concat(cur.split(' ')), []);\r\n\r\n    // const classes = unique(truthy(matches));\r\n    const classes = [ 'f:i', 'f:b', 'f:n' ];\r\n\r\n    var normal = classes.filter(e => /(?<![^.])f:n(?![^@])/.test(e));\r\n    var bold   = classes.filter(e => /(?<![^.])f:b(?![^@])/.test(e));\r\n    var italic = classes.filter(e => /(?<![^.])f:i(?![^@])/.test(e));\r\n\r\n    function fonts(type) {\r\n      if (normal && type) {\r\n        for (let fn of normal) {\r\n          for (let ft of type) {\r\n            let n = classes.indexOf(fn);\r\n            let t = classes.indexOf(ft);\r\n            if (n > t) {\r\n              classes[n] = ft;\r\n              classes[t] = fn;\r\n            }\r\n          }\r\n        }\r\n      } else return;\r\n    }\r\n    function order(a, b) {\r\n      var array;\r\n      switch (true) {\r\n        case normal.includes(a) && normal.includes(b): {\r\n          array = normal;\r\n        }\r\n        break;\r\n        case bold.includes(a) && bold.includes(b): {\r\n          array = bold;\r\n        }\r\n        break;\r\n        case italic.includes(a) && italic.includes(b): {\r\n          array = italic;\r\n        }\r\n        break;\r\n      }\r\n      if (array) return array.indexOf(a) - array.indexOf(b);\r\n      else return;\r\n    }\r\n\r\n    fonts(bold);\r\n    fonts(italic);\r\n\r\n    classes.sort(order);\r\n\r\n    const cosmos = {};\r\n\r\n    var count = 0;\r\n\r\n    classes.forEach(name => {\r\n\r\n      if (/^debug!?$/.test(name)) {\r\n        cosmos[`.${CSS.escape(name)}`] = {\r\n          'outline': `1px solid red${name.includes('!') ? '!important' : ''}`\r\n        };\r\n        return;\r\n      }\r\n\r\n      var match = name.match(grammarRegExp);\r\n      var act, ppt, val, bpt;\r\n\r\n      if (match) {\r\n        act = match[1] || '';\r\n        ppt = match[2] || '';\r\n        val = match[3] || '';\r\n        imp = match[4] || '';\r\n        bpt = match[5] || '';\r\n      } else return;\r\n\r\n      console.log(act, ppt, val, bpt, imp);\r\n\r\n      const qualifiers = Object.values(components).filter(component =>\r\n        component(cfg).properties &&\r\n        component(cfg).properties.hasOwnProperty(ppt)\r\n      );\r\n\r\n      const def = qualifiers.find(component =>\r\n        component(cfg).values &&\r\n        component(cfg).values.hasOwnProperty(val)\r\n      );\r\n      const any = qualifiers.find(component =>\r\n        component(cfg).pattern &&\r\n        component(cfg).pattern.test(val)\r\n      );\r\n\r\n      const defnotany = def && !any;\r\n      const anynotdef = any && !def;\r\n      const component = defnotany && def || anynotdef && any;\r\n\r\n      if (component) {\r\n\r\n        const action     = actions[act];\r\n        const breakpoint = options.breakpoints[bpt];\r\n\r\n        let property = component(cfg).properties[ppt];\r\n        let value    = component(cfg).values[val] || val;\r\n\r\n        switch (true) {\r\n          case defnotany: {\r\n            switch (property) {\r\n              case 'clear': {\r\n                if (val === 'fix') {\r\n                  property = [ 'content', 'display', property ];\r\n                  value    = [ '\"\"', 'table', 'both' ];\r\n                }\r\n              }\r\n              break;\r\n              case 'font-style': {\r\n                if (val === 'n') {\r\n                  property = [ property, 'font-weight' ];\r\n                }\r\n              }\r\n              break;\r\n              case 'list-style': {\r\n                let lst = [ 'd', 'c', 's', 'dm', 'dmz', 'la', 'lg', 'lt', 'lr', 'ua', 'ug', 'ut', 'ur' ];\r\n                let lsp = [ 'i', 'o' ];\r\n                switch (true) {\r\n                  case lst.includes(val): {\r\n                    property = `${property}-type`;\r\n                  }\r\n                  break;\r\n                  case lsp.includes(val): {\r\n                    property = `${property}-position`;\r\n                  }\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n              case 'text-decoration': {\r\n                let tdl = [ 'u', 'o', 'lt' ];\r\n                let tdc = Object.keys(cfg.options.colors);\r\n                let tds = [ 's', 'ds', 'dt', 'db', 'w' ];\r\n                switch (true) {\r\n                  case tdl.includes(val): {\r\n                    property = `${property}-line`;\r\n                  }\r\n                  break;\r\n                  case tdc.includes(val): {\r\n                    property = `${property}-color`;\r\n                  }\r\n                  break;\r\n                  case tds.includes(val): {\r\n                    property = `${property}-style`;\r\n                  }\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n              case 'text-emphasis': {\r\n                let tes = [ 'f', 'o', 'c', 'oc', 'd', 'od', 'dc', 'odc', 't', 'ot', 's', 'os' ];\r\n                let tec = Object.keys(cfg.options.colors);\r\n                let tep = [ 'ol', 'or', 'ul', 'ur' ];\r\n                switch (true) {\r\n                  case tes.includes(val): {\r\n                    property = `${property}-style`;\r\n                  }\r\n                  break;\r\n                  case tec.includes(val): {\r\n                    property = `${property}-color`;\r\n                  }\r\n                  break;\r\n                  case tep.includes(val): {\r\n                    property = `${property}-position`;\r\n                  }\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n            }\r\n          }\r\n          break;\r\n          case anynotdef: {\r\n            switch (property) {\r\n              case 'background-position': {\r\n                let symbols = outside(val);\r\n                let numbers = between(val);\r\n                let checker = symbols[0];\r\n                switch (checker) {\r\n                  case 'x': {\r\n                    property = symbols[1] ? property : `${property}-x`;\r\n                    value    = numbers[1] ? `${numbers[0]} ${numbers[1]}` : numbers[0];\r\n                  }\r\n                  break;\r\n                  case 'y': {\r\n                    property = `${property}-y`;\r\n                    value    = numbers[0];\r\n                  }\r\n                  break;\r\n                  case 'l': {\r\n                    property = symbols[1] ? property : `${property}-x`;\r\n                    value    = numbers[1] ? symbols[1] === 't' && `left ${numbers[0]} top ${numbers[1]}` || symbols[1] === 'b' && `left ${numbers[0]} bottom ${numbers[1]}` : `left ${numbers[0]}`;\r\n                  }\r\n                  break;\r\n                  case 'r': {\r\n                    property = symbols[1] ? property : `${property}-x`;\r\n                    value    = numbers[1] ? symbols[1] === 't' && `right ${numbers[0]} top ${numbers[1]}` || symbols[1] === 'b' && `right ${numbers[0]} bottom ${numbers[1]}` : `right ${numbers[0]}`;\r\n                  }\r\n                  break;\r\n                  case 't': {\r\n                    property = `${property}-y`;\r\n                    value    = `top ${numbers[0]}`;\r\n                  }\r\n                  break;\r\n                  case 'b': {\r\n                    property = `${property}-y`;\r\n                    value    = `bottom ${numbers[0]}`;\r\n                  }\r\n                  break;\r\n                }\r\n                property = [ property, 'background-repeat' ];\r\n                value    = [ value, 'no-repeat' ];\r\n              }\r\n              break;\r\n              case 'background-size': {\r\n                let symbols = outside(val);\r\n                let numbers = between(val);\r\n                let checker = symbols[0];\r\n                switch (checker) {\r\n                  case 'w': {\r\n                    value = numbers[1] ? `${numbers[0]} ${numbers[1]}` : `${numbers[0]} auto`;\r\n                  }\r\n                  break;\r\n                  case 'h': {\r\n                    value = `auto ${numbers[0]}`;\r\n                  }\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n              case 'box-shadow': {\r\n                let values = val.match(component(cfg).pattern);\r\n\r\n                let x      = values[1] || '';\r\n                let y      = values[2] || '';\r\n                let blur   = values[3] || '';\r\n                let spread = values[4] || '';\r\n                let color  = values[5] || '';\r\n\r\n                value = [ between(x)[0], between(y)[0], blur, spread, color ].filter(e => e).join(' ');\r\n              }\r\n              break;\r\n              case 'font-style': {\r\n                value = `oblique ${val}`;\r\n              }\r\n              break;\r\n              case 'grid-gap': {\r\n                if (val.includes('(')) {\r\n                  let symbols = fn.outside(val);\r\n                  let numbers = fn.between(val);\r\n                  let checker = symbols[0];\r\n                  switch (checker) {\r\n                    case 'r': {\r\n                      property = symbols[1] ? [ property, 'gap' ] : [ 'grid-row-gap', 'row-gap' ];\r\n                      value    = numbers[1] ? `${numbers[0]} ${numbers[1]}` : numbers[0];\r\n                    }\r\n                    break;\r\n                    case 'c': {\r\n                      property = [ 'grid-column-gap', 'column-gap' ];\r\n                      value    = numbers[0];\r\n                    }\r\n                    break;\r\n                  }\r\n                } else value = val;\r\n              }\r\n              break;\r\n              case 'grid-row':\r\n              case 'grid-column': {\r\n                let space = val.split(/to|go/);\r\n                let start = space[0], end = space[1];\r\n                let toend = val.includes('to');\r\n                let goend = val.includes('go');\r\n                property = start ? end ? property : `${property}-start` : `${property}-end`;\r\n                value    = start ? end ? `${start} / ${toend && end || goend && 'span ' + end}` : start : end;\r\n              }\r\n              break;\r\n              case 'grid-template': {\r\n                let rows = val.split('x')[0];\r\n                let cols = val.split('x')[1];\r\n                value = `repeat(${rows}, 1fr) / repeat(${cols}, 1fr)`;\r\n              }\r\n              break;\r\n              case 'text-shadow': {\r\n                let values = val.match(component(cfg).pattern);\r\n\r\n                let x      = values[1] || '';\r\n                let y      = values[2] || '';\r\n                let blur   = values[3] || '';\r\n                let color  = values[4] || '';\r\n\r\n                value = [ between(x)[0], between(y)[0], blur, color ].filter(e => e).join(' ');\r\n              }\r\n              break;\r\n            }\r\n          }\r\n          break;\r\n        }\r\n\r\n        let selector    = `.${CSS.escape(name)}${action ? ':' + action : ''}`;\r\n        let declaration = {};\r\n\r\n        if (selector.includes('c\\\\:fix')) {\r\n          selector = `${selector}:after`;\r\n        }\r\n\r\n        switch (typeof property) {\r\n          case 'string': {\r\n            declaration[property] = imp ? value + '!important' : value;\r\n          }\r\n          break;\r\n          case 'object': {\r\n            switch (typeof value) {\r\n              case 'string':\r\n              case 'number': {\r\n                for (let i in property) {\r\n                  declaration[property[i]] = imp ? value + '!important' : value;\r\n                }\r\n              }\r\n              break;\r\n              case 'object': {\r\n                for (let i = 0; i < property.length; i++) {\r\n                  declaration[property[i]] = imp ? value[i] + '!important' : value[i];\r\n                }\r\n              }\r\n              break;\r\n            }\r\n          }\r\n          break;\r\n        }\r\n\r\n        if (!breakpoint) {\r\n          cosmos[selector] = declaration;\r\n        } else {\r\n          cosmos[breakpoint] = {\r\n            ...cosmos[breakpoint],\r\n            [selector]: declaration\r\n          };\r\n        }\r\n\r\n        count ++;\r\n\r\n      }\r\n\r\n    });\r\n\r\n    for (let key in cosmos) {\r\n      for (let i in options.breakpoints) {\r\n        if (key === options.breakpoints[i]) {\r\n          let value = cosmos[key];\r\n          delete cosmos[key];\r\n          cosmos[key] = value;\r\n        }\r\n      }\r\n    }\r\n\r\n    output = !path.extname(output) ? path.format({ root: output + '/', name: 'cosmos.css' }) : output;\r\n\r\n    path.dirname(output).split('/').reduce((acc, cur) => {\r\n      var dir = path.join(acc, cur);\r\n      if (!fs.existsSync(dir)) fs.mkdirSync(dir);\r\n      return dir;\r\n    }, '');\r\n\r\n    // fs.mkdirSync(path.dirname(output), { recursive: true });\r\n    fs.writeFileSync(output, css.of(cosmos), 'utf8');\r\n\r\n    console.info(\r\n      '[\\x1b[36mcosmos.css\\x1b[0m]',\r\n      `Generated ${count} css ${count !== 1 ? 'classes' : 'class'} in \\x1b[36m${output}\\x1b[0m.`\r\n    );\r\n\r\n    return;\r\n\r\n  }\r\n\r\n}\r\n"]}