purgetss 5.2.2 → 5.3.3
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/README.md +37 -1
- package/assets/images/class-completion-2.gif +0 -0
- package/bin/purgetss +3 -1
- package/dist/tailwind.tss +6897 -1183
- package/docs/new-glossary.md +30 -28
- package/docs/whats-new/v5.2.1.md +1 -1
- package/docs/whats-new/v5.3.1.md +1850 -0
- package/index.js +298 -71
- package/lib/helpers.js +4820 -3272
- package/package.json +1 -1
- package/assets/images/class-completion.gif +0 -0
- package/old-index.js +0 -1980
- package/purgetss.config.js +0 -950
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
|
|
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,10 +104,11 @@ 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
|
|
|
107
|
-
init();
|
|
111
|
+
init(options);
|
|
108
112
|
|
|
109
113
|
backupOriginalAppTss();
|
|
110
114
|
|
|
@@ -139,19 +143,19 @@ function purgeClasses(options) {
|
|
|
139
143
|
}
|
|
140
144
|
module.exports.purgeClasses = purgeClasses;
|
|
141
145
|
|
|
142
|
-
function init() {
|
|
146
|
+
function init(options) {
|
|
143
147
|
// config file
|
|
144
148
|
if (!fs.existsSync(projectConfigJS)) {
|
|
145
149
|
createConfigFile();
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
// tailwind.tss
|
|
149
|
-
if (!fs.existsSync(projectTailwindTSS)) {
|
|
153
|
+
if (!fs.existsSync(projectTailwindTSS) || options.all) {
|
|
150
154
|
buildCustomTailwind('file created!');
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
// definitios file
|
|
154
|
-
if (!fs.existsSync(cwd + '/purgetss/definitions.css')) {
|
|
158
|
+
if (!fs.existsSync(cwd + '/purgetss/definitions.css') || options.all) {
|
|
155
159
|
createDefinitionsFile();
|
|
156
160
|
}
|
|
157
161
|
|
|
@@ -461,11 +465,11 @@ function buildCustomFonts(options) {
|
|
|
461
465
|
}
|
|
462
466
|
|
|
463
467
|
if (files.length > 0) {
|
|
464
|
-
console.log();
|
|
465
|
-
|
|
466
|
-
finish(`Finished building ${chalk.yellow('fonts.tss')} in`);
|
|
467
468
|
|
|
468
469
|
createDefinitionsFile();
|
|
470
|
+
|
|
471
|
+
console.log();
|
|
472
|
+
finish(`Finished building ${chalk.yellow('fonts.tss')} in`);
|
|
469
473
|
} else {
|
|
470
474
|
logger.info('No fonts found in', chalk.yellow('./purgetss/fonts'), 'folder!');
|
|
471
475
|
}
|
|
@@ -495,7 +499,7 @@ function processCustomFontAwesomeTSS(CSSFile, templateTSS, resetTSS, fontFamilie
|
|
|
495
499
|
|
|
496
500
|
tssClasses += processFontawesomeStyles(data);
|
|
497
501
|
|
|
498
|
-
fs.writeFileSync(
|
|
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
|
-
|
|
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
|
-
? { ...
|
|
1004
|
-
: { ...
|
|
1014
|
+
? { ...configFile.theme.spacing, ...tiResets }
|
|
1015
|
+
: { ...defaultThemeWidth };
|
|
1005
1016
|
let allHeightsCombined = (configFile.theme.spacing)
|
|
1006
|
-
? { ...
|
|
1007
|
-
: { ...
|
|
1017
|
+
? { ...configFile.theme.spacing, ...tiResets }
|
|
1018
|
+
: { ...defaultThemeHeight };
|
|
1008
1019
|
let allSpacingCombined = (configFile.theme.spacing)
|
|
1009
|
-
? { ...
|
|
1010
|
-
: { ...
|
|
1020
|
+
? { ...configFile.theme.spacing, ...tiResets }
|
|
1021
|
+
: { ...defaultThemeWidth, ...defaultThemeHeight };
|
|
1011
1022
|
|
|
1012
1023
|
let overwritten = {
|
|
1013
1024
|
width: configFile.theme.width ?? allWidthsCombined,
|
|
@@ -1019,20 +1030,25 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1019
1030
|
//! Remove unnecessary values
|
|
1020
1031
|
removeFitMaxMin(overwritten);
|
|
1021
1032
|
|
|
1022
|
-
let base = {
|
|
1033
|
+
let base = {
|
|
1034
|
+
colors: {},
|
|
1035
|
+
spacing: {},
|
|
1036
|
+
width: {},
|
|
1037
|
+
height: {},
|
|
1038
|
+
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 },
|
|
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
|
+
};
|
|
1023
1041
|
|
|
1024
1042
|
_.merge(base.colors, overwritten.colors, configFile.theme.extend.colors);
|
|
1025
1043
|
_.merge(base.spacing, overwritten.spacing, configFile.theme.extend.spacing);
|
|
1026
1044
|
_.merge(base.width, overwritten.spacing, configFile.theme.extend.spacing, overwritten.width, configFile.theme.extend.width);
|
|
1027
1045
|
_.merge(base.height, overwritten.spacing, configFile.theme.extend.spacing, overwritten.height, configFile.theme.extend.height);
|
|
1028
1046
|
|
|
1029
|
-
// Fix any '.333333%' value to '.333334%' to propertly fit the screen
|
|
1030
1047
|
fixPercentages(base.width);
|
|
1031
1048
|
fixPercentages(base.height);
|
|
1032
1049
|
fixPercentages(base.spacing);
|
|
1033
1050
|
|
|
1034
1051
|
let configThemeFile = {};
|
|
1035
|
-
|
|
1036
1052
|
//! Process custom Window, View and ImageView
|
|
1037
1053
|
configThemeFile.Window = (configFile.theme.Window && configFile.theme.Window.apply)
|
|
1038
1054
|
? _.merge({ apply: configFile.theme.Window.apply }, configFile.theme.Window)
|
|
@@ -1052,9 +1068,13 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1052
1068
|
configThemeFile.height = base.height;
|
|
1053
1069
|
configThemeFile.width = base.width;
|
|
1054
1070
|
configThemeFile.margin = combineKeys(configFile.theme, base.spacing, 'margin');
|
|
1071
|
+
configThemeFile.margin2 = combineKeys(configFile.theme, base.spacing, 'margin');
|
|
1055
1072
|
|
|
1056
1073
|
//! Properties with constant values
|
|
1074
|
+
// configThemeFile.audioStreamType = {};
|
|
1075
|
+
// configThemeFile.category = {};
|
|
1057
1076
|
configThemeFile.accessibilityHidden = {};
|
|
1077
|
+
configThemeFile.accessoryType = {};
|
|
1058
1078
|
configThemeFile.activeIconIsMask = {};
|
|
1059
1079
|
configThemeFile.activityEnterTransition = {};
|
|
1060
1080
|
configThemeFile.activityExitTransition = {};
|
|
@@ -1066,6 +1086,8 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1066
1086
|
configThemeFile.activitySharedElementReenterTransition = {};
|
|
1067
1087
|
configThemeFile.activitySharedElementReturnTransition = {};
|
|
1068
1088
|
configThemeFile.alertDialogStyle = {};
|
|
1089
|
+
configThemeFile.allowsBackForwardNavigationGestures = {};
|
|
1090
|
+
configThemeFile.allowsLinkPreview = {};
|
|
1069
1091
|
configThemeFile.allowsMultipleSelectionDuringEditing = {};
|
|
1070
1092
|
configThemeFile.allowsMultipleSelectionInteraction = {};
|
|
1071
1093
|
configThemeFile.allowsSelection = {};
|
|
@@ -1078,6 +1100,7 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1078
1100
|
configThemeFile.autofillType = {};
|
|
1079
1101
|
configThemeFile.autoLink = {};
|
|
1080
1102
|
configThemeFile.autoreverse = {};
|
|
1103
|
+
configThemeFile.autorotate = {};
|
|
1081
1104
|
configThemeFile.backgroundBlendMode = {};
|
|
1082
1105
|
configThemeFile.backgroundLinearGradient = {};
|
|
1083
1106
|
configThemeFile.backgroundRadialGradient = {};
|
|
@@ -1085,14 +1108,26 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1085
1108
|
configThemeFile.borderStyle = {};
|
|
1086
1109
|
configThemeFile.bubbleParent = {};
|
|
1087
1110
|
configThemeFile.buttonStyle = {};
|
|
1088
|
-
configThemeFile.
|
|
1111
|
+
configThemeFile.cacheMode = {};
|
|
1112
|
+
configThemeFile.cachePolicy = {};
|
|
1113
|
+
configThemeFile.calendarViewShown = {};
|
|
1114
|
+
configThemeFile.canCancelEvents = {};
|
|
1089
1115
|
configThemeFile.canDelete = {};
|
|
1116
|
+
configThemeFile.canEdit = {};
|
|
1117
|
+
configThemeFile.canInsert = {};
|
|
1118
|
+
configThemeFile.canMove = {};
|
|
1090
1119
|
configThemeFile.canScroll = {};
|
|
1091
1120
|
configThemeFile.caseInsensitiveSearch = {};
|
|
1121
|
+
configThemeFile.checkable = {};
|
|
1122
|
+
configThemeFile.clearButtonMode = {};
|
|
1123
|
+
configThemeFile.clearOnEdit = {};
|
|
1092
1124
|
configThemeFile.clipMode = {};
|
|
1125
|
+
configThemeFile.contentHeightAndWidth = {};
|
|
1126
|
+
configThemeFile.datePickerStyle = {};
|
|
1093
1127
|
configThemeFile.defaultItemTemplate = {};
|
|
1094
1128
|
configThemeFile.dimBackgroundForSearch = {};
|
|
1095
1129
|
configThemeFile.disableBounce = {};
|
|
1130
|
+
configThemeFile.disableContextMenu = {};
|
|
1096
1131
|
configThemeFile.displayCaps = {};
|
|
1097
1132
|
configThemeFile.displayHomeAsUp = {};
|
|
1098
1133
|
configThemeFile.displayUtilities = {};
|
|
@@ -1101,11 +1136,13 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1101
1136
|
configThemeFile.drawerIndicatorEnabled = {};
|
|
1102
1137
|
configThemeFile.drawerLockMode = {};
|
|
1103
1138
|
configThemeFile.dropShadow = {};
|
|
1139
|
+
configThemeFile.duration = {};
|
|
1104
1140
|
configThemeFile.editable = {};
|
|
1105
1141
|
configThemeFile.editing = {};
|
|
1106
1142
|
configThemeFile.ellipsize = {};
|
|
1107
1143
|
configThemeFile.enableCopy = {};
|
|
1108
1144
|
configThemeFile.enabled = {};
|
|
1145
|
+
configThemeFile.enableJavascriptInterface = {};
|
|
1109
1146
|
configThemeFile.enableReturnKey = {};
|
|
1110
1147
|
configThemeFile.enableZoomControls = {};
|
|
1111
1148
|
configThemeFile.exitOnClose = {};
|
|
@@ -1116,15 +1153,25 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1116
1153
|
configThemeFile.filterAnchored = {};
|
|
1117
1154
|
configThemeFile.filterAttribute = {};
|
|
1118
1155
|
configThemeFile.filterCaseInsensitive = {};
|
|
1156
|
+
configThemeFile.filterTouchesWhenObscured = {};
|
|
1157
|
+
configThemeFile.flags = {};
|
|
1119
1158
|
configThemeFile.flagSecure = {};
|
|
1120
1159
|
configThemeFile.flip = {};
|
|
1160
|
+
configThemeFile.focusable = {};
|
|
1121
1161
|
configThemeFile.fontStyle = {};
|
|
1122
1162
|
configThemeFile.footerDividersEnabled = {};
|
|
1163
|
+
configThemeFile.format24 = {};
|
|
1123
1164
|
configThemeFile.fullscreen = {};
|
|
1165
|
+
configThemeFile.gravity = {};
|
|
1124
1166
|
configThemeFile.gridColumnsStartEnd = {};
|
|
1125
1167
|
configThemeFile.gridFlow = {};
|
|
1126
1168
|
configThemeFile.gridSystem = {};
|
|
1169
|
+
configThemeFile.hasCheck = {};
|
|
1170
|
+
configThemeFile.hasChild = {};
|
|
1171
|
+
configThemeFile.hasDetail = {};
|
|
1127
1172
|
configThemeFile.headerDividersEnabled = {};
|
|
1173
|
+
configThemeFile.hiddenBehavior = {};
|
|
1174
|
+
configThemeFile.hideLoadIndicator = {};
|
|
1128
1175
|
configThemeFile.hidesBackButton = {};
|
|
1129
1176
|
configThemeFile.hidesBarsOnSwipe = {};
|
|
1130
1177
|
configThemeFile.hidesBarsOnTap = {};
|
|
@@ -1132,41 +1179,57 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1132
1179
|
configThemeFile.hideSearchOnSelection = {};
|
|
1133
1180
|
configThemeFile.hideShadow = {};
|
|
1134
1181
|
configThemeFile.hidesSearchBarWhenScrolling = {};
|
|
1182
|
+
configThemeFile.hintType = {};
|
|
1135
1183
|
configThemeFile.hires = {};
|
|
1136
1184
|
configThemeFile.homeButtonEnabled = {};
|
|
1137
1185
|
configThemeFile.homeIndicatorAutoHidden = {};
|
|
1186
|
+
configThemeFile.horizontalWrap = {};
|
|
1138
1187
|
configThemeFile.html = {};
|
|
1188
|
+
configThemeFile.icon = {};
|
|
1139
1189
|
configThemeFile.iconified = {};
|
|
1140
1190
|
configThemeFile.iconifiedByDefault = {};
|
|
1141
1191
|
configThemeFile.iconIsMask = {};
|
|
1192
|
+
configThemeFile.ignoreSslError = {};
|
|
1193
|
+
configThemeFile.imageTouchFeedback = {};
|
|
1194
|
+
configThemeFile.includeFontPadding = {};
|
|
1142
1195
|
configThemeFile.includeOpaqueBars = {};
|
|
1196
|
+
configThemeFile.inputType = {};
|
|
1143
1197
|
configThemeFile.items = {};
|
|
1144
1198
|
configThemeFile.keepScreenOn = {};
|
|
1145
1199
|
configThemeFile.keepSectionsInSearch = {};
|
|
1146
1200
|
configThemeFile.keyboardAppearance = {};
|
|
1147
1201
|
configThemeFile.keyboardDismissMode = {};
|
|
1202
|
+
configThemeFile.keyboardDisplayRequiresUserAction = {};
|
|
1148
1203
|
configThemeFile.keyboardType = {};
|
|
1149
1204
|
configThemeFile.largeTitleDisplayMode = {};
|
|
1150
1205
|
configThemeFile.largeTitleEnabled = {};
|
|
1151
1206
|
configThemeFile.layout = {};
|
|
1152
1207
|
configThemeFile.lazyLoadingEnabled = {};
|
|
1208
|
+
configThemeFile.leftButtonMode = {};
|
|
1153
1209
|
configThemeFile.leftDrawerLockMode = {};
|
|
1210
|
+
configThemeFile.lightTouchEnabled = {};
|
|
1154
1211
|
configThemeFile.listViewStyle = {};
|
|
1155
1212
|
configThemeFile.loginKeyboardType = {};
|
|
1156
1213
|
configThemeFile.loginReturnKeyType = {};
|
|
1214
|
+
configThemeFile.mixedContentMode = {};
|
|
1157
1215
|
configThemeFile.modal = {};
|
|
1158
1216
|
configThemeFile.moveable = {};
|
|
1159
1217
|
configThemeFile.moving = {};
|
|
1218
|
+
configThemeFile.nativeSpinner = {};
|
|
1160
1219
|
configThemeFile.navBarHidden = {};
|
|
1220
|
+
configThemeFile.navigationMode = {};
|
|
1161
1221
|
configThemeFile.orientationModes = {};
|
|
1162
1222
|
configThemeFile.origin = {};
|
|
1163
1223
|
configThemeFile.overlayEnabled = {};
|
|
1224
|
+
configThemeFile.overrideCurrentAnimation = {};
|
|
1164
1225
|
configThemeFile.overScrollMode = {};
|
|
1165
1226
|
configThemeFile.pagingControl = {};
|
|
1166
1227
|
configThemeFile.pagingControlOnTop = {};
|
|
1167
1228
|
configThemeFile.passwordKeyboardType = {};
|
|
1229
|
+
configThemeFile.passwordMask = {};
|
|
1168
1230
|
configThemeFile.pickerType = {};
|
|
1169
1231
|
configThemeFile.placement = {};
|
|
1232
|
+
configThemeFile.pluginState = {};
|
|
1170
1233
|
configThemeFile.preventCornerOverlap = {};
|
|
1171
1234
|
configThemeFile.preventDefaultImage = {};
|
|
1172
1235
|
configThemeFile.previewActionStyle = {};
|
|
@@ -1176,14 +1239,15 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1176
1239
|
configThemeFile.progressIndicatorLocation = {};
|
|
1177
1240
|
configThemeFile.progressIndicatorType = {};
|
|
1178
1241
|
configThemeFile.pruneSectionsOnEdit = {};
|
|
1179
|
-
configThemeFile.
|
|
1180
|
-
configThemeFile.
|
|
1242
|
+
configThemeFile.rDrawable = {};
|
|
1243
|
+
configThemeFile.requestedOrientation = {};
|
|
1181
1244
|
configThemeFile.resultsSeparatorStyle = {};
|
|
1182
1245
|
configThemeFile.returnKeyType = {};
|
|
1246
|
+
configThemeFile.reverse = {};
|
|
1247
|
+
configThemeFile.rightButtonMode = {};
|
|
1183
1248
|
configThemeFile.rightDrawerLockMode = {};
|
|
1184
|
-
configThemeFile.
|
|
1249
|
+
configThemeFile.scalesPageToFit = {};
|
|
1185
1250
|
configThemeFile.scrollable = {};
|
|
1186
|
-
configThemeFile.scrollableRegion = {};
|
|
1187
1251
|
configThemeFile.scrollIndicators = {};
|
|
1188
1252
|
configThemeFile.scrollIndicatorStyle = {};
|
|
1189
1253
|
configThemeFile.scrollingEnabled = {};
|
|
@@ -1192,19 +1256,23 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1192
1256
|
configThemeFile.searchAsChild = {};
|
|
1193
1257
|
configThemeFile.searchBarStyle = {};
|
|
1194
1258
|
configThemeFile.searchHidden = {};
|
|
1195
|
-
configThemeFile.
|
|
1259
|
+
configThemeFile.selectionGranularity = {};
|
|
1260
|
+
configThemeFile.selectionOpens = {};
|
|
1196
1261
|
configThemeFile.selectionStyle = {};
|
|
1197
1262
|
configThemeFile.separatorStyle = {};
|
|
1198
1263
|
configThemeFile.shiftMode = {};
|
|
1199
1264
|
configThemeFile.showAsAction = {};
|
|
1200
1265
|
configThemeFile.showBookmark = {};
|
|
1201
1266
|
configThemeFile.showCancel = {};
|
|
1267
|
+
configThemeFile.showHorizontalScrollIndicator = {};
|
|
1202
1268
|
configThemeFile.showSearchBarInNavBar = {};
|
|
1203
1269
|
configThemeFile.showSelectionCheck = {};
|
|
1270
|
+
configThemeFile.showUndoRedoActions = {};
|
|
1204
1271
|
configThemeFile.showVerticalScrollIndicator = {};
|
|
1205
1272
|
configThemeFile.smoothScrollOnTabClick = {};
|
|
1206
1273
|
configThemeFile.statusBarStyle = {};
|
|
1207
1274
|
configThemeFile.submitEnabled = {};
|
|
1275
|
+
configThemeFile.suppressReturn = {};
|
|
1208
1276
|
configThemeFile.sustainedPerformanceMode = {};
|
|
1209
1277
|
configThemeFile.swipeToClose = {};
|
|
1210
1278
|
configThemeFile.switchStyle = {};
|
|
@@ -1226,70 +1294,117 @@ function buildCustomTailwind(message = 'file created!') {
|
|
|
1226
1294
|
configThemeFile.useCompatPadding = {};
|
|
1227
1295
|
configThemeFile.useSpinner = {};
|
|
1228
1296
|
configThemeFile.verticalAlign = {};
|
|
1297
|
+
configThemeFile.verticalBounce = {};
|
|
1298
|
+
configThemeFile.verticalMargin = {};
|
|
1229
1299
|
configThemeFile.viewShadow = {};
|
|
1300
|
+
configThemeFile.willHandleTouches = {};
|
|
1230
1301
|
configThemeFile.willScrollOnStatusTap = {};
|
|
1231
1302
|
configThemeFile.windowPixelFormat = {};
|
|
1232
1303
|
configThemeFile.windowSoftInputMode = {};
|
|
1233
1304
|
configThemeFile.wobble = {};
|
|
1234
1305
|
|
|
1235
1306
|
//! Configurable properties
|
|
1307
|
+
configThemeFile.activeTab = combineKeys(configFile.theme, base.columns, 'activeTab');
|
|
1308
|
+
configThemeFile.backgroundLeftCap = combineKeys(configFile.theme, base.spacing, 'backgroundLeftCap');
|
|
1309
|
+
configThemeFile.backgroundPaddingBottom = combineKeys(configFile.theme, base.height, 'backgroundPaddingBottom');
|
|
1310
|
+
configThemeFile.backgroundPaddingLeft = combineKeys(configFile.theme, base.spacing, 'backgroundPaddingLeft');
|
|
1311
|
+
configThemeFile.backgroundPaddingRight = combineKeys(configFile.theme, base.spacing, 'backgroundPaddingRight');
|
|
1312
|
+
configThemeFile.backgroundPaddingTop = combineKeys(configFile.theme, base.height, 'backgroundPaddingTop');
|
|
1313
|
+
configThemeFile.backgroundTopCap = combineKeys(configFile.theme, base.spacing, 'backgroundTopCap');
|
|
1236
1314
|
configThemeFile.borderRadius = combineKeys(configFile.theme, defaultBorderRadius, 'borderRadius');
|
|
1237
1315
|
configThemeFile.borderWidth = combineKeys(configFile.theme, defaultTheme.borderWidth, 'borderWidth');
|
|
1238
1316
|
configThemeFile.bottomNavigation = combineKeys(configFile.theme, base.spacing, 'bottomNavigation');
|
|
1317
|
+
configThemeFile.cacheSize = combineKeys(configFile.theme, base.columns, 'cacheSize');
|
|
1318
|
+
configThemeFile.columnCount = combineKeys(configFile.theme, base.columns, 'columnCount');
|
|
1319
|
+
configThemeFile.contentHeight = combineKeys(configFile.theme, base.height, 'contentHeight');
|
|
1320
|
+
configThemeFile.contentWidth = combineKeys(configFile.theme, base.width, 'contentWidth');
|
|
1321
|
+
configThemeFile.countDownDuration = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDuration }, 'countDownDuration');
|
|
1239
1322
|
configThemeFile.elevation = combineKeys(configFile.theme, base.spacing, 'elevation');
|
|
1240
1323
|
configThemeFile.fontFamily = combineKeys(configFile.theme, {}, 'fontFamily');
|
|
1241
1324
|
configThemeFile.fontSize = combineKeys(configFile.theme, defaultTheme.fontSize, 'fontSize');
|
|
1242
1325
|
configThemeFile.fontWeight = combineKeys(configFile.theme, defaultTheme.fontWeight, 'fontWeight');
|
|
1243
1326
|
configThemeFile.gap = combineKeys(configFile.theme, base.spacing, 'margin');
|
|
1327
|
+
configThemeFile.indentionLevel = combineKeys(configFile.theme, base.spacing, 'indentionLevel');
|
|
1328
|
+
configThemeFile.keyboardToolbarHeight = combineKeys(configFile.theme, base.height, 'keyboardToolbarHeight');
|
|
1329
|
+
configThemeFile.leftButtonPadding = combineKeys(configFile.theme, base.spacing, 'leftButtonPadding');
|
|
1244
1330
|
configThemeFile.leftWidth = combineKeys(configFile.theme, base.width, 'leftWidth');
|
|
1331
|
+
configThemeFile.lines = combineKeys(configFile.theme, base.columns, 'lines');
|
|
1245
1332
|
configThemeFile.maxElevation = combineKeys(configFile.theme, base.spacing, 'maxElevation');
|
|
1333
|
+
configThemeFile.maxLines = combineKeys(configFile.theme, base.columns, 'maxLines');
|
|
1246
1334
|
configThemeFile.maxRowHeight = combineKeys(configFile.theme, base.height, 'maxRowHeight');
|
|
1335
|
+
configThemeFile.maxZoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'maxZoomScale');
|
|
1336
|
+
configThemeFile.minimumFontSize = combineKeys(configFile.theme, defaultTheme.fontSize, 'minimumFontSize');
|
|
1247
1337
|
configThemeFile.minRowHeight = combineKeys(configFile.theme, base.height, 'minRowHeight');
|
|
1338
|
+
configThemeFile.minZoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'minZoomScale');
|
|
1339
|
+
configThemeFile.offsets = combineKeys(configFile.theme, base.height, 'offsets');
|
|
1248
1340
|
configThemeFile.opacity = combineKeys(configFile.theme, defaultTheme.opacity, 'opacity');
|
|
1249
1341
|
configThemeFile.padding = combineKeys(configFile.theme, base.spacing, 'padding');
|
|
1250
1342
|
configThemeFile.pagingControlAlpha = combineKeys(configFile.theme, defaultTheme.opacity, 'pagingControlAlpha');
|
|
1251
1343
|
configThemeFile.pagingControlHeight = combineKeys(configFile.theme, base.height, 'pagingControlHeight');
|
|
1252
|
-
configThemeFile.pagingControlTimeout = combineKeys(configFile.theme, { ...
|
|
1344
|
+
configThemeFile.pagingControlTimeout = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'pagingControlTimeout');
|
|
1345
|
+
configThemeFile.repeat = combineKeys(configFile.theme, base.columns, 'repeat');
|
|
1346
|
+
configThemeFile.repeatCount = combineKeys(configFile.theme, base.columns, 'repeatCount');
|
|
1347
|
+
configThemeFile.rightButtonPadding = combineKeys(configFile.theme, base.spacing, 'rightButtonPadding');
|
|
1253
1348
|
configThemeFile.rightWidth = combineKeys(configFile.theme, base.width, 'rightWidth');
|
|
1254
1349
|
configThemeFile.rotate = combineKeys(configFile.theme, defaultTheme.rotate, 'rotate');
|
|
1350
|
+
configThemeFile.rowCount = combineKeys(configFile.theme, base.columns, 'rowCount');
|
|
1255
1351
|
configThemeFile.rowHeight = combineKeys(configFile.theme, base.height, 'rowHeight');
|
|
1256
1352
|
configThemeFile.scale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'scale');
|
|
1353
|
+
configThemeFile.sectionHeaderTopPadding = combineKeys(configFile.theme, base.height, 'sectionHeaderTopPadding');
|
|
1257
1354
|
configThemeFile.separatorHeight = combineKeys(configFile.theme, base.height, 'separatorHeight');
|
|
1258
1355
|
configThemeFile.shadowRadius = combineKeys(configFile.theme, base.spacing, 'shadowRadius');
|
|
1259
|
-
configThemeFile.
|
|
1260
|
-
configThemeFile.
|
|
1356
|
+
configThemeFile.timeout = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'timeout');
|
|
1357
|
+
configThemeFile.transitionDelay = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDelay }, 'transitionDelay');
|
|
1358
|
+
configThemeFile.transitionDuration = combineKeys(configFile.theme, { ...base.delay, ...defaultTheme.transitionDuration }, 'transitionDuration');
|
|
1261
1359
|
configThemeFile.zIndex = combineKeys(configFile.theme, defaultTheme.zIndex, 'zIndex');
|
|
1360
|
+
configThemeFile.zoomScale = combineKeys(configFile.theme, { ...{ 5: '.05', 10: '.10', 25: '.25' }, ...defaultTheme.scale }, 'zoomScale');
|
|
1262
1361
|
|
|
1263
1362
|
//! Color related properties
|
|
1264
1363
|
configThemeFile.activeTintColor = combineKeys(configFile.theme, base.colors, 'activeTintColor');
|
|
1265
1364
|
configThemeFile.activeTitleColor = combineKeys(configFile.theme, base.colors, 'activeTitleColor');
|
|
1266
1365
|
configThemeFile.backgroundColor = combineKeys(configFile.theme, base.colors, 'backgroundColor');
|
|
1366
|
+
configThemeFile.backgroundDisabledColor = combineKeys(configFile.theme, base.colors, 'backgroundDisabledColor');
|
|
1367
|
+
configThemeFile.backgroundFocusedColor = combineKeys(configFile.theme, base.colors, 'backgroundFocusedColor');
|
|
1267
1368
|
configThemeFile.backgroundGradient = combineKeys(configFile.theme, base.colors, 'backgroundGradient');
|
|
1268
1369
|
configThemeFile.backgroundSelectedColor = combineKeys(configFile.theme, base.colors, 'backgroundSelectedColor');
|
|
1370
|
+
configThemeFile.backgroundSelectedGradient = combineKeys(configFile.theme, base.colors, 'backgroundSelectedGradient');
|
|
1371
|
+
configThemeFile.badgeColor = combineKeys(configFile.theme, base.colors, 'badgeColor');
|
|
1269
1372
|
configThemeFile.barColor = combineKeys(configFile.theme, base.colors, 'barColor');
|
|
1270
1373
|
configThemeFile.borderColor = combineKeys(configFile.theme, base.colors, 'borderColor');
|
|
1271
1374
|
configThemeFile.currentPageIndicatorColor = combineKeys(configFile.theme, base.colors, 'currentPageIndicatorColor');
|
|
1375
|
+
configThemeFile.dateTimeColor = combineKeys(configFile.theme, base.colors, 'dateTimeColor');
|
|
1272
1376
|
configThemeFile.disabledColor = combineKeys(configFile.theme, base.colors, 'disabledColor');
|
|
1273
1377
|
configThemeFile.dropShadowColor = combineKeys(configFile.theme, base.colors, 'shadowColor');
|
|
1378
|
+
configThemeFile.highlightedColor = combineKeys(configFile.theme, base.colors, 'highlightedColor');
|
|
1274
1379
|
configThemeFile.hintTextColor = combineKeys(configFile.theme, base.colors, 'hintTextColor');
|
|
1380
|
+
configThemeFile.imageTouchFeedbackColor = combineKeys(configFile.theme, base.colors, 'imageTouchFeedbackColor');
|
|
1275
1381
|
configThemeFile.indicatorColor = combineKeys(configFile.theme, base.colors, 'indicatorColor');
|
|
1382
|
+
configThemeFile.keyboardToolbarColor = combineKeys(configFile.theme, base.colors, 'keyboardToolbarColor');
|
|
1276
1383
|
configThemeFile.navTintColor = combineKeys(configFile.theme, base.colors, 'navTintColor');
|
|
1384
|
+
configThemeFile.onTintColor = combineKeys(configFile.theme, base.colors, 'onTintColor');
|
|
1277
1385
|
configThemeFile.pageIndicatorColor = combineKeys(configFile.theme, base.colors, 'pageIndicatorColor');
|
|
1278
1386
|
configThemeFile.pagingControlColor = combineKeys(configFile.theme, base.colors, 'pagingControlColor');
|
|
1387
|
+
configThemeFile.placeholder = combineKeys(configFile.theme, base.colors, 'placeholder');
|
|
1388
|
+
configThemeFile.pullBackgroundColor = combineKeys(configFile.theme, base.colors, 'pullBackgroundColor');
|
|
1279
1389
|
configThemeFile.resultsBackgroundColor = combineKeys(configFile.theme, base.colors, 'resultsBackgroundColor');
|
|
1280
1390
|
configThemeFile.resultsSeparatorColor = combineKeys(configFile.theme, base.colors, 'resultsSeparatorColor');
|
|
1281
1391
|
configThemeFile.selectedButtonColor = combineKeys(configFile.theme, base.colors, 'selectedButtonColor');
|
|
1282
1392
|
configThemeFile.selectedColor = combineKeys(configFile.theme, base.colors, 'selectedColor');
|
|
1393
|
+
configThemeFile.selectedSubtitleColor = combineKeys(configFile.theme, base.colors, 'selectedSubtitleColor');
|
|
1283
1394
|
configThemeFile.selectedTextColor = combineKeys(configFile.theme, base.colors, 'selectedTextColor');
|
|
1284
1395
|
configThemeFile.separatorColor = combineKeys(configFile.theme, base.colors, 'separatorColor');
|
|
1396
|
+
configThemeFile.subtitleColor = combineKeys(configFile.theme, base.colors, 'subtitleColor');
|
|
1285
1397
|
configThemeFile.tabsBackgroundColor = combineKeys(configFile.theme, base.colors, 'tabsBackgroundColor');
|
|
1286
1398
|
configThemeFile.tabsBackgroundSelectedColor = combineKeys(configFile.theme, base.colors, 'tabsBackgroundSelectedColor');
|
|
1287
1399
|
configThemeFile.textColor = combineKeys(configFile.theme, base.colors, 'textColor');
|
|
1400
|
+
configThemeFile.thumbTintColor = combineKeys(configFile.theme, base.colors, 'thumbTintColor');
|
|
1288
1401
|
configThemeFile.tintColor = combineKeys(configFile.theme, base.colors, 'tintColor');
|
|
1289
1402
|
configThemeFile.titleAttributesColor = combineKeys(configFile.theme, base.colors, 'titleAttributesColor');
|
|
1290
1403
|
configThemeFile.titleAttributesShadowColor = combineKeys(configFile.theme, base.colors, 'titleAttributesShadowColor');
|
|
1291
1404
|
configThemeFile.titleColor = combineKeys(configFile.theme, base.colors, 'titleColor');
|
|
1405
|
+
configThemeFile.titleTextColor = combineKeys(configFile.theme, base.colors, 'titleTextColor');
|
|
1292
1406
|
configThemeFile.touchFeedbackColor = combineKeys(configFile.theme, base.colors, 'touchFeedbackColor');
|
|
1407
|
+
configThemeFile.trackTintColor = combineKeys(configFile.theme, base.colors, 'trackTintColor');
|
|
1293
1408
|
configThemeFile.viewShadowColor = combineKeys(configFile.theme, base.colors, 'viewShadowColor');
|
|
1294
1409
|
|
|
1295
1410
|
// !Some final cleanup
|
|
@@ -1383,10 +1498,16 @@ function createDefinitionsFile() {
|
|
|
1383
1498
|
classDefinitions += fs.readFileSync(cwd + '/purgetss/fonts.tss', 'utf8').replace(/\n\/\*\*\n([\s\S]*?)\*\/\n/g, '');
|
|
1384
1499
|
}
|
|
1385
1500
|
|
|
1386
|
-
if (fs.existsSync(
|
|
1387
|
-
classDefinitions += fs.readFileSync(
|
|
1501
|
+
if (fs.existsSync(projectFontAwesomeTSS)) {
|
|
1502
|
+
classDefinitions += fs.readFileSync(projectFontAwesomeTSS, 'utf8');
|
|
1503
|
+
} else {
|
|
1504
|
+
classDefinitions += fs.readFileSync(srcFontAwesomeTSSFile, 'utf8');
|
|
1388
1505
|
}
|
|
1389
1506
|
|
|
1507
|
+
classDefinitions += fs.readFileSync(srcFramework7FontTSSFile, 'utf8');
|
|
1508
|
+
|
|
1509
|
+
classDefinitions += fs.readFileSync(srcMaterialDesignIconsTSSFile, 'utf8');
|
|
1510
|
+
|
|
1390
1511
|
classDefinitions = classDefinitions
|
|
1391
1512
|
.replace(`'ImageView[platform=ios]': { hires: true }\n`, '')
|
|
1392
1513
|
.replace(`'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }\n`, '')
|
|
@@ -1395,7 +1516,7 @@ function createDefinitionsFile() {
|
|
|
1395
1516
|
.replace(/{(.*)}/g, '{}')
|
|
1396
1517
|
.replace(/\[(.*)\]/g, '')
|
|
1397
1518
|
.replace(/\/\/(.*)\n/g, '')
|
|
1398
|
-
.replace(/\n
|
|
1519
|
+
.replace(/\n/g, '');
|
|
1399
1520
|
|
|
1400
1521
|
fs.writeFileSync(cwd + '/purgetss/definitions.css', `/* Class definitions */${classDefinitions}`);
|
|
1401
1522
|
|
|
@@ -1405,8 +1526,12 @@ function createDefinitionsFile() {
|
|
|
1405
1526
|
//! Build tailwind's custom values
|
|
1406
1527
|
function helperToBuildCustomTailwindClasses(key, value) {
|
|
1407
1528
|
switch (key) {
|
|
1529
|
+
// case 'audioStreamType':
|
|
1530
|
+
// case 'category':
|
|
1408
1531
|
case 'accessibilityHidden':
|
|
1532
|
+
case 'accessoryType':
|
|
1409
1533
|
case 'activeIconIsMask':
|
|
1534
|
+
case 'activeTab':
|
|
1410
1535
|
case 'activeTintColor':
|
|
1411
1536
|
case 'activeTitleColor':
|
|
1412
1537
|
case 'activityEnterTransition':
|
|
@@ -1419,6 +1544,8 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1419
1544
|
case 'activitySharedElementReenterTransition':
|
|
1420
1545
|
case 'activitySharedElementReturnTransition':
|
|
1421
1546
|
case 'alertDialogStyle':
|
|
1547
|
+
case 'allowsBackForwardNavigationGestures':
|
|
1548
|
+
case 'allowsLinkPreview':
|
|
1422
1549
|
case 'allowsMultipleSelectionDuringEditing':
|
|
1423
1550
|
case 'allowsMultipleSelectionInteraction':
|
|
1424
1551
|
case 'allowsSelection':
|
|
@@ -1431,13 +1558,24 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1431
1558
|
case 'autofillType':
|
|
1432
1559
|
case 'autoLink':
|
|
1433
1560
|
case 'autoreverse':
|
|
1561
|
+
case 'autorotate':
|
|
1434
1562
|
case 'backgroundBlendMode':
|
|
1435
1563
|
case 'backgroundColor':
|
|
1564
|
+
case 'backgroundDisabledColor':
|
|
1565
|
+
case 'backgroundFocusedColor':
|
|
1436
1566
|
case 'backgroundGradient':
|
|
1567
|
+
case 'backgroundLeftCap':
|
|
1437
1568
|
case 'backgroundLinearGradient':
|
|
1569
|
+
case 'backgroundPaddingBottom':
|
|
1570
|
+
case 'backgroundPaddingLeft':
|
|
1571
|
+
case 'backgroundPaddingRight':
|
|
1572
|
+
case 'backgroundPaddingTop':
|
|
1438
1573
|
case 'backgroundRadialGradient':
|
|
1439
1574
|
case 'backgroundRepeat':
|
|
1440
1575
|
case 'backgroundSelectedColor':
|
|
1576
|
+
case 'backgroundSelectedGradient':
|
|
1577
|
+
case 'backgroundTopCap':
|
|
1578
|
+
case 'badgeColor':
|
|
1441
1579
|
case 'barColor':
|
|
1442
1580
|
case 'borderColor':
|
|
1443
1581
|
case 'borderRadius':
|
|
@@ -1446,15 +1584,33 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1446
1584
|
case 'bottomNavigation':
|
|
1447
1585
|
case 'bubbleParent':
|
|
1448
1586
|
case 'buttonStyle':
|
|
1587
|
+
case 'cacheMode':
|
|
1588
|
+
case 'cachePolicy':
|
|
1449
1589
|
case 'cacheSize':
|
|
1590
|
+
case 'calendarViewShown':
|
|
1591
|
+
case 'canCancelEvents':
|
|
1450
1592
|
case 'canDelete':
|
|
1593
|
+
case 'canEdit':
|
|
1594
|
+
case 'canInsert':
|
|
1595
|
+
case 'canMove':
|
|
1451
1596
|
case 'canScroll':
|
|
1452
1597
|
case 'caseInsensitiveSearch':
|
|
1598
|
+
case 'checkable':
|
|
1599
|
+
case 'clearButtonMode':
|
|
1600
|
+
case 'clearOnEdit':
|
|
1453
1601
|
case 'clipMode':
|
|
1602
|
+
case 'columnCount':
|
|
1603
|
+
case 'contentHeight':
|
|
1604
|
+
case 'contentHeightAndWidth':
|
|
1605
|
+
case 'contentWidth':
|
|
1606
|
+
case 'countDownDuration':
|
|
1454
1607
|
case 'currentPageIndicatorColor':
|
|
1608
|
+
case 'datePickerStyle':
|
|
1609
|
+
case 'dateTimeColor':
|
|
1455
1610
|
case 'defaultItemTemplate':
|
|
1456
1611
|
case 'dimBackgroundForSearch':
|
|
1457
1612
|
case 'disableBounce':
|
|
1613
|
+
case 'disableContextMenu':
|
|
1458
1614
|
case 'disabledColor':
|
|
1459
1615
|
case 'displayCaps':
|
|
1460
1616
|
case 'displayHomeAsUp':
|
|
@@ -1465,12 +1621,14 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1465
1621
|
case 'drawerLockMode':
|
|
1466
1622
|
case 'dropShadow':
|
|
1467
1623
|
case 'dropShadowColor':
|
|
1624
|
+
case 'duration':
|
|
1468
1625
|
case 'editable':
|
|
1469
1626
|
case 'editing':
|
|
1470
1627
|
case 'elevation':
|
|
1471
1628
|
case 'ellipsize':
|
|
1472
1629
|
case 'enableCopy':
|
|
1473
1630
|
case 'enabled':
|
|
1631
|
+
case 'enableJavascriptInterface':
|
|
1474
1632
|
case 'enableReturnKey':
|
|
1475
1633
|
case 'enableZoomControls':
|
|
1476
1634
|
case 'exitOnClose':
|
|
@@ -1481,20 +1639,30 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1481
1639
|
case 'filterAnchored':
|
|
1482
1640
|
case 'filterAttribute':
|
|
1483
1641
|
case 'filterCaseInsensitive':
|
|
1642
|
+
case 'filterTouchesWhenObscured':
|
|
1643
|
+
case 'flags':
|
|
1484
1644
|
case 'flagSecure':
|
|
1485
1645
|
case 'flip':
|
|
1646
|
+
case 'focusable':
|
|
1486
1647
|
case 'fontFamily':
|
|
1487
1648
|
case 'fontSize':
|
|
1488
1649
|
case 'fontStyle':
|
|
1489
1650
|
case 'fontWeight':
|
|
1490
1651
|
case 'footerDividersEnabled':
|
|
1652
|
+
case 'format24':
|
|
1491
1653
|
case 'fullscreen':
|
|
1492
1654
|
case 'gap':
|
|
1655
|
+
case 'gravity':
|
|
1493
1656
|
case 'gridColumnsStartEnd':
|
|
1494
1657
|
case 'gridFlow':
|
|
1495
1658
|
case 'gridSystem':
|
|
1659
|
+
case 'hasCheck':
|
|
1660
|
+
case 'hasChild':
|
|
1661
|
+
case 'hasDetail':
|
|
1496
1662
|
case 'headerDividersEnabled':
|
|
1497
1663
|
case 'height':
|
|
1664
|
+
case 'hiddenBehavior':
|
|
1665
|
+
case 'hideLoadIndicator':
|
|
1498
1666
|
case 'hidesBackButton':
|
|
1499
1667
|
case 'hidesBarsOnSwipe':
|
|
1500
1668
|
case 'hidesBarsOnTap':
|
|
@@ -1502,44 +1670,72 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1502
1670
|
case 'hideSearchOnSelection':
|
|
1503
1671
|
case 'hideShadow':
|
|
1504
1672
|
case 'hidesSearchBarWhenScrolling':
|
|
1673
|
+
case 'highlightedColor':
|
|
1505
1674
|
case 'hintTextColor':
|
|
1675
|
+
case 'hintType':
|
|
1506
1676
|
case 'hires':
|
|
1507
1677
|
case 'homeButtonEnabled':
|
|
1508
1678
|
case 'homeIndicatorAutoHidden':
|
|
1679
|
+
case 'horizontalWrap':
|
|
1509
1680
|
case 'html':
|
|
1681
|
+
case 'icon':
|
|
1510
1682
|
case 'iconified':
|
|
1511
1683
|
case 'iconifiedByDefault':
|
|
1512
1684
|
case 'iconIsMask':
|
|
1685
|
+
case 'ignoreSslError':
|
|
1686
|
+
case 'imageTouchFeedback':
|
|
1687
|
+
case 'imageTouchFeedbackColor':
|
|
1688
|
+
case 'includeFontPadding':
|
|
1513
1689
|
case 'includeOpaqueBars':
|
|
1690
|
+
case 'indentionLevel':
|
|
1514
1691
|
case 'indicatorColor':
|
|
1692
|
+
case 'inputType':
|
|
1515
1693
|
case 'items':
|
|
1516
1694
|
case 'keepScreenOn':
|
|
1517
1695
|
case 'keepSectionsInSearch':
|
|
1518
1696
|
case 'keyboardAppearance':
|
|
1519
1697
|
case 'keyboardDismissMode':
|
|
1698
|
+
case 'keyboardDisplayRequiresUserAction':
|
|
1699
|
+
case 'keyboardToolbarColor':
|
|
1700
|
+
case 'keyboardToolbarHeight':
|
|
1520
1701
|
case 'keyboardType':
|
|
1521
1702
|
case 'largeTitleDisplayMode':
|
|
1522
1703
|
case 'largeTitleEnabled':
|
|
1523
1704
|
case 'layout':
|
|
1524
1705
|
case 'lazyLoadingEnabled':
|
|
1706
|
+
case 'leftButtonMode':
|
|
1707
|
+
case 'leftButtonPadding':
|
|
1525
1708
|
case 'leftDrawerLockMode':
|
|
1526
1709
|
case 'leftWidth':
|
|
1710
|
+
case 'lightTouchEnabled':
|
|
1711
|
+
case 'lines':
|
|
1527
1712
|
case 'listViewStyle':
|
|
1528
1713
|
case 'loginKeyboardType':
|
|
1529
1714
|
case 'loginReturnKeyType':
|
|
1530
1715
|
case 'margin':
|
|
1716
|
+
case 'margin2':
|
|
1531
1717
|
case 'maxElevation':
|
|
1718
|
+
case 'maxLines':
|
|
1532
1719
|
case 'maxRowHeight':
|
|
1720
|
+
case 'maxZoomScale':
|
|
1721
|
+
case 'minimumFontSize':
|
|
1533
1722
|
case 'minRowHeight':
|
|
1723
|
+
case 'minZoomScale':
|
|
1724
|
+
case 'mixedContentMode':
|
|
1534
1725
|
case 'modal':
|
|
1535
1726
|
case 'moveable':
|
|
1536
1727
|
case 'moving':
|
|
1728
|
+
case 'nativeSpinner':
|
|
1537
1729
|
case 'navBarHidden':
|
|
1730
|
+
case 'navigationMode':
|
|
1538
1731
|
case 'navTintColor':
|
|
1732
|
+
case 'offsets':
|
|
1733
|
+
case 'onTintColor':
|
|
1539
1734
|
case 'opacity':
|
|
1540
1735
|
case 'orientationModes':
|
|
1541
1736
|
case 'origin':
|
|
1542
1737
|
case 'overlayEnabled':
|
|
1738
|
+
case 'overrideCurrentAnimation':
|
|
1543
1739
|
case 'overScrollMode':
|
|
1544
1740
|
case 'padding':
|
|
1545
1741
|
case 'pageIndicatorColor':
|
|
@@ -1550,8 +1746,11 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1550
1746
|
case 'pagingControlOnTop':
|
|
1551
1747
|
case 'pagingControlTimeout':
|
|
1552
1748
|
case 'passwordKeyboardType':
|
|
1749
|
+
case 'passwordMask':
|
|
1553
1750
|
case 'pickerType':
|
|
1751
|
+
case 'placeholder':
|
|
1554
1752
|
case 'placement':
|
|
1753
|
+
case 'pluginState':
|
|
1555
1754
|
case 'preventCornerOverlap':
|
|
1556
1755
|
case 'preventDefaultImage':
|
|
1557
1756
|
case 'previewActionStyle':
|
|
@@ -1561,20 +1760,26 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1561
1760
|
case 'progressIndicatorLocation':
|
|
1562
1761
|
case 'progressIndicatorType':
|
|
1563
1762
|
case 'pruneSectionsOnEdit':
|
|
1763
|
+
case 'pullBackgroundColor':
|
|
1764
|
+
case 'rDrawable':
|
|
1564
1765
|
case 'repeat':
|
|
1565
|
-
case '
|
|
1766
|
+
case 'repeatCount':
|
|
1767
|
+
case 'requestedOrientation':
|
|
1566
1768
|
case 'resultsBackgroundColor':
|
|
1567
1769
|
case 'resultsSeparatorColor':
|
|
1568
1770
|
case 'resultsSeparatorStyle':
|
|
1569
1771
|
case 'returnKeyType':
|
|
1772
|
+
case 'reverse':
|
|
1773
|
+
case 'rightButtonMode':
|
|
1774
|
+
case 'rightButtonPadding':
|
|
1570
1775
|
case 'rightDrawerLockMode':
|
|
1571
1776
|
case 'rightWidth':
|
|
1572
1777
|
case 'rotate':
|
|
1573
|
-
case '
|
|
1778
|
+
case 'rowCount':
|
|
1574
1779
|
case 'rowHeight':
|
|
1575
1780
|
case 'scale':
|
|
1781
|
+
case 'scalesPageToFit':
|
|
1576
1782
|
case 'scrollable':
|
|
1577
|
-
case 'scrollableRegion':
|
|
1578
1783
|
case 'scrollIndicators':
|
|
1579
1784
|
case 'scrollIndicatorStyle':
|
|
1580
1785
|
case 'scrollingEnabled':
|
|
@@ -1586,7 +1791,10 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1586
1791
|
case 'sectionHeaderTopPadding':
|
|
1587
1792
|
case 'selectedButtonColor':
|
|
1588
1793
|
case 'selectedColor':
|
|
1794
|
+
case 'selectedSubtitleColor':
|
|
1589
1795
|
case 'selectedTextColor':
|
|
1796
|
+
case 'selectionGranularity':
|
|
1797
|
+
case 'selectionOpens':
|
|
1590
1798
|
case 'selectionStyle':
|
|
1591
1799
|
case 'separatorColor':
|
|
1592
1800
|
case 'separatorHeight':
|
|
@@ -1597,12 +1805,16 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1597
1805
|
case 'showAsAction':
|
|
1598
1806
|
case 'showBookmark':
|
|
1599
1807
|
case 'showCancel':
|
|
1808
|
+
case 'showHorizontalScrollIndicator':
|
|
1600
1809
|
case 'showSearchBarInNavBar':
|
|
1601
1810
|
case 'showSelectionCheck':
|
|
1811
|
+
case 'showUndoRedoActions':
|
|
1602
1812
|
case 'showVerticalScrollIndicator':
|
|
1603
1813
|
case 'smoothScrollOnTabClick':
|
|
1604
1814
|
case 'statusBarStyle':
|
|
1605
1815
|
case 'submitEnabled':
|
|
1816
|
+
case 'subtitleColor':
|
|
1817
|
+
case 'suppressReturn':
|
|
1606
1818
|
case 'sustainedPerformanceMode':
|
|
1607
1819
|
case 'swipeToClose':
|
|
1608
1820
|
case 'switchStyle':
|
|
@@ -1617,16 +1829,20 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1617
1829
|
case 'textAlign':
|
|
1618
1830
|
case 'textColor':
|
|
1619
1831
|
case 'theme':
|
|
1832
|
+
case 'thumbTintColor':
|
|
1620
1833
|
case 'tiMedia':
|
|
1834
|
+
case 'timeout':
|
|
1621
1835
|
case 'tintColor':
|
|
1622
1836
|
case 'titleAttributesColor':
|
|
1623
1837
|
case 'titleAttributesShadow':
|
|
1624
1838
|
case 'titleAttributesShadowColor':
|
|
1625
1839
|
case 'titleColor':
|
|
1840
|
+
case 'titleTextColor':
|
|
1626
1841
|
case 'toolbarEnabled':
|
|
1627
1842
|
case 'touchEnabled':
|
|
1628
1843
|
case 'touchFeedback':
|
|
1629
1844
|
case 'touchFeedbackColor':
|
|
1845
|
+
case 'trackTintColor':
|
|
1630
1846
|
case 'transition':
|
|
1631
1847
|
case 'transitionDelay':
|
|
1632
1848
|
case 'transitionDuration':
|
|
@@ -1634,14 +1850,18 @@ function helperToBuildCustomTailwindClasses(key, value) {
|
|
|
1634
1850
|
case 'useCompatPadding':
|
|
1635
1851
|
case 'useSpinner':
|
|
1636
1852
|
case 'verticalAlign':
|
|
1853
|
+
case 'verticalBounce':
|
|
1854
|
+
case 'verticalMargin':
|
|
1637
1855
|
case 'viewShadow':
|
|
1638
1856
|
case 'viewShadowColor':
|
|
1639
1857
|
case 'width':
|
|
1858
|
+
case 'willHandleTouches':
|
|
1640
1859
|
case 'willScrollOnStatusTap':
|
|
1641
1860
|
case 'windowPixelFormat':
|
|
1642
1861
|
case 'windowSoftInputMode':
|
|
1643
1862
|
case 'wobble':
|
|
1644
1863
|
case 'zIndex':
|
|
1864
|
+
case 'zoomScale':
|
|
1645
1865
|
return helpers[key](value);
|
|
1646
1866
|
|
|
1647
1867
|
default: return helpers.customRules(value, key);
|
|
@@ -1787,6 +2007,8 @@ function backupOriginalAppTss() {
|
|
|
1787
2007
|
|
|
1788
2008
|
//! Copy Reset template
|
|
1789
2009
|
function copyResetTemplateAnd_appTSS() {
|
|
2010
|
+
localStart();
|
|
2011
|
+
|
|
1790
2012
|
logger.info('Copying Reset styles...');
|
|
1791
2013
|
|
|
1792
2014
|
let tempPurged = fs.readFileSync(srcResetTSSFile, 'utf8');
|
|
@@ -1800,6 +2022,8 @@ function copyResetTemplateAnd_appTSS() {
|
|
|
1800
2022
|
}
|
|
1801
2023
|
}
|
|
1802
2024
|
|
|
2025
|
+
localFinish('Copying Reset and ' + chalk.yellow('_app.tss') + ' styles...');
|
|
2026
|
+
|
|
1803
2027
|
return tempPurged;
|
|
1804
2028
|
}
|
|
1805
2029
|
|
|
@@ -1814,15 +2038,28 @@ function finish(customMessage = 'Finished purging in') {
|
|
|
1814
2038
|
logger.info(customMessage, chalk.green(`${endTime.getSeconds()}s ${endTime.getMilliseconds()}ms`));
|
|
1815
2039
|
}
|
|
1816
2040
|
|
|
2041
|
+
let localStartTime;
|
|
2042
|
+
function localStart() {
|
|
2043
|
+
localStartTime = new Date();
|
|
2044
|
+
};
|
|
2045
|
+
|
|
2046
|
+
function localFinish(customMessage = 'Finished purging in') {
|
|
2047
|
+
let localEndTime = new Date(new Date() - localStartTime);
|
|
2048
|
+
if (purgingDebug) logger.info(customMessage, chalk.green(`${localEndTime.getSeconds()}s ${localEndTime.getMilliseconds()}ms`));
|
|
2049
|
+
}
|
|
2050
|
+
|
|
1817
2051
|
//! Purge Functions
|
|
1818
2052
|
//! Tailwind
|
|
1819
2053
|
function purgeTailwind(uniqueClasses) {
|
|
2054
|
+
localStart();
|
|
2055
|
+
|
|
1820
2056
|
let purgedClasses = '\n// Main styles\n';
|
|
1821
2057
|
let tailwindClasses = fs.readFileSync(projectTailwindTSS, 'utf8').split(/\r?\n/);
|
|
1822
2058
|
|
|
1823
2059
|
if (`// config.js file updated on: ${getFileUpdatedDate(projectConfigJS)}` !== tailwindClasses[6]) {
|
|
1824
2060
|
logger.info(chalk.yellow('config.js'), 'file updated!, rebuilding tailwind.tss...');
|
|
1825
2061
|
buildCustomTailwind('file updated!');
|
|
2062
|
+
createDefinitionsFile();
|
|
1826
2063
|
tailwindClasses = fs.readFileSync(projectTailwindTSS, 'utf8').split(/\r?\n/);
|
|
1827
2064
|
}
|
|
1828
2065
|
|
|
@@ -1942,6 +2179,10 @@ function purgeTailwind(uniqueClasses) {
|
|
|
1942
2179
|
// Add arbitrary values
|
|
1943
2180
|
purgedClasses += (arbitraryValues !== '\n// Styles with arbitrary values\n') ? arbitraryValues : '';
|
|
1944
2181
|
|
|
2182
|
+
let mensaje = 'Purging ' + chalk.yellow('Custom Tailwind') + ' styles...';
|
|
2183
|
+
|
|
2184
|
+
localFinish(mensaje);
|
|
2185
|
+
|
|
1945
2186
|
return purgedClasses;
|
|
1946
2187
|
}
|
|
1947
2188
|
|
|
@@ -1955,8 +2196,8 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
|
|
|
1955
2196
|
let purgedClasses = '';
|
|
1956
2197
|
let purgingMessage = '';
|
|
1957
2198
|
|
|
1958
|
-
if (fs.existsSync(
|
|
1959
|
-
sourceFolder =
|
|
2199
|
+
if (fs.existsSync(projectFontAwesomeTSS)) {
|
|
2200
|
+
sourceFolder = projectFontAwesomeTSS;
|
|
1960
2201
|
purgedClasses = '\n// Pro/Beta Font Awesome styles\n';
|
|
1961
2202
|
purgingMessage = `Purging ${chalk.yellow('Pro/Beta Font Awesome')} styles...')`;
|
|
1962
2203
|
} else {
|
|
@@ -1965,9 +2206,7 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
|
|
|
1965
2206
|
purgingMessage = `Purging Default Font Awesome styles...`;
|
|
1966
2207
|
}
|
|
1967
2208
|
|
|
1968
|
-
|
|
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']);
|
|
2209
|
+
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
2210
|
|
|
1972
2211
|
return (purgedClasses === '\n// Pro/Beta Font Awesome styles\n' || purgedClasses === '\n// Default Font Awesome styles\n') ? '' : purgedClasses;
|
|
1973
2212
|
}
|
|
@@ -1976,9 +2215,7 @@ function purgeFontAwesome(uniqueClasses, cleanUniqueClasses) {
|
|
|
1976
2215
|
function purgeMaterialDesign(uniqueClasses, cleanUniqueClasses) {
|
|
1977
2216
|
let purgedClasses = '\n// Material Design Icons styles\n';
|
|
1978
2217
|
|
|
1979
|
-
|
|
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']);
|
|
2218
|
+
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
2219
|
|
|
1983
2220
|
return (purgedClasses === '\n// Material Design Icons styles\n') ? '' : purgedClasses;
|
|
1984
2221
|
}
|
|
@@ -1987,52 +2224,42 @@ function purgeMaterialDesign(uniqueClasses, cleanUniqueClasses) {
|
|
|
1987
2224
|
function purgeFramework7(uniqueClasses, cleanUniqueClasses) {
|
|
1988
2225
|
let purgedClasses = '\n// Framework7 styles\n';
|
|
1989
2226
|
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
purgedClasses += purgeFontIcons(sourceTSS, uniqueClasses, 'Purging Framework7 Icons styles...', cleanUniqueClasses, ['f7', 'f7i', 'framework7']);
|
|
2227
|
+
purgedClasses += purgeFontIcons(srcFramework7FontTSSFile, uniqueClasses, 'Purging Framework7 Icons styles...', cleanUniqueClasses, ['f7', 'f7i', 'framework7']);
|
|
1993
2228
|
|
|
1994
2229
|
return (purgedClasses === '\n// Framework7 styles\n') ? '' : purgedClasses;
|
|
1995
2230
|
}
|
|
1996
2231
|
|
|
1997
|
-
function purgeFontIcons(
|
|
2232
|
+
function purgeFontIcons(sourceFolder, uniqueClasses, message, cleanUniqueClasses, prefixes) {
|
|
2233
|
+
localStart();
|
|
2234
|
+
|
|
1998
2235
|
let purgedClasses = '';
|
|
1999
|
-
let
|
|
2000
|
-
|
|
2001
|
-
if (
|
|
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 {
|
|
2236
|
+
let sourceTSS = fs.readFileSync(sourceFolder, 'utf8');
|
|
2237
|
+
|
|
2238
|
+
if (cleanUniqueClasses.some(element => sourceTSS.includes(`'.${element}'`))) {
|
|
2016
2239
|
logger.info(message);
|
|
2240
|
+
let sourceTSSFile = sourceTSS.split(/\r?\n/);
|
|
2017
2241
|
uniqueClasses.forEach(className => {
|
|
2018
2242
|
let cleanClassName = cleanClassNameFn(className);
|
|
2019
|
-
if (
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
purgedClasses += helpers.checkPlatformAndDevice(line, uniqueClasses[uniqueClasses.indexOf(className)]);
|
|
2023
|
-
}
|
|
2024
|
-
});
|
|
2243
|
+
if (sourceTSS.includes(`'.${cleanClassName}'`)) {
|
|
2244
|
+
let newLine = _.filter(sourceTSSFile, s => s.indexOf(`'.${cleanClassName}'`) !== -1)[0];
|
|
2245
|
+
purgedClasses += helpers.checkPlatformAndDevice(newLine, className);
|
|
2025
2246
|
}
|
|
2026
2247
|
});
|
|
2027
2248
|
}
|
|
2028
2249
|
|
|
2250
|
+
localFinish(message);
|
|
2251
|
+
|
|
2029
2252
|
return purgedClasses;
|
|
2030
2253
|
}
|
|
2031
2254
|
|
|
2032
2255
|
function saveFile(file, data) {
|
|
2256
|
+
localStart();
|
|
2257
|
+
|
|
2033
2258
|
fs.writeFileSync(file, data, err => {
|
|
2034
2259
|
throw err;
|
|
2035
2260
|
});
|
|
2261
|
+
|
|
2262
|
+
localFinish(`Saving ${chalk.yellow('app.tss')}...`);
|
|
2036
2263
|
}
|
|
2037
2264
|
|
|
2038
2265
|
function createJMKFile() {
|