1{"version":3,"file":"Styles.js","names":["fallbackResourceString","readStylesXMLAsync","path","fallback","readResourcesXMLAsync","getProjectStylesXMLPathAsync","projectRoot","kind","getResourceXMLPathAsync","name","ensureDefaultStyleResourceXML","xml","ensureDefaultResourceXML","Array","isArray","resources","style","getStyleParent","group","findResourceGroup","getStylesItem","parent","appTheme","item","existingItem","filter","$","head","setStylesItem","buildResourceGroup","push","_","removeStylesItem","index","findIndex","splice","getAppThemeLightNoActionBarGroup","assignStylesValue","add","value","targetApi","buildResourceItem","getStylesGroupAsObject","xmlGroup","getResourceItemsAsObject"],"sources":["../../src/android/Styles.ts"],"sourcesContent":["import { getResourceXMLPathAsync } from './Paths';\nimport {\n  buildResourceGroup,\n  buildResourceItem,\n  ensureDefaultResourceXML,\n  findResourceGroup,\n  getResourceItemsAsObject,\n  readResourcesXMLAsync,\n  ResourceGroupXML,\n  ResourceItemXML,\n  ResourceKind,\n  ResourceXML,\n} from './Resources';\n\n// Adds support for `tools:x`\nconst fallbackResourceString = `<?xml version=\"1.0\" encoding=\"utf-8\"?><resources xmlns:tools=\"http://schemas.android.com/tools\"></resources>`;\n\nexport async function readStylesXMLAsync({\n  path,\n  fallback = fallbackResourceString,\n}: {\n  path: string;\n  fallback?: string | null;\n}): Promise<ResourceXML> {\n  return readResourcesXMLAsync({ path, fallback });\n}\n\nexport async function getProjectStylesXMLPathAsync(\n  projectRoot: string,\n  { kind }: { kind?: ResourceKind } = {}\n): Promise<string> {\n  return getResourceXMLPathAsync(projectRoot, { kind, name: 'styles' });\n}\n\nfunction ensureDefaultStyleResourceXML(xml: ResourceXML): ResourceXML {\n  xml = ensureDefaultResourceXML(xml);\n  if (!Array.isArray(xml?.resources?.style)) {\n    xml.resources.style = [];\n  }\n  return xml;\n}\n\nexport function getStyleParent(\n  xml: ResourceXML,\n  group: { name: string; parent?: string }\n): ResourceGroupXML | null {\n  return findResourceGroup(xml.resources.style, group);\n}\n\nexport function getStylesItem({\n  name,\n  xml,\n  parent,\n}: {\n  name: string;\n  xml: ResourceXML;\n  parent: { name: string; parent?: string };\n}): ResourceItemXML | null {\n  xml = ensureDefaultStyleResourceXML(xml);\n\n  const appTheme = getStyleParent(xml, parent);\n\n  if (!appTheme) {\n    return null;\n  }\n\n  if (appTheme.item) {\n    const existingItem = appTheme.item.filter(({ $: head }) => head.name === name)[0];\n\n    // Don't want to 2 of the same item, so if one exists, we overwrite it\n    if (existingItem) {\n      return existingItem;\n    }\n  }\n  return null;\n}\n\nexport function setStylesItem({\n  item,\n  xml,\n  parent,\n}: {\n  item: ResourceItemXML;\n  xml: ResourceXML;\n  parent: { name: string; parent: string };\n}): ResourceXML {\n  xml = ensureDefaultStyleResourceXML(xml);\n\n  let appTheme = getStyleParent(xml, parent);\n\n  if (!appTheme) {\n    appTheme = buildResourceGroup(parent);\n    xml.resources!.style!.push(appTheme);\n  }\n\n  if (appTheme.item) {\n    const existingItem = appTheme.item.filter(({ $: head }) => head.name === item.$.name)[0];\n\n    // Don't want to 2 of the same item, so if one exists, we overwrite it\n    if (existingItem) {\n      existingItem._ = item._;\n      existingItem.$ = item.$;\n    } else {\n      appTheme.item.push(item);\n    }\n  } else {\n    appTheme.item = [item];\n  }\n  return xml;\n}\n\nexport function removeStylesItem({\n  name,\n  xml,\n  parent,\n}: {\n  name: string;\n  xml: ResourceXML;\n  parent: { name: string; parent: string };\n}): ResourceXML {\n  xml = ensureDefaultStyleResourceXML(xml);\n  const appTheme = getStyleParent(xml, parent);\n  if (appTheme?.item) {\n    const index = appTheme.item.findIndex(({ $: head }: ResourceItemXML) => head.name === name);\n    if (index > -1) {\n      appTheme.item.splice(index, 1);\n    }\n  }\n  return xml;\n}\n\n// This is a very common theme so make it reusable.\nexport function getAppThemeLightNoActionBarGroup() {\n  return { name: 'AppTheme', parent: 'Theme.AppCompat.Light.NoActionBar' };\n}\n\nexport function assignStylesValue(\n  xml: ResourceXML,\n  {\n    add,\n    value,\n    targetApi,\n    name,\n    parent,\n  }: {\n    add: boolean;\n    value: string;\n    targetApi?: string;\n    name: string;\n    parent: { name: string; parent: string };\n  }\n): ResourceXML {\n  if (add) {\n    return setStylesItem({\n      xml,\n      parent,\n      item: buildResourceItem({\n        name,\n        targetApi,\n        value,\n      }),\n    });\n  }\n  return removeStylesItem({\n    xml,\n    parent,\n    name,\n  });\n}\n\n/**\n * Helper to convert a styles.xml parent's children into a simple k/v pair.\n * Added for testing purposes.\n *\n * @param xml\n * @returns\n */\nexport function getStylesGroupAsObject(\n  xml: ResourceXML,\n  group: { name: string; parent?: string }\n): Record<string, string> | null {\n  const xmlGroup = getStyleParent(xml, group);\n  return xmlGroup?.item ? getResourceItemsAsObject(xmlGroup.item) : null;\n}\n"],"mappings":"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"}