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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"}