{"version":3,"file":"cssVarsParser.mjs","sources":["../../../../../../../../../node_modules/@mui/system/esm/cssVars/cssVarsParser.js"],"sourcesContent":["/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n  let temp = obj;\n  keys.forEach((k, index) => {\n    if (index === keys.length - 1) {\n      if (Array.isArray(temp)) {\n        temp[Number(k)] = value;\n      } else if (temp && typeof temp === 'object') {\n        temp[k] = value;\n      }\n    } else if (temp && typeof temp === 'object') {\n      if (!temp[k]) {\n        temp[k] = arrayKeys.includes(k) ? [] : {};\n      }\n      temp = temp[k];\n    }\n  });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n *                   - the deepest key in source object is reached\n *                   - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n  function recurse(object, parentKeys = [], arrayKeys = []) {\n    Object.entries(object).forEach(([key, value]) => {\n      if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n        if (value !== undefined && value !== null) {\n          if (typeof value === 'object' && Object.keys(value).length > 0) {\n            recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n          } else {\n            callback([...parentKeys, key], value, arrayKeys);\n          }\n        }\n      }\n    });\n  }\n  recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n  if (typeof value === 'number') {\n    if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n      // CSS property that are unitless\n      return value;\n    }\n    const lastKey = keys[keys.length - 1];\n    if (lastKey.toLowerCase().includes('opacity')) {\n      // opacity values are unitless\n      return value;\n    }\n    return `${value}px`;\n  }\n  return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n *  prefix?: string,\n *  shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n *  `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n *   fontSize: 12,\n *   lineHeight: 1.2,\n *   palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n  const {\n    prefix,\n    shouldSkipGeneratingVar\n  } = options || {};\n  const css = {};\n  const vars = {};\n  const varsWithDefaults = {};\n  walkObjectDeep(theme, (keys, value, arrayKeys) => {\n    if (typeof value === 'string' || typeof value === 'number') {\n      if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n        // only create css & var if `shouldSkipGeneratingVar` return false\n        const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n        const resolvedValue = getCssValue(keys, value);\n        Object.assign(css, {\n          [cssVar]: resolvedValue\n        });\n        assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n        assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n      }\n    }\n  }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n  );\n  return {\n    css,\n    vars,\n    varsWithDefaults\n  };\n}"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,gBAAgB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,KAAK;AACtE,EAAE,IAAI,IAAI,GAAG,GAAG;AAChB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK;AAC7B,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;AAC/B,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnD,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK;AACvB,MAAM;AACN,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACjD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACpB,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;AACjD,MAAM;AACN,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,cAAc,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,KAAK;AAClE,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE;AAC5D,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACrD,MAAM,IAAI,CAAC,eAAe,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE;AACzF,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACnD,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1E,YAAY,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AACxG,UAAU,CAAC,MAAM;AACjB,YAAY,QAAQ,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;AAC5D,UAAU;AACV,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE;AACF,EAAE,OAAO,CAAC,GAAG,CAAC;AACd;AACA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK;AACrC,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjC,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AAC7F;AACA,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACnD;AACA,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AACvB,EAAE;AACF,EAAE,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE;AACtD,EAAE,MAAM;AACR,IAAI,MAAM;AACV,IAAI;AACJ,GAAG,GAAG,OAAO,IAAI,EAAE;AACnB,EAAE,MAAM,GAAG,GAAG,EAAE;AAChB,EAAE,MAAM,IAAI,GAAG,EAAE;AACjB,EAAE,MAAM,gBAAgB,GAAG,EAAE;AAC7B,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,KAAK;AACpD,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAChE,MAAM,IAAI,CAAC,uBAAuB,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC7E;AACA,QAAQ,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,QAAQ,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;AACtD,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AAC3B,UAAU,CAAC,MAAM,GAAG;AACpB,SAAS,CAAC;AACV,QAAQ,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACjE,QAAQ,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AAC/F,MAAM;AACN,IAAI;AACJ,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;AAC/B,GAAG;AACH,EAAE,OAAO;AACT,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI;AACJ,GAAG;AACH;;;;","x_google_ignoreList":[0]}