purgetss 5.2.2 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -16,6 +16,8 @@ module.exports.colores = colores;
16
16
  const purgeLabel = colores.purgeLabel;
17
17
  const helpers = require(path.resolve(__dirname, './lib/helpers'));
18
18
 
19
+ let purgingDebug = false;
20
+
19
21
  const logger = {
20
22
  info: function(...args) {
21
23
  console.log(purgeLabel, args.join(' '));
@@ -42,7 +44,7 @@ const projectPurgeTSSFolder = cwd + '/purgetss';
42
44
  const projectConfigJS = cwd + '/purgetss/config.js';
43
45
  const projectTailwindTSS = cwd + '/purgetss/tailwind.tss';
44
46
  const projectPurgeTSSFontsFolder = cwd + '/purgetss/fonts';
45
- const projecrFontAwesomeTSS = cwd + '/purgetss/fontawesome.tss';
47
+ const projectFontAwesomeTSS = cwd + '/purgetss/fontawesome.tss';
46
48
 
47
49
  // js icon modules
48
50
  const srcLibFA = path.resolve(__dirname, './dist/fontawesome.js');
@@ -94,6 +96,7 @@ const srcMaterialDesignIconsTSSFile = path.resolve(__dirname, './dist/materialde
94
96
  const srcConfigFile = path.resolve(__dirname, './lib/templates/purgetss.config.js');
95
97
 
96
98
  const configFile = (fs.existsSync(projectConfigJS)) ? require(projectConfigJS) : require(srcConfigFile);
99
+ if (!configFile.purge) configFile.purge = { mode: 'all' };
97
100
  const configOptions = (configFile.purge && configFile.purge.options) ? configFile.purge.options : false;
98
101
  const srcJMKFile = (isInstalledGlobally) ? path.resolve(__dirname, './lib/templates/alloy.jmk') : path.resolve(__dirname, './lib/templates/alloy-local.jmk');
99
102
 
@@ -101,6 +104,7 @@ const srcJMKFile = (isInstalledGlobally) ? path.resolve(__dirname, './lib/templa
101
104
 
102
105
  //! Command: purgetss
103
106
  function purgeClasses(options) {
107
+ purgingDebug = options.debug;
104
108
  if (alloyProject()) {
105
109
  start();
106
110
 
@@ -495,7 +499,7 @@ function processCustomFontAwesomeTSS(CSSFile, templateTSS, resetTSS, fontFamilie
495
499
 
496
500
  tssClasses += processFontawesomeStyles(data);
497
501
 
498
- fs.writeFileSync(projecrFontAwesomeTSS, tssClasses, err => {
502
+ fs.writeFileSync(projectFontAwesomeTSS, tssClasses, err => {
499
503
  throw err;
500
504
  });
501
505
 
@@ -762,9 +766,7 @@ function purgeCustomFonts(uniqueClasses, cleanUniqueClasses) {
762
766
  if (fs.existsSync(cwd + '/purgetss/fonts.tss')) {
763
767
  let purgedClasses = '\n// Custom Fonts styles\n';
764
768
 
765
- let sourceTSS = fs.readFileSync(cwd + '/purgetss/fonts.tss', 'utf8').split(/\r?\n/);
766
-
767
- purgedClasses += purgeFontIcons(sourceTSS, uniqueClasses, 'Purging Custom Fonts styles...', cleanUniqueClasses, []);
769
+ purgedClasses += purgeFontIcons(cwd + '/purgetss/fonts.tss', uniqueClasses, 'Purging Custom Fonts styles...', cleanUniqueClasses, []);
768
770
 
769
771
  return (purgedClasses === '\n// Custom Fonts styles\n') ? '' : purgedClasses;
770
772
  }
@@ -940,6 +942,8 @@ function getClassesOnlyFromXMLFiles() {
940
942
  }
941
943
 
942
944
  function getUniqueClasses() {
945
+ localStart();
946
+
943
947
  let viewPaths = getViewPaths();
944
948
 
945
949
  let allClasses = [];
@@ -965,6 +969,8 @@ function getUniqueClasses() {
965
969
  }
966
970
  });
967
971
 
972
+ localFinish('Get Unique Classes');
973
+
968
974
  return uniqueClasses.sort();
969
975
  }
970
976
 
@@ -986,6 +992,7 @@ function filterCharacters(uniqueClass) {
986
992
  !uniqueClass.includes('=') &&
987
993
  !uniqueClass.includes('L(') &&
988
994
  !uniqueClass.endsWith(',') &&
995
+ !uniqueClass.endsWith('.') &&
989
996
  !uniqueClass.endsWith('/');
990
997
  }
991
998
 
@@ -993,21 +1000,25 @@ function filterCharacters(uniqueClass) {
993
1000
  function buildCustomTailwind(message = 'file created!') {
994
1001
  const defaultColors = require('tailwindcss/colors');
995
1002
  const defaultTheme = require('tailwindcss/defaultTheme');
1003
+ const defaultThemeWidth = defaultTheme.width({ theme: () => (defaultTheme.spacing) });
1004
+ const defaultThemeHeight = defaultTheme.height({ theme: () => (defaultTheme.spacing) });
996
1005
 
997
1006
  removeDeprecatedColors(defaultColors);
998
1007
 
999
1008
  // !Prepare values
1000
1009
  configFile.theme.extend = configFile.theme.extend ?? {};
1001
1010
 
1011
+ let tiResets = { full: '100%' };
1012
+
1002
1013
  let allWidthsCombined = (configFile.theme.spacing)
1003
- ? { ...{ full: '100%', auto: '', screen: '' }, ...configFile.theme.spacing }
1004
- : { ...defaultTheme.width({ theme: () => (defaultTheme.spacing) }) };
1014
+ ? { ...configFile.theme.spacing, ...tiResets }
1015
+ : { ...defaultThemeWidth };
1005
1016
  let allHeightsCombined = (configFile.theme.spacing)
1006
- ? { ...{ full: '100%', auto: '', screen: '' }, ...configFile.theme.spacing }
1007
- : { ...defaultTheme.width({ theme: () => (defaultTheme.spacing) }), ...defaultTheme.height({ theme: () => (defaultTheme.spacing) }) };
1017
+ ? { ...configFile.theme.spacing, ...tiResets }
1018
+ : { ...defaultThemeHeight };
1008
1019
  let allSpacingCombined = (configFile.theme.spacing)
1009
- ? { ...{ full: '100%', auto: '', screen: '' }, ...configFile.theme.spacing }
1010
- : { ...defaultTheme.spacing, ...defaultTheme.width({ theme: () => (defaultTheme.spacing) }), ...defaultTheme.height({ theme: () => (defaultTheme.spacing) }) };
1020
+ ? { ...configFile.theme.spacing, ...tiResets }
1021
+ : { ...defaultThemeWidth, ...defaultThemeHeight };
1011
1022
 
1012
1023
  let overwritten = {
1013
1024
  width: configFile.theme.width ?? allWidthsCombined,
@@ -1019,20 +1030,20 @@ function buildCustomTailwind(message = 'file created!') {
1019
1030
  //! Remove unnecessary values
1020
1031
  removeFitMaxMin(overwritten);
1021
1032
 
1022
- let base = { colors: {}, spacing: {}, width: {}, height: {} };
1023
-
1024
- _.merge(base.colors, overwritten.colors, configFile.theme.extend.colors);
1025
- _.merge(base.spacing, overwritten.spacing, configFile.theme.extend.spacing);
1026
- _.merge(base.width, overwritten.spacing, configFile.theme.extend.spacing, overwritten.width, configFile.theme.extend.width);
1027
- _.merge(base.height, overwritten.spacing, configFile.theme.extend.spacing, overwritten.height, configFile.theme.extend.height);
1033
+ let base = {
1034
+ colors: { ...overwritten.colors, ...configFile.theme.extend.colors },
1035
+ spacing: { ...overwritten.spacing, ...configFile.theme.extend.spacing },
1036
+ columns: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12 },
1037
+ width: { ...overwritten.spacing, ...configFile.theme.extend.spacing, ...overwritten.width, ...configFile.theme.extend.width },
1038
+ height: { ...overwritten.spacing, ...configFile.theme.extend.spacing, ...overwritten.height, ...configFile.theme.extend.height },
1039
+ delay: { 0: '0ms', 25: '25ms', 50: '50ms', 250: '250ms', 350: '350ms', 400: '400ms', 450: '450ms', 600: '600ms', 800: '800ms', 900: '900ms', 2000: '2000ms', 3000: '3000ms', 4000: '4000ms', 5000: '5000ms' }
1040
+ };
1028
1041
 
1029
- // Fix any '.333333%' value to '.333334%' to propertly fit the screen
1030
1042
  fixPercentages(base.width);
1031
1043
  fixPercentages(base.height);
1032
1044
  fixPercentages(base.spacing);
1033
1045
 
1034
1046
  let configThemeFile = {};
1035
-
1036
1047
  //! Process custom Window, View and ImageView
1037
1048
  configThemeFile.Window = (configFile.theme.Window && configFile.theme.Window.apply)
1038
1049
  ? _.merge({ apply: configFile.theme.Window.apply }, configFile.theme.Window)
@@ -1052,9 +1063,13 @@ function buildCustomTailwind(message = 'file created!') {
1052
1063
  configThemeFile.height = base.height;
1053
1064
  configThemeFile.width = base.width;
1054
1065
  configThemeFile.margin = combineKeys(configFile.theme, base.spacing, 'margin');
1066
+ configThemeFile.margin2 = combineKeys(configFile.theme, base.spacing, 'margin');
1055
1067
 
1056
1068
  //! Properties with constant values
1069
+ // configThemeFile.audioStreamType = {};
1070
+ // configThemeFile.category = {};
1057
1071
  configThemeFile.accessibilityHidden = {};
1072
+ configThemeFile.accessoryType = {};
1058
1073
  configThemeFile.activeIconIsMask = {};
1059
1074
  configThemeFile.activityEnterTransition = {};
1060
1075
  configThemeFile.activityExitTransition = {};
@@ -1066,6 +1081,8 @@ function buildCustomTailwind(message = 'file created!') {
1066
1081
  configThemeFile.activitySharedElementReenterTransition = {};
1067
1082
  configThemeFile.activitySharedElementReturnTransition = {};
1068
1083
  configThemeFile.alertDialogStyle = {};
1084
+ configThemeFile.allowsBackForwardNavigationGestures = {};
1085
+ configThemeFile.allowsLinkPreview = {};
1069
1086
  configThemeFile.allowsMultipleSelectionDuringEditing = {};
1070
1087
  configThemeFile.allowsMultipleSelectionInteraction = {};
1071
1088
  configThemeFile.allowsSelection = {};
@@ -1078,6 +1095,7 @@ function buildCustomTailwind(message = 'file created!') {
1078
1095
  configThemeFile.autofillType = {};
1079
1096
  configThemeFile.autoLink = {};
1080
1097
  configThemeFile.autoreverse = {};
1098
+ configThemeFile.autorotate = {};
1081
1099
  configThemeFile.backgroundBlendMode = {};
1082
1100
  configThemeFile.backgroundLinearGradient = {};
1083
1101
  configThemeFile.backgroundRadialGradient = {};
@@ -1085,14 +1103,26 @@ function buildCustomTailwind(message = 'file created!') {
1085
1103
  configThemeFile.borderStyle = {};
1086
1104
  configThemeFile.bubbleParent = {};
1087
1105
  configThemeFile.buttonStyle = {};
1088
- configThemeFile.cacheSize = {};
1106
+ configThemeFile.cacheMode = {};
1107
+ configThemeFile.cachePolicy = {};
1108
+ configThemeFile.calendarViewShown = {};
1109
+ configThemeFile.canCancelEvents = {};
1089
1110
  configThemeFile.canDelete = {};
1111
+ configThemeFile.canEdit = {};
1112
+ configThemeFile.canInsert = {};
1113
+ configThemeFile.canMove = {};
1090
1114
  configThemeFile.canScroll = {};
1091
1115
  configThemeFile.caseInsensitiveSearch = {};
1116
+ configThemeFile.checkable = {};
1117
+ configThemeFile.clearButtonMode = {};
1118
+ configThemeFile.clearOnEdit = {};
1092
1119
  configThemeFile.clipMode = {};
1120
+ configThemeFile.contentHeightAndWidth = {};
1121
+ configThemeFile.datePickerStyle = {};
1093
1122
  configThemeFile.defaultItemTemplate = {};
1094
1123
  configThemeFile.dimBackgroundForSearch = {};
1095
1124
  configThemeFile.disableBounce = {};
1125
+ configThemeFile.disableContextMenu = {};
1096
1126
  configThemeFile.displayCaps = {};
1097
1127
  configThemeFile.displayHomeAsUp = {};
1098
1128
  configThemeFile.displayUtilities = {};
@@ -1101,11 +1131,13 @@ function buildCustomTailwind(message = 'file created!') {
1101
1131
  configThemeFile.drawerIndicatorEnabled = {};
1102
1132
  configThemeFile.drawerLockMode = {};
1103
1133
  configThemeFile.dropShadow = {};
1134
+ configThemeFile.duration = {};
1104
1135
  configThemeFile.editable = {};
1105
1136
  configThemeFile.editing = {};
1106
1137
  configThemeFile.ellipsize = {};
1107
1138
  configThemeFile.enableCopy = {};
1108
1139
  configThemeFile.enabled = {};
1140
+ configThemeFile.enableJavascriptInterface = {};
1109
1141
  configThemeFile.enableReturnKey = {};
1110
1142
  configThemeFile.enableZoomControls = {};
1111
1143
  configThemeFile.exitOnClose = {};
@@ -1116,15 +1148,25 @@ function buildCustomTailwind(message = 'file created!') {
1116
1148
  configThemeFile.filterAnchored = {};
1117
1149
  configThemeFile.filterAttribute = {};
1118
1150
  configThemeFile.filterCaseInsensitive = {};
1151
+ configThemeFile.filterTouchesWhenObscured = {};
1152
+ configThemeFile.flags = {};
1119
1153
  configThemeFile.flagSecure = {};
1120
1154
  configThemeFile.flip = {};
1155
+ configThemeFile.focusable = {};
1121
1156
  configThemeFile.fontStyle = {};
1122
1157
  configThemeFile.footerDividersEnabled = {};
1158
+ configThemeFile.format24 = {};
1123
1159
  configThemeFile.fullscreen = {};
1160
+ configThemeFile.gravity = {};
1124
1161
  configThemeFile.gridColumnsStartEnd = {};
1125
1162
  configThemeFile.gridFlow = {};
1126
1163
  configThemeFile.gridSystem = {};
1164
+ configThemeFile.hasCheck = {};
1165
+ configThemeFile.hasChild = {};
1166
+ configThemeFile.hasDetail = {};
1127
1167
  configThemeFile.headerDividersEnabled = {};
1168
+ configThemeFile.hiddenBehavior = {};
1169
+ configThemeFile.hideLoadIndicator = {};
1128
1170
  configThemeFile.hidesBackButton = {};
1129
1171
  configThemeFile.hidesBarsOnSwipe = {};
1130
1172
  configThemeFile.hidesBarsOnTap = {};
@@ -1132,41 +1174,57 @@ function buildCustomTailwind(message = 'file created!') {
1132
1174
  configThemeFile.hideSearchOnSelection = {};
1133
1175
  configThemeFile.hideShadow = {};
1134
1176
  configThemeFile.hidesSearchBarWhenScrolling = {};
1177
+ configThemeFile.hintType = {};
1135
1178
  configThemeFile.hires = {};
1136
1179
  configThemeFile.homeButtonEnabled = {};
1137
1180
  configThemeFile.homeIndicatorAutoHidden = {};
1181
+ configThemeFile.horizontalWrap = {};
1138
1182
  configThemeFile.html = {};
1183
+ configThemeFile.icon = {};
1139
1184
  configThemeFile.iconified = {};
1140
1185
  configThemeFile.iconifiedByDefault = {};
1141
1186
  configThemeFile.iconIsMask = {};
1187
+ configThemeFile.ignoreSslError = {};
1188
+ configThemeFile.imageTouchFeedback = {};
1189
+ configThemeFile.includeFontPadding = {};
1142
1190
  configThemeFile.includeOpaqueBars = {};
1191
+ configThemeFile.inputType = {};
1143
1192
  configThemeFile.items = {};
1144
1193
  configThemeFile.keepScreenOn = {};
1145
1194
  configThemeFile.keepSectionsInSearch = {};
1146
1195
  configThemeFile.keyboardAppearance = {};
1147
1196
  configThemeFile.keyboardDismissMode = {};
1197
+ configThemeFile.keyboardDisplayRequiresUserAction = {};
1148
1198
  configThemeFile.keyboardType = {};
1149
1199
  configThemeFile.largeTitleDisplayMode = {};
1150
1200
  configThemeFile.largeTitleEnabled = {};
1151
1201
  configThemeFile.layout = {};
1152
1202
  configThemeFile.lazyLoadingEnabled = {};
1203
+ configThemeFile.leftButtonMode = {};
1153
1204
  configThemeFile.leftDrawerLockMode = {};
1205
+ configThemeFile.lightTouchEnabled = {};
1154
1206
  configThemeFile.listViewStyle = {};
1155
1207
  configThemeFile.loginKeyboardType = {};
1156
1208
  configThemeFile.loginReturnKeyType = {};
1209
+ configThemeFile.mixedContentMode = {};
1157
1210
  configThemeFile.modal = {};
1158
1211
  configThemeFile.moveable = {};
1159
1212
  configThemeFile.moving = {};
1213
+ configThemeFile.nativeSpinner = {};
1160
1214
  configThemeFile.navBarHidden = {};
1215
+ configThemeFile.navigationMode = {};
1161
1216
  configThemeFile.orientationModes = {};
1162
1217
  configThemeFile.origin = {};
1163
1218
  configThemeFile.overlayEnabled = {};
1219
+ configThemeFile.overrideCurrentAnimation = {};
1164
1220
  configThemeFile.overScrollMode = {};
1165
1221
  configThemeFile.pagingControl = {};
1166
1222
  configThemeFile.pagingControlOnTop = {};
1167
1223
  configThemeFile.passwordKeyboardType = {};
1224
+ configThemeFile.passwordMask = {};
1168
1225
  configThemeFile.pickerType = {};
1169
1226
  configThemeFile.placement = {};
1227
+ configThemeFile.pluginState = {};
1170
1228
  configThemeFile.preventCornerOverlap = {};
1171
1229
  configThemeFile.preventDefaultImage = {};
1172
1230
  configThemeFile.previewActionStyle = {};
@@ -1176,14 +1234,15 @@ function buildCustomTailwind(message = 'file created!') {
1176
1234
  configThemeFile.progressIndicatorLocation = {};
1177
1235
  configThemeFile.progressIndicatorType = {};
1178
1236
  configThemeFile.pruneSectionsOnEdit = {};
1179
- configThemeFile.repeat = {};
1180
- configThemeFile.requestOrientation = {};
1237
+ configThemeFile.rDrawable = {};
1238
+ configThemeFile.requestedOrientation = {};
1181
1239
  configThemeFile.resultsSeparatorStyle = {};
1182
1240
  configThemeFile.returnKeyType = {};
1241
+ configThemeFile.reverse = {};
1242
+ configThemeFile.rightButtonMode = {};
1183
1243
  configThemeFile.rightDrawerLockMode = {};
1184
- configThemeFile.rowAndColumnCount = {};
1244
+ configThemeFile.scalesPageToFit = {};
1185
1245
  configThemeFile.scrollable = {};
1186
- configThemeFile.scrollableRegion = {};
1187
1246
  configThemeFile.scrollIndicators = {};
1188
1247
  configThemeFile.scrollIndicatorStyle = {};
1189
1248
  configThemeFile.scrollingEnabled = {};
@@ -1192,19 +1251,23 @@ function buildCustomTailwind(message = 'file created!') {
1192
1251
  configThemeFile.searchAsChild = {};
1193
1252
  configThemeFile.searchBarStyle = {};
1194
1253
  configThemeFile.searchHidden = {};
1195
- configThemeFile.sectionHeaderTopPadding = {};
1254
+ configThemeFile.selectionGranularity = {};
1255
+ configThemeFile.selectionOpens = {};
1196
1256
  configThemeFile.selectionStyle = {};
1197
1257
  configThemeFile.separatorStyle = {};
1198
1258
  configThemeFile.shiftMode = {};
1199
1259
  configThemeFile.showAsAction = {};
1200
1260
  configThemeFile.showBookmark = {};
1201
1261
  configThemeFile.showCancel = {};
1262
+ configThemeFile.showHorizontalScrollIndicator = {};
1202
1263
  configThemeFile.showSearchBarInNavBar = {};
1203
1264
  configThemeFile.showSelectionCheck = {};
1265
+ configThemeFile.showUndoRedoActions = {};
1204
1266
  configThemeFile.showVerticalScrollIndicator = {};
1205
1267
  configThemeFile.smoothScrollOnTabClick = {};
1206
1268
  configThemeFile.statusBarStyle = {};
1207
1269
  configThemeFile.submitEnabled = {};
1270
+ configThemeFile.suppressReturn = {};
1208
1271
  configThemeFile.sustainedPerformanceMode = {};
1209
1272
  configThemeFile.swipeToClose = {};
1210
1273
  configThemeFile.switchStyle = {};
@@ -1226,70 +1289,117 @@ function buildCustomTailwind(message = 'file created!') {
1226
1289
  configThemeFile.useCompatPadding = {};
1227
1290
  configThemeFile.useSpinner = {};
1228
1291
  configThemeFile.verticalAlign = {};
1292
+ configThemeFile.verticalBounce = {};
1293
+ configThemeFile.verticalMargin = {};
1229
1294
  configThemeFile.viewShadow = {};
1295
+ configThemeFile.willHandleTouches = {};
1230
1296
  configThemeFile.willScrollOnStatusTap = {};
1231
1297
  configThemeFile.windowPixelFormat = {};
1232
1298
  configThemeFile.windowSoftInputMode = {};
1233
1299
  configThemeFile.wobble = {};
1234
1300
 
1235
1301
  //! Configurable properties
1302
+ configThemeFile.activeTab = combineKeys(configFile.theme, base.columns, 'activeTab');
1303
+ configThemeFile.backgroundLeftCap = combineKeys(configFile.theme, base.spacing, 'backgroundLeftCap');
1304
+ configThemeFile.backgroundPaddingBottom = combineKeys(configFile.theme, base.height, 'backgroundPaddingBottom');
1305
+ configThemeFile.backgroundPaddingLeft = combineKeys(configFile.theme, base.spacing, 'backgroundPaddingLeft');
1306
+ configThemeFile.backgroundPaddingRight = combineKeys(configFile.theme, base.spacing, 'backgroundPaddingRight');
1307
+ configThemeFile.backgroundPaddingTop = combineKeys(configFile.theme, base.height, 'backgroundPaddingTop');
1308
+ configThemeFile.backgroundTopCap = combineKeys(configFile.theme, base.spacing, 'backgroundTopCap');
1236
1309
  configThemeFile.borderRadius = combineKeys(configFile.theme, defaultBorderRadius, 'borderRadius');
1237
1310
  configThemeFile.borderWidth = combineKeys(configFile.theme, defaultTheme.borderWidth, 'borderWidth');
1238
1311
  configThemeFile.bottomNavigation = combineKeys(configFile.theme, base.spacing, 'bottomNavigation');
1312
+ configThemeFile.cacheSize = combineKeys(configFile.theme, base.columns, 'cacheSize');
1313
+ configThemeFile.columnCount = combineKeys(configFile.theme, base.columns, 'columnCount');
1314
+ configThemeFile.contentHeight = combineKeys(configFile.theme, base.height, 'contentHeight');
1315
+ configThemeFile.contentWidth = combineKeys(configFile.theme, base.width, 'contentWidth');
1316
+ configThemeFile.countDownDuration = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDuration }, 'countDownDuration');
1239
1317
  configThemeFile.elevation = combineKeys(configFile.theme, base.spacing, 'elevation');
1240
1318
  configThemeFile.fontFamily = combineKeys(configFile.theme, {}, 'fontFamily');
1241
1319
  configThemeFile.fontSize = combineKeys(configFile.theme, defaultTheme.fontSize, 'fontSize');
1242
1320
  configThemeFile.fontWeight = combineKeys(configFile.theme, defaultTheme.fontWeight, 'fontWeight');
1243
1321
  configThemeFile.gap = combineKeys(configFile.theme, base.spacing, 'margin');
1322
+ configThemeFile.indentionLevel = combineKeys(configFile.theme, base.spacing, 'indentionLevel');
1323
+ configThemeFile.keyboardToolbarHeight = combineKeys(configFile.theme, base.height, 'keyboardToolbarHeight');
1324
+ configThemeFile.leftButtonPadding = combineKeys(configFile.theme, base.spacing, 'leftButtonPadding');
1244
1325
  configThemeFile.leftWidth = combineKeys(configFile.theme, base.width, 'leftWidth');
1326
+ configThemeFile.lines = combineKeys(configFile.theme, base.columns, 'lines');
1245
1327
  configThemeFile.maxElevation = combineKeys(configFile.theme, base.spacing, 'maxElevation');
1328
+ configThemeFile.maxLines = combineKeys(configFile.theme, base.columns, 'maxLines');
1246
1329
  configThemeFile.maxRowHeight = combineKeys(configFile.theme, base.height, 'maxRowHeight');
1330
+ configThemeFile.maxZoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'maxZoomScale');
1331
+ configThemeFile.minimumFontSize = combineKeys(configFile.theme, defaultTheme.fontSize, 'minimumFontSize');
1247
1332
  configThemeFile.minRowHeight = combineKeys(configFile.theme, base.height, 'minRowHeight');
1333
+ configThemeFile.minZoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'minZoomScale');
1334
+ configThemeFile.offsets = combineKeys(configFile.theme, base.height, 'offsets');
1248
1335
  configThemeFile.opacity = combineKeys(configFile.theme, defaultTheme.opacity, 'opacity');
1249
1336
  configThemeFile.padding = combineKeys(configFile.theme, base.spacing, 'padding');
1250
1337
  configThemeFile.pagingControlAlpha = combineKeys(configFile.theme, defaultTheme.opacity, 'pagingControlAlpha');
1251
1338
  configThemeFile.pagingControlHeight = combineKeys(configFile.theme, base.height, 'pagingControlHeight');
1252
- configThemeFile.pagingControlTimeout = combineKeys(configFile.theme, { ...{ '0': '0ms', '25': '25ms', '50': '50ms', '2000': '2000ms', '3000': '3000ms', '4000': '4000ms', '5000': '5000ms' }, ...defaultTheme.transitionDelay }, 'pagingControlTimeout');
1339
+ configThemeFile.pagingControlTimeout = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'pagingControlTimeout');
1340
+ configThemeFile.repeat = combineKeys(configFile.theme, base.columns, 'repeat');
1341
+ configThemeFile.repeatCount = combineKeys(configFile.theme, base.columns, 'repeatCount');
1342
+ configThemeFile.rightButtonPadding = combineKeys(configFile.theme, base.spacing, 'rightButtonPadding');
1253
1343
  configThemeFile.rightWidth = combineKeys(configFile.theme, base.width, 'rightWidth');
1254
1344
  configThemeFile.rotate = combineKeys(configFile.theme, defaultTheme.rotate, 'rotate');
1345
+ configThemeFile.rowCount = combineKeys(configFile.theme, base.columns, 'rowCount');
1255
1346
  configThemeFile.rowHeight = combineKeys(configFile.theme, base.height, 'rowHeight');
1256
1347
  configThemeFile.scale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'scale');
1348
+ configThemeFile.sectionHeaderTopPadding = combineKeys(configFile.theme, base.height, 'sectionHeaderTopPadding');
1257
1349
  configThemeFile.separatorHeight = combineKeys(configFile.theme, base.height, 'separatorHeight');
1258
1350
  configThemeFile.shadowRadius = combineKeys(configFile.theme, base.spacing, 'shadowRadius');
1259
- configThemeFile.transitionDelay = combineKeys(configFile.theme, { ...{ '0': '0ms', '25': '25ms', '50': '50ms', '250': '250ms', '350': '350ms', '400': '400ms', '450': '450ms', '600': '600ms', '800': '800ms', '900': '900ms', '2000': '2000ms', '3000': '3000ms', '4000': '4000ms', '5000': '5000ms' }, ...defaultTheme.transitionDelay }, 'transitionDelay');
1260
- configThemeFile.transitionDuration = combineKeys(configFile.theme, { ...{ '0': '0ms', '25': '25ms', '50': '50ms', '250': '250ms', '350': '350ms', '400': '400ms', '450': '450ms', '600': '600ms', '800': '800ms', '900': '900ms', '2000': '2000ms', '3000': '3000ms', '4000': '4000ms', '5000': '5000ms' }, ...defaultTheme.transitionDuration }, 'transitionDuration');
1351
+ configThemeFile.timeout = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'timeout');
1352
+ configThemeFile.transitionDelay = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'transitionDelay');
1353
+ configThemeFile.transitionDuration = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDuration }, 'transitionDuration');
1261
1354
  configThemeFile.zIndex = combineKeys(configFile.theme, defaultTheme.zIndex, 'zIndex');
1355
+ configThemeFile.zoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'zoomScale');
1262
1356
 
1263
1357
  //! Color related properties
1264
1358
  configThemeFile.activeTintColor = combineKeys(configFile.theme, base.colors, 'activeTintColor');
1265
1359
  configThemeFile.activeTitleColor = combineKeys(configFile.theme, base.colors, 'activeTitleColor');
1266
1360
  configThemeFile.backgroundColor = combineKeys(configFile.theme, base.colors, 'backgroundColor');
1361
+ configThemeFile.backgroundDisabledColor = combineKeys(configFile.theme, base.colors, 'backgroundDisabledColor');
1362
+ configThemeFile.backgroundFocusedColor = combineKeys(configFile.theme, base.colors, 'backgroundFocusedColor');
1267
1363
  configThemeFile.backgroundGradient = combineKeys(configFile.theme, base.colors, 'backgroundGradient');
1268
1364
  configThemeFile.backgroundSelectedColor = combineKeys(configFile.theme, base.colors, 'backgroundSelectedColor');
1365
+ configThemeFile.backgroundSelectedGradient = combineKeys(configFile.theme, base.colors, 'backgroundSelectedGradient');
1366
+ configThemeFile.badgeColor = combineKeys(configFile.theme, base.colors, 'badgeColor');
1269
1367
  configThemeFile.barColor = combineKeys(configFile.theme, base.colors, 'barColor');
1270
1368
  configThemeFile.borderColor = combineKeys(configFile.theme, base.colors, 'borderColor');
1271
1369
  configThemeFile.currentPageIndicatorColor = combineKeys(configFile.theme, base.colors, 'currentPageIndicatorColor');
1370
+ configThemeFile.dateTimeColor = combineKeys(configFile.theme, base.colors, 'dateTimeColor');
1272
1371
  configThemeFile.disabledColor = combineKeys(configFile.theme, base.colors, 'disabledColor');
1273
1372
  configThemeFile.dropShadowColor = combineKeys(configFile.theme, base.colors, 'shadowColor');
1373
+ configThemeFile.highlightedColor = combineKeys(configFile.theme, base.colors, 'highlightedColor');
1274
1374
  configThemeFile.hintTextColor = combineKeys(configFile.theme, base.colors, 'hintTextColor');
1375
+ configThemeFile.imageTouchFeedbackColor = combineKeys(configFile.theme, base.colors, 'imageTouchFeedbackColor');
1275
1376
  configThemeFile.indicatorColor = combineKeys(configFile.theme, base.colors, 'indicatorColor');
1377
+ configThemeFile.keyboardToolbarColor = combineKeys(configFile.theme, base.colors, 'keyboardToolbarColor');
1276
1378
  configThemeFile.navTintColor = combineKeys(configFile.theme, base.colors, 'navTintColor');
1379
+ configThemeFile.onTintColor = combineKeys(configFile.theme, base.colors, 'onTintColor');
1277
1380
  configThemeFile.pageIndicatorColor = combineKeys(configFile.theme, base.colors, 'pageIndicatorColor');
1278
1381
  configThemeFile.pagingControlColor = combineKeys(configFile.theme, base.colors, 'pagingControlColor');
1382
+ configThemeFile.placeholder = combineKeys(configFile.theme, base.colors, 'placeholder');
1383
+ configThemeFile.pullBackgroundColor = combineKeys(configFile.theme, base.colors, 'pullBackgroundColor');
1279
1384
  configThemeFile.resultsBackgroundColor = combineKeys(configFile.theme, base.colors, 'resultsBackgroundColor');
1280
1385
  configThemeFile.resultsSeparatorColor = combineKeys(configFile.theme, base.colors, 'resultsSeparatorColor');
1281
1386
  configThemeFile.selectedButtonColor = combineKeys(configFile.theme, base.colors, 'selectedButtonColor');
1282
1387
  configThemeFile.selectedColor = combineKeys(configFile.theme, base.colors, 'selectedColor');
1388
+ configThemeFile.selectedSubtitleColor = combineKeys(configFile.theme, base.colors, 'selectedSubtitleColor');
1283
1389
  configThemeFile.selectedTextColor = combineKeys(configFile.theme, base.colors, 'selectedTextColor');
1284
1390
  configThemeFile.separatorColor = combineKeys(configFile.theme, base.colors, 'separatorColor');
1391
+ configThemeFile.subtitleColor = combineKeys(configFile.theme, base.colors, 'subtitleColor');
1285
1392
  configThemeFile.tabsBackgroundColor = combineKeys(configFile.theme, base.colors, 'tabsBackgroundColor');
1286
1393
  configThemeFile.tabsBackgroundSelectedColor = combineKeys(configFile.theme, base.colors, 'tabsBackgroundSelectedColor');
1287
1394
  configThemeFile.textColor = combineKeys(configFile.theme, base.colors, 'textColor');
1395
+ configThemeFile.thumbTintColor = combineKeys(configFile.theme, base.colors, 'thumbTintColor');
1288
1396
  configThemeFile.tintColor = combineKeys(configFile.theme, base.colors, 'tintColor');
1289
1397
  configThemeFile.titleAttributesColor = combineKeys(configFile.theme, base.colors, 'titleAttributesColor');
1290
1398
  configThemeFile.titleAttributesShadowColor = combineKeys(configFile.theme, base.colors, 'titleAttributesShadowColor');
1291
1399
  configThemeFile.titleColor = combineKeys(configFile.theme, base.colors, 'titleColor');
1400
+ configThemeFile.titleTextColor = combineKeys(configFile.theme, base.colors, 'titleTextColor');
1292
1401
  configThemeFile.touchFeedbackColor = combineKeys(configFile.theme, base.colors, 'touchFeedbackColor');
1402
+ configThemeFile.trackTintColor = combineKeys(configFile.theme, base.colors, 'trackTintColor');
1293
1403
  configThemeFile.viewShadowColor = combineKeys(configFile.theme, base.colors, 'viewShadowColor');
1294
1404
 
1295
1405
  // !Some final cleanup
@@ -1383,10 +1493,16 @@ function createDefinitionsFile() {
1383
1493
  classDefinitions += fs.readFileSync(cwd + '/purgetss/fonts.tss', 'utf8').replace(/\n\/\*\*\n([\s\S]*?)\*\/\n/g, '');
1384
1494
  }
1385
1495
 
1386
- if (fs.existsSync(projecrFontAwesomeTSS)) {
1387
- classDefinitions += fs.readFileSync(projecrFontAwesomeTSS, 'utf8');
1496
+ if (fs.existsSync(projectFontAwesomeTSS)) {
1497
+ classDefinitions += fs.readFileSync(projectFontAwesomeTSS, 'utf8');
1498
+ } else {
1499
+ classDefinitions += fs.readFileSync(srcFontAwesomeTSSFile, 'utf8');
1388
1500
  }
1389
1501
 
1502
+ classDefinitions += fs.readFileSync(srcFramework7FontTSSFile, 'utf8');
1503
+
1504
+ classDefinitions += fs.readFileSync(srcMaterialDesignIconsTSSFile, 'utf8');
1505
+
1390
1506
  classDefinitions = classDefinitions
1391
1507
  .replace(`'ImageView[platform=ios]': { hires: true }\n`, '')
1392
1508
  .replace(`'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }\n`, '')
@@ -1395,7 +1511,7 @@ function createDefinitionsFile() {
1395
1511
  .replace(/{(.*)}/g, '{}')
1396
1512
  .replace(/\[(.*)\]/g, '')
1397
1513
  .replace(/\/\/(.*)\n/g, '')
1398
- .replace(/\n\n/g, '\n');
1514
+ .replace(/\n/g, '');
1399
1515
 
1400
1516
  fs.writeFileSync(cwd + '/purgetss/definitions.css', `/* Class definitions */${classDefinitions}`);
1401
1517
 
@@ -1405,8 +1521,12 @@ function createDefinitionsFile() {
1405
1521
  //! Build tailwind's custom values
1406
1522
  function helperToBuildCustomTailwindClasses(key, value) {
1407
1523
  switch (key) {
1524
+ // case 'audioStreamType':
1525
+ // case 'category':
1408
1526
  case 'accessibilityHidden':
1527
+ case 'accessoryType':
1409
1528
  case 'activeIconIsMask':
1529
+ case 'activeTab':
1410
1530
  case 'activeTintColor':
1411
1531
  case 'activeTitleColor':
1412
1532
  case 'activityEnterTransition':
@@ -1419,6 +1539,8 @@ function helperToBuildCustomTailwindClasses(key, value) {
1419
1539
  case 'activitySharedElementReenterTransition':
1420
1540
  case 'activitySharedElementReturnTransition':
1421
1541
  case 'alertDialogStyle':
1542
+ case 'allowsBackForwardNavigationGestures':
1543
+ case 'allowsLinkPreview':
1422
1544
  case 'allowsMultipleSelectionDuringEditing':
1423
1545
  case 'allowsMultipleSelectionInteraction':
1424
1546
  case 'allowsSelection':
@@ -1431,13 +1553,24 @@ function helperToBuildCustomTailwindClasses(key, value) {
1431
1553
  case 'autofillType':
1432
1554
  case 'autoLink':
1433
1555
  case 'autoreverse':
1556
+ case 'autorotate':
1434
1557
  case 'backgroundBlendMode':
1435
1558
  case 'backgroundColor':
1559
+ case 'backgroundDisabledColor':
1560
+ case 'backgroundFocusedColor':
1436
1561
  case 'backgroundGradient':
1562
+ case 'backgroundLeftCap':
1437
1563
  case 'backgroundLinearGradient':
1564
+ case 'backgroundPaddingBottom':
1565
+ case 'backgroundPaddingLeft':
1566
+ case 'backgroundPaddingRight':
1567
+ case 'backgroundPaddingTop':
1438
1568
  case 'backgroundRadialGradient':
1439
1569
  case 'backgroundRepeat':
1440
1570
  case 'backgroundSelectedColor':
1571
+ case 'backgroundSelectedGradient':
1572
+ case 'backgroundTopCap':
1573
+ case 'badgeColor':
1441
1574
  case 'barColor':
1442
1575
  case 'borderColor':
1443
1576
  case 'borderRadius':
@@ -1446,15 +1579,33 @@ function helperToBuildCustomTailwindClasses(key, value) {
1446
1579
  case 'bottomNavigation':
1447
1580
  case 'bubbleParent':
1448
1581
  case 'buttonStyle':
1582
+ case 'cacheMode':
1583
+ case 'cachePolicy':
1449
1584
  case 'cacheSize':
1585
+ case 'calendarViewShown':
1586
+ case 'canCancelEvents':
1450
1587
  case 'canDelete':
1588
+ case 'canEdit':
1589
+ case 'canInsert':
1590
+ case 'canMove':
1451
1591
  case 'canScroll':
1452
1592
  case 'caseInsensitiveSearch':
1593
+ case 'checkable':
1594
+ case 'clearButtonMode':
1595
+ case 'clearOnEdit':
1453
1596
  case 'clipMode':
1597
+ case 'columnCount':
1598
+ case 'contentHeight':
1599
+ case 'contentHeightAndWidth':
1600
+ case 'contentWidth':
1601
+ case 'countDownDuration':
1454
1602
  case 'currentPageIndicatorColor':
1603
+ case 'datePickerStyle':
1604
+ case 'dateTimeColor':
1455
1605
  case 'defaultItemTemplate':
1456
1606
  case 'dimBackgroundForSearch':
1457
1607
  case 'disableBounce':
1608
+ case 'disableContextMenu':
1458
1609
  case 'disabledColor':
1459
1610
  case 'displayCaps':
1460
1611
  case 'displayHomeAsUp':
@@ -1465,12 +1616,14 @@ function helperToBuildCustomTailwindClasses(key, value) {
1465
1616
  case 'drawerLockMode':
1466
1617
  case 'dropShadow':
1467
1618
  case 'dropShadowColor':
1619
+ case 'duration':
1468
1620
  case 'editable':
1469
1621
  case 'editing':
1470
1622
  case 'elevation':
1471
1623
  case 'ellipsize':
1472
1624
  case 'enableCopy':
1473
1625
  case 'enabled':
1626
+ case 'enableJavascriptInterface':
1474
1627
  case 'enableReturnKey':
1475
1628
  case 'enableZoomControls':
1476
1629
  case 'exitOnClose':
@@ -1481,20 +1634,30 @@ function helperToBuildCustomTailwindClasses(key, value) {
1481
1634
  case 'filterAnchored':
1482
1635
  case 'filterAttribute':
1483
1636
  case 'filterCaseInsensitive':
1637
+ case 'filterTouchesWhenObscured':
1638
+ case 'flags':
1484
1639
  case 'flagSecure':
1485
1640
  case 'flip':
1641
+ case 'focusable':
1486
1642
  case 'fontFamily':
1487
1643
  case 'fontSize':
1488
1644
  case 'fontStyle':
1489
1645
  case 'fontWeight':
1490
1646
  case 'footerDividersEnabled':
1647
+ case 'format24':
1491
1648
  case 'fullscreen':
1492
1649
  case 'gap':
1650
+ case 'gravity':
1493
1651
  case 'gridColumnsStartEnd':
1494
1652
  case 'gridFlow':
1495
1653
  case 'gridSystem':
1654
+ case 'hasCheck':
1655
+ case 'hasChild':
1656
+ case 'hasDetail':
1496
1657
  case 'headerDividersEnabled':
1497
1658
  case 'height':
1659
+ case 'hiddenBehavior':
1660
+ case 'hideLoadIndicator':
1498
1661
  case 'hidesBackButton':
1499
1662
  case 'hidesBarsOnSwipe':
1500
1663
  case 'hidesBarsOnTap':
@@ -1502,44 +1665,72 @@ function helperToBuildCustomTailwindClasses(key, value) {
1502
1665
  case 'hideSearchOnSelection':
1503
1666
  case 'hideShadow':
1504
1667
  case 'hidesSearchBarWhenScrolling':
1668
+ case 'highlightedColor':
1505
1669
  case 'hintTextColor':
1670
+ case 'hintType':
1506
1671
  case 'hires':
1507
1672
  case 'homeButtonEnabled':
1508
1673
  case 'homeIndicatorAutoHidden':
1674
+ case 'horizontalWrap':
1509
1675
  case 'html':
1676
+ case 'icon':
1510
1677
  case 'iconified':
1511
1678
  case 'iconifiedByDefault':
1512
1679
  case 'iconIsMask':
1680
+ case 'ignoreSslError':
1681
+ case 'imageTouchFeedback':
1682
+ case 'imageTouchFeedbackColor':
1683
+ case 'includeFontPadding':
1513
1684
  case 'includeOpaqueBars':
1685
+ case 'indentionLevel':
1514
1686
  case 'indicatorColor':
1687
+ case 'inputType':
1515
1688
  case 'items':
1516
1689
  case 'keepScreenOn':
1517
1690
  case 'keepSectionsInSearch':
1518
1691
  case 'keyboardAppearance':
1519
1692
  case 'keyboardDismissMode':
1693
+ case 'keyboardDisplayRequiresUserAction':
1694
+ case 'keyboardToolbarColor':
1695
+ case 'keyboardToolbarHeight':
1520
1696
  case 'keyboardType':
1521
1697
  case 'largeTitleDisplayMode':
1522
1698
  case 'largeTitleEnabled':
1523
1699
  case 'layout':
1524
1700
  case 'lazyLoadingEnabled':
1701
+ case 'leftButtonMode':
1702
+ case 'leftButtonPadding':
1525
1703
  case 'leftDrawerLockMode':
1526
1704
  case 'leftWidth':
1705
+ case 'lightTouchEnabled':
1706
+ case 'lines':
1527
1707
  case 'listViewStyle':
1528
1708
  case 'loginKeyboardType':
1529
1709
  case 'loginReturnKeyType':
1530
1710
  case 'margin':
1711
+ case 'margin2':
1531
1712
  case 'maxElevation':
1713
+ case 'maxLines':
1532
1714
  case 'maxRowHeight':
1715
+ case 'maxZoomScale':
1716
+ case 'minimumFontSize':
1533
1717
  case 'minRowHeight':
1718
+ case 'minZoomScale':
1719
+ case 'mixedContentMode':
1534
1720
  case 'modal':
1535
1721
  case 'moveable':
1536
1722
  case 'moving':
1723
+ case 'nativeSpinner':
1537
1724
  case 'navBarHidden':
1725
+ case 'navigationMode':
1538
1726
  case 'navTintColor':
1727
+ case 'offsets':
1728
+ case 'onTintColor':
1539
1729
  case 'opacity':
1540
1730
  case 'orientationModes':
1541
1731
  case 'origin':
1542
1732
  case 'overlayEnabled':
1733
+ case 'overrideCurrentAnimation':
1543
1734
  case 'overScrollMode':
1544
1735
  case 'padding':
1545
1736
  case 'pageIndicatorColor':
@@ -1550,8 +1741,11 @@ function helperToBuildCustomTailwindClasses(key, value) {
1550
1741
  case 'pagingControlOnTop':
1551
1742
  case 'pagingControlTimeout':
1552
1743
  case 'passwordKeyboardType':
1744
+ case 'passwordMask':
1553
1745
  case 'pickerType':
1746
+ case 'placeholder':
1554
1747
  case 'placement':
1748
+ case 'pluginState':
1555
1749
  case 'preventCornerOverlap':
1556
1750
  case 'preventDefaultImage':
1557
1751
  case 'previewActionStyle':
@@ -1561,20 +1755,26 @@ function helperToBuildCustomTailwindClasses(key, value) {
1561
1755
  case 'progressIndicatorLocation':
1562
1756
  case 'progressIndicatorType':
1563
1757
  case 'pruneSectionsOnEdit':
1758
+ case 'pullBackgroundColor':
1759
+ case 'rDrawable':
1564
1760
  case 'repeat':
1565
- case 'requestOrientation':
1761
+ case 'repeatCount':
1762
+ case 'requestedOrientation':
1566
1763
  case 'resultsBackgroundColor':
1567
1764
  case 'resultsSeparatorColor':
1568
1765
  case 'resultsSeparatorStyle':
1569
1766
  case 'returnKeyType':
1767
+ case 'reverse':
1768
+ case 'rightButtonMode':
1769
+ case 'rightButtonPadding':
1570
1770
  case 'rightDrawerLockMode':
1571
1771
  case 'rightWidth':
1572
1772
  case 'rotate':
1573
- case 'rowAndColumnCount':
1773
+ case 'rowCount':
1574
1774
  case 'rowHeight':
1575
1775
  case 'scale':
1776
+ case 'scalesPageToFit':
1576
1777
  case 'scrollable':
1577
- case 'scrollableRegion':
1578
1778
  case 'scrollIndicators':
1579
1779
  case 'scrollIndicatorStyle':
1580
1780
  case 'scrollingEnabled':
@@ -1586,7 +1786,10 @@ function helperToBuildCustomTailwindClasses(key, value) {
1586
1786
  case 'sectionHeaderTopPadding':
1587
1787
  case 'selectedButtonColor':
1588
1788
  case 'selectedColor':
1789
+ case 'selectedSubtitleColor':
1589
1790
  case 'selectedTextColor':
1791
+ case 'selectionGranularity':
1792
+ case 'selectionOpens':
1590
1793
  case 'selectionStyle':
1591
1794
  case 'separatorColor':
1592
1795
  case 'separatorHeight':
@@ -1597,12 +1800,16 @@ function helperToBuildCustomTailwindClasses(key, value) {
1597
1800
  case 'showAsAction':
1598
1801
  case 'showBookmark':
1599
1802
  case 'showCancel':
1803
+ case 'showHorizontalScrollIndicator':
1600
1804
  case 'showSearchBarInNavBar':
1601
1805
  case 'showSelectionCheck':
1806
+ case 'showUndoRedoActions':
1602
1807
  case 'showVerticalScrollIndicator':
1603
1808
  case 'smoothScrollOnTabClick':
1604
1809
  case 'statusBarStyle':
1605
1810
  case 'submitEnabled':
1811
+ case 'subtitleColor':
1812
+ case 'suppressReturn':
1606
1813
  case 'sustainedPerformanceMode':
1607
1814
  case 'swipeToClose':
1608
1815
  case 'switchStyle':
@@ -1617,16 +1824,20 @@ function helperToBuildCustomTailwindClasses(key, value) {
1617
1824
  case 'textAlign':
1618
1825
  case 'textColor':
1619
1826
  case 'theme':
1827
+ case 'thumbTintColor':
1620
1828
  case 'tiMedia':
1829
+ case 'timeout':
1621
1830
  case 'tintColor':
1622
1831
  case 'titleAttributesColor':
1623
1832
  case 'titleAttributesShadow':
1624
1833
  case 'titleAttributesShadowColor':
1625
1834
  case 'titleColor':
1835
+ case 'titleTextColor':
1626
1836
  case 'toolbarEnabled':
1627
1837
  case 'touchEnabled':
1628
1838
  case 'touchFeedback':
1629
1839
  case 'touchFeedbackColor':
1840
+ case 'trackTintColor':
1630
1841
  case 'transition':
1631
1842
  case 'transitionDelay':
1632
1843
  case 'transitionDuration':
@@ -1634,14 +1845,18 @@ function helperToBuildCustomTailwindClasses(key, value) {
1634
1845
  case 'useCompatPadding':
1635
1846
  case 'useSpinner':
1636
1847
  case 'verticalAlign':
1848
+ case 'verticalBounce':
1849
+ case 'verticalMargin':
1637
1850
  case 'viewShadow':
1638
1851
  case 'viewShadowColor':
1639
1852
  case 'width':
1853
+ case 'willHandleTouches':
1640
1854
  case 'willScrollOnStatusTap':
1641
1855
  case 'windowPixelFormat':
1642
1856
  case 'windowSoftInputMode':
1643
1857
  case 'wobble':
1644
1858
  case 'zIndex':
1859
+ case 'zoomScale':
1645
1860
  return helpers[key](value);
1646
1861
 
1647
1862
  default: return helpers.customRules(value, key);
@@ -1787,6 +2002,8 @@ function backupOriginalAppTss() {
1787
2002
 
1788
2003
  //! Copy Reset template
1789
2004
  function copyResetTemplateAnd_appTSS() {
2005
+ localStart();
2006
+
1790
2007
  logger.info('Copying Reset styles...');
1791
2008
 
1792
2009
  let tempPurged = fs.readFileSync(srcResetTSSFile, 'utf8');
@@ -1800,6 +2017,8 @@ function copyResetTemplateAnd_appTSS() {
1800
2017
  }
1801
2018
  }
1802
2019
 
2020
+ localFinish('Copying Reset and ' + chalk.yellow('_app.tss') + ' styles...');
2021
+
1803
2022
  return tempPurged;
1804
2023
  }
1805
2024
 
@@ -1814,15 +2033,28 @@ function finish(customMessage = 'Finished purging in') {
1814
2033
  logger.info(customMessage, chalk.green(`${endTime.getSeconds()}s ${endTime.getMilliseconds()}ms`));
1815
2034
  }
1816
2035
 
2036
+ let localStartTime;
2037
+ function localStart() {
2038
+ localStartTime = new Date();
2039
+ };
2040
+
2041
+ function localFinish(customMessage = 'Finished purging in') {
2042
+ let localEndTime = new Date(new Date() - localStartTime);
2043
+ if (purgingDebug) logger.info(customMessage, chalk.green(`${localEndTime.getSeconds()}s ${localEndTime.getMilliseconds()}ms`));
2044
+ }
2045
+
1817
2046
  //! Purge Functions
1818
2047
  //! Tailwind
1819
2048
  function purgeTailwind(uniqueClasses) {
2049
+ localStart();
2050
+
1820
2051
  let purgedClasses = '\n// Main styles\n';
1821
2052
  let tailwindClasses = fs.readFileSync(projectTailwindTSS, 'utf8').split(/\r?\n/);
1822
2053
 
1823
2054
  if (`// config.js file updated on: ${getFileUpdatedDate(projectConfigJS)}` !== tailwindClasses[6]) {
1824
2055
  logger.info(chalk.yellow('config.js'), 'file updated!, rebuilding tailwind.tss...');
1825
2056
  buildCustomTailwind('file updated!');
2057
+ createDefinitionsFile();
1826
2058
  tailwindClasses = fs.readFileSync(projectTailwindTSS, 'utf8').split(/\r?\n/);
1827
2059
  }
1828
2060
 
@@ -1942,6 +2174,10 @@ function purgeTailwind(uniqueClasses) {
1942
2174
  // Add arbitrary values
1943
2175
  purgedClasses += (arbitraryValues !== '\n// Styles with arbitrary values\n') ? arbitraryValues : '';
1944
2176
 
2177
+ let mensaje = 'Purging ' + chalk.yellow('Custom Tailwind') + ' styles...';
2178
+
2179
+ localFinish(mensaje);
2180
+
1945
2181
  return purgedClasses;
1946
2182
  }
1947
2183
 
@@ -1955,8 +2191,8 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
1955
2191
  let purgedClasses = '';
1956
2192
  let purgingMessage = '';
1957
2193
 
1958
- if (fs.existsSync(projecrFontAwesomeTSS)) {
1959
- sourceFolder = projecrFontAwesomeTSS;
2194
+ if (fs.existsSync(projectFontAwesomeTSS)) {
2195
+ sourceFolder = projectFontAwesomeTSS;
1960
2196
  purgedClasses = '\n// Pro/Beta Font Awesome styles\n';
1961
2197
  purgingMessage = `Purging ${chalk.yellow('Pro/Beta Font Awesome')} styles...')`;
1962
2198
  } else {
@@ -1965,9 +2201,7 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
1965
2201
  purgingMessage = `Purging Default Font Awesome styles...`;
1966
2202
  }
1967
2203
 
1968
- let sourceTSS = fs.readFileSync(sourceFolder, 'utf8').split(/\r?\n/);
1969
-
1970
- purgedClasses += purgeFontIcons(sourceTSS, uniqueClasses, purgingMessage, cleanUniqueClasses, ['fa', 'fat', 'fas', 'fal', 'far', 'fab', 'fa-thin', 'fa-solid', 'fa-light', 'fa-regular', 'fa-brands', 'fontawesome', 'fontawesome-thin', 'fontawesome-solid', 'fontawesome-light', 'fontawesome-regular', 'fontawesome-brands']);
2204
+ purgedClasses += purgeFontIcons(sourceFolder, uniqueClasses, purgingMessage, cleanUniqueClasses, ['fa', 'fat', 'fas', 'fal', 'far', 'fab', 'fa-thin', 'fa-solid', 'fa-light', 'fa-regular', 'fa-brands', 'fontawesome', 'fontawesome-thin', 'fontawesome-solid', 'fontawesome-light', 'fontawesome-regular', 'fontawesome-brands']);
1971
2205
 
1972
2206
  return (purgedClasses === '\n// Pro/Beta Font Awesome styles\n' || purgedClasses === '\n// Default Font Awesome styles\n') ? '' : purgedClasses;
1973
2207
  }
@@ -1976,9 +2210,7 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
1976
2210
  function purgeMaterialDesign(uniqueClasses, cleanUniqueClasses) {
1977
2211
  let purgedClasses = '\n// Material Design Icons styles\n';
1978
2212
 
1979
- let sourceTSS = fs.readFileSync(srcMaterialDesignIconsTSSFile, 'utf8').split(/\r?\n/);
1980
-
1981
- purgedClasses += purgeFontIcons(sourceTSS, uniqueClasses, 'Purging Material Design Icons styles...', cleanUniqueClasses, ['md', 'mdo', 'mdr', 'mds', 'mdt', '.materialdesign', '.materialdesign-round', '.materialdesign-sharp', '.materialdesign-two-tone', '.materialdesign-outlined', '.material-icons', '.material-icons-round', '.material-icons-sharp', '.material-icons-two-tone', '.material-icons-outlined']);
2213
+ purgedClasses += purgeFontIcons(srcMaterialDesignIconsTSSFile, uniqueClasses, 'Purging Material Design Icons styles...', cleanUniqueClasses, ['md', 'mdo', 'mdr', 'mds', 'mdt', '.materialdesign', '.materialdesign-round', '.materialdesign-sharp', '.materialdesign-two-tone', '.materialdesign-outlined', '.material-icons', '.material-icons-round', '.material-icons-sharp', '.material-icons-two-tone', '.material-icons-outlined']);
1982
2214
 
1983
2215
  return (purgedClasses === '\n// Material Design Icons styles\n') ? '' : purgedClasses;
1984
2216
  }
@@ -1987,52 +2219,42 @@ function purgeMaterialDesign(uniqueClasses, cleanUniqueClasses) {
1987
2219
  function purgeFramework7(uniqueClasses, cleanUniqueClasses) {
1988
2220
  let purgedClasses = '\n// Framework7 styles\n';
1989
2221
 
1990
- let sourceTSS = fs.readFileSync(srcFramework7FontTSSFile, 'utf8').split(/\r?\n/);
1991
-
1992
- purgedClasses += purgeFontIcons(sourceTSS, uniqueClasses, 'Purging Framework7 Icons styles...', cleanUniqueClasses, ['f7', 'f7i', 'framework7']);
2222
+ purgedClasses += purgeFontIcons(srcFramework7FontTSSFile, uniqueClasses, 'Purging Framework7 Icons styles...', cleanUniqueClasses, ['f7', 'f7i', 'framework7']);
1993
2223
 
1994
2224
  return (purgedClasses === '\n// Framework7 styles\n') ? '' : purgedClasses;
1995
2225
  }
1996
2226
 
1997
- function purgeFontIcons(sourceTSS, uniqueClasses, message, cleanUniqueClasses, prefixes) {
2227
+ function purgeFontIcons(sourceFolder, uniqueClasses, message, cleanUniqueClasses, prefixes) {
2228
+ localStart();
2229
+
1998
2230
  let purgedClasses = '';
1999
- let soc = sourceTSS.toString();
2000
-
2001
- if (prefixes.length > 0) {
2002
- if (cleanUniqueClasses.some(element => prefixes.includes(element))) {
2003
- logger.info(message);
2004
- uniqueClasses.forEach(className => {
2005
- let cleanClassName = cleanClassNameFn(className);
2006
- if (soc.includes(`'.${cleanClassName}'`)) {
2007
- sourceTSS.forEach(line => {
2008
- if (line.startsWith(`'.${cleanClassName}'`)) {
2009
- purgedClasses += helpers.checkPlatformAndDevice(line, uniqueClasses[uniqueClasses.indexOf(className)]);
2010
- }
2011
- });
2012
- }
2013
- });
2014
- }
2015
- } else {
2231
+ let sourceTSS = fs.readFileSync(sourceFolder, 'utf8');
2232
+
2233
+ if (cleanUniqueClasses.some(element => sourceTSS.includes(`'.${element}'`))) {
2016
2234
  logger.info(message);
2235
+ let sourceTSSFile = sourceTSS.split(/\r?\n/);
2017
2236
  uniqueClasses.forEach(className => {
2018
2237
  let cleanClassName = cleanClassNameFn(className);
2019
- if (soc.includes(`'.${cleanClassName}'`)) {
2020
- sourceTSS.forEach(line => {
2021
- if (line.startsWith(`'.${cleanClassName}'`)) {
2022
- purgedClasses += helpers.checkPlatformAndDevice(line, uniqueClasses[uniqueClasses.indexOf(className)]);
2023
- }
2024
- });
2238
+ if (sourceTSS.includes(`'.${cleanClassName}'`)) {
2239
+ let newLine = _.filter(sourceTSSFile, s => s.indexOf(`'.${cleanClassName}'`) !== -1)[0];
2240
+ purgedClasses += helpers.checkPlatformAndDevice(newLine, className);
2025
2241
  }
2026
2242
  });
2027
2243
  }
2028
2244
 
2245
+ localFinish(message);
2246
+
2029
2247
  return purgedClasses;
2030
2248
  }
2031
2249
 
2032
2250
  function saveFile(file, data) {
2251
+ localStart();
2252
+
2033
2253
  fs.writeFileSync(file, data, err => {
2034
2254
  throw err;
2035
2255
  });
2256
+
2257
+ localFinish(`Saving ${chalk.yellow('app.tss')}...`);
2036
2258
  }
2037
2259
 
2038
2260
  function createJMKFile() {