1082815dcSEvan Bacon"use strict"; 2082815dcSEvan Bacon 3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", { 4082815dcSEvan Bacon value: true 5082815dcSEvan Bacon}); 6082815dcSEvan Baconexports.assignStylesValue = assignStylesValue; 7082815dcSEvan Baconexports.getAppThemeLightNoActionBarGroup = getAppThemeLightNoActionBarGroup; 8082815dcSEvan Baconexports.getProjectStylesXMLPathAsync = getProjectStylesXMLPathAsync; 9082815dcSEvan Baconexports.getStyleParent = getStyleParent; 10082815dcSEvan Baconexports.getStylesGroupAsObject = getStylesGroupAsObject; 11082815dcSEvan Baconexports.getStylesItem = getStylesItem; 12082815dcSEvan Baconexports.readStylesXMLAsync = readStylesXMLAsync; 13082815dcSEvan Baconexports.removeStylesItem = removeStylesItem; 14082815dcSEvan Baconexports.setStylesItem = setStylesItem; 15082815dcSEvan Baconfunction _Paths() { 16082815dcSEvan Bacon const data = require("./Paths"); 17082815dcSEvan Bacon _Paths = function () { 18082815dcSEvan Bacon return data; 19082815dcSEvan Bacon }; 20082815dcSEvan Bacon return data; 21082815dcSEvan Bacon} 22082815dcSEvan Baconfunction _Resources() { 23082815dcSEvan Bacon const data = require("./Resources"); 24082815dcSEvan Bacon _Resources = function () { 25082815dcSEvan Bacon return data; 26082815dcSEvan Bacon }; 27082815dcSEvan Bacon return data; 28082815dcSEvan Bacon} 29082815dcSEvan Bacon// Adds support for `tools:x` 30082815dcSEvan Baconconst fallbackResourceString = `<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools"></resources>`; 31082815dcSEvan Baconasync function readStylesXMLAsync({ 32082815dcSEvan Bacon path, 33082815dcSEvan Bacon fallback = fallbackResourceString 34082815dcSEvan Bacon}) { 35082815dcSEvan Bacon return (0, _Resources().readResourcesXMLAsync)({ 36082815dcSEvan Bacon path, 37082815dcSEvan Bacon fallback 38082815dcSEvan Bacon }); 39082815dcSEvan Bacon} 40082815dcSEvan Baconasync function getProjectStylesXMLPathAsync(projectRoot, { 41082815dcSEvan Bacon kind 42082815dcSEvan Bacon} = {}) { 43082815dcSEvan Bacon return (0, _Paths().getResourceXMLPathAsync)(projectRoot, { 44082815dcSEvan Bacon kind, 45082815dcSEvan Bacon name: 'styles' 46082815dcSEvan Bacon }); 47082815dcSEvan Bacon} 48082815dcSEvan Baconfunction ensureDefaultStyleResourceXML(xml) { 49082815dcSEvan Bacon var _xml, _xml$resources; 50082815dcSEvan Bacon xml = (0, _Resources().ensureDefaultResourceXML)(xml); 51082815dcSEvan Bacon if (!Array.isArray((_xml = xml) === null || _xml === void 0 ? void 0 : (_xml$resources = _xml.resources) === null || _xml$resources === void 0 ? void 0 : _xml$resources.style)) { 52082815dcSEvan Bacon xml.resources.style = []; 53082815dcSEvan Bacon } 54082815dcSEvan Bacon return xml; 55082815dcSEvan Bacon} 56082815dcSEvan Baconfunction getStyleParent(xml, group) { 57082815dcSEvan Bacon return (0, _Resources().findResourceGroup)(xml.resources.style, group); 58082815dcSEvan Bacon} 59082815dcSEvan Baconfunction getStylesItem({ 60082815dcSEvan Bacon name, 61082815dcSEvan Bacon xml, 62082815dcSEvan Bacon parent 63082815dcSEvan Bacon}) { 64082815dcSEvan Bacon xml = ensureDefaultStyleResourceXML(xml); 65082815dcSEvan Bacon const appTheme = getStyleParent(xml, parent); 66082815dcSEvan Bacon if (!appTheme) { 67082815dcSEvan Bacon return null; 68082815dcSEvan Bacon } 69082815dcSEvan Bacon if (appTheme.item) { 70082815dcSEvan Bacon const existingItem = appTheme.item.filter(({ 71082815dcSEvan Bacon $: head 72*ee216927STomasz Sapeta }) => head.name === name)[0]; 73082815dcSEvan Bacon 74*ee216927STomasz Sapeta // Don't want to 2 of the same item, so if one exists, we overwrite it 75082815dcSEvan Bacon if (existingItem) { 76082815dcSEvan Bacon return existingItem; 77082815dcSEvan Bacon } 78082815dcSEvan Bacon } 79082815dcSEvan Bacon return null; 80082815dcSEvan Bacon} 81082815dcSEvan Baconfunction setStylesItem({ 82082815dcSEvan Bacon item, 83082815dcSEvan Bacon xml, 84082815dcSEvan Bacon parent 85082815dcSEvan Bacon}) { 86082815dcSEvan Bacon xml = ensureDefaultStyleResourceXML(xml); 87082815dcSEvan Bacon let appTheme = getStyleParent(xml, parent); 88082815dcSEvan Bacon if (!appTheme) { 89082815dcSEvan Bacon appTheme = (0, _Resources().buildResourceGroup)(parent); 90082815dcSEvan Bacon xml.resources.style.push(appTheme); 91082815dcSEvan Bacon } 92082815dcSEvan Bacon if (appTheme.item) { 93082815dcSEvan Bacon const existingItem = appTheme.item.filter(({ 94082815dcSEvan Bacon $: head 95*ee216927STomasz Sapeta }) => head.name === item.$.name)[0]; 96082815dcSEvan Bacon 97*ee216927STomasz Sapeta // Don't want to 2 of the same item, so if one exists, we overwrite it 98082815dcSEvan Bacon if (existingItem) { 99082815dcSEvan Bacon existingItem._ = item._; 100082815dcSEvan Bacon existingItem.$ = item.$; 101082815dcSEvan Bacon } else { 102082815dcSEvan Bacon appTheme.item.push(item); 103082815dcSEvan Bacon } 104082815dcSEvan Bacon } else { 105082815dcSEvan Bacon appTheme.item = [item]; 106082815dcSEvan Bacon } 107082815dcSEvan Bacon return xml; 108082815dcSEvan Bacon} 109082815dcSEvan Baconfunction removeStylesItem({ 110082815dcSEvan Bacon name, 111082815dcSEvan Bacon xml, 112082815dcSEvan Bacon parent 113082815dcSEvan Bacon}) { 114082815dcSEvan Bacon xml = ensureDefaultStyleResourceXML(xml); 115082815dcSEvan Bacon const appTheme = getStyleParent(xml, parent); 116082815dcSEvan Bacon if (appTheme !== null && appTheme !== void 0 && appTheme.item) { 117082815dcSEvan Bacon const index = appTheme.item.findIndex(({ 118082815dcSEvan Bacon $: head 119082815dcSEvan Bacon }) => head.name === name); 120082815dcSEvan Bacon if (index > -1) { 121082815dcSEvan Bacon appTheme.item.splice(index, 1); 122082815dcSEvan Bacon } 123082815dcSEvan Bacon } 124082815dcSEvan Bacon return xml; 125*ee216927STomasz Sapeta} 126082815dcSEvan Bacon 127*ee216927STomasz Sapeta// This is a very common theme so make it reusable. 128082815dcSEvan Baconfunction getAppThemeLightNoActionBarGroup() { 129082815dcSEvan Bacon return { 130082815dcSEvan Bacon name: 'AppTheme', 131082815dcSEvan Bacon parent: 'Theme.AppCompat.Light.NoActionBar' 132082815dcSEvan Bacon }; 133082815dcSEvan Bacon} 134082815dcSEvan Baconfunction assignStylesValue(xml, { 135082815dcSEvan Bacon add, 136082815dcSEvan Bacon value, 137082815dcSEvan Bacon targetApi, 138082815dcSEvan Bacon name, 139082815dcSEvan Bacon parent 140082815dcSEvan Bacon}) { 141082815dcSEvan Bacon if (add) { 142082815dcSEvan Bacon return setStylesItem({ 143082815dcSEvan Bacon xml, 144082815dcSEvan Bacon parent, 145082815dcSEvan Bacon item: (0, _Resources().buildResourceItem)({ 146082815dcSEvan Bacon name, 147082815dcSEvan Bacon targetApi, 148082815dcSEvan Bacon value 149082815dcSEvan Bacon }) 150082815dcSEvan Bacon }); 151082815dcSEvan Bacon } 152082815dcSEvan Bacon return removeStylesItem({ 153082815dcSEvan Bacon xml, 154082815dcSEvan Bacon parent, 155082815dcSEvan Bacon name 156082815dcSEvan Bacon }); 157082815dcSEvan Bacon} 158*ee216927STomasz Sapeta 159082815dcSEvan Bacon/** 160082815dcSEvan Bacon * Helper to convert a styles.xml parent's children into a simple k/v pair. 161082815dcSEvan Bacon * Added for testing purposes. 162082815dcSEvan Bacon * 163082815dcSEvan Bacon * @param xml 164082815dcSEvan Bacon * @returns 165082815dcSEvan Bacon */ 166082815dcSEvan Baconfunction getStylesGroupAsObject(xml, group) { 167082815dcSEvan Bacon const xmlGroup = getStyleParent(xml, group); 168082815dcSEvan Bacon return xmlGroup !== null && xmlGroup !== void 0 && xmlGroup.item ? (0, _Resources().getResourceItemsAsObject)(xmlGroup.item) : null; 169082815dcSEvan Bacon} 170082815dcSEvan Bacon//# sourceMappingURL=Styles.js.map