diff --git a/app/ForegroundService.js b/app/ForegroundService.js index 3f2ac675..5a9e4b64 100644 --- a/app/ForegroundService.js +++ b/app/ForegroundService.js @@ -1,15 +1,14 @@ import { TimerNotif } from './shared/utils' const superProto = android.app.Service.prototype + android.app.Service.extend('com.tns.ForegroundService', { onStartCommand: function(intent, flags, startId) { - console.log('onStartCommand') superProto.onStartCommand.call(this, intent, flags, startId) return android.app.Service.START_STICKY }, onCreate: function() { - console.log('onCreate') superProto.onCreate.call(this) - this.startForeground(777, this.getNotification()) + this.startForeground(6, this.getNotification()) }, onBind: function(intent) { return superProto.onBind.call(this, intent) @@ -18,17 +17,16 @@ android.app.Service.extend('com.tns.ForegroundService', { return superProto.onUnbind.call(this, intent) }, onDestroy: function() { - console.log('onDestroy') this.stopForeground(true) }, getNotification: function() { return TimerNotif.getNotification( { - bID: 'bringToFront', + bID: 'info', cID: 'cti', cName: 'Cooking Timer info', description: `0 ongoing, 0 paused`, - nID: 777, + nID: 6, priority: -2, sound: null, title: 'EnRecipes is running', diff --git a/app/app.scss b/app/app.scss index 885ddbb7..ae66c777 100644 --- a/app/app.scss +++ b/app/app.scss @@ -37,7 +37,7 @@ Page { @extend .tb; @extend .tw; font-size: 25; - padding: 16; + padding: 16 16 24; } .Light { color: $gray9; @@ -156,6 +156,7 @@ TextField.combField, #searchBar { border-color: transparent; } + // ----------------------------- // Elements TextField, @@ -181,28 +182,15 @@ TextView { width: 100%; } progress { - margin: 16; + color: $orange; + width: 100%; + height: 2; background-color: $gray5; } Switch { background-color: $orange; off-background-color: $gray5; } -// ----------------------------- -// Side Drawer -.segment { - border-radius: 12; - margin: 0 4 0 0; - padding: 0 12; - .value { - padding-left: 8; - vertical-alignment: center; - } - &.select { - color: $orange; - @extend .hl; - } -} button { background-color: transparent; z-index: 0; @@ -214,14 +202,13 @@ button { @extend .fade; } &.ico { - padding: 0; - margin: 0; width: 48; height: 48; + padding: 0; + margin: 0; } &.text { @extend .tb; - horizontal-alignment: left; color: $orange; } &.big { @@ -235,12 +222,6 @@ button { &.min { width: 40; height: 40; - } - &.x { - width: 32; - height: 32; - min-width: 0; - margin: 0 0 0 4; vertical-alignment: center; } &.rate { @@ -249,8 +230,31 @@ button { height: 32; } } +ActivityIndicator { + width: 24; + height: 24; + margin: 12; + color: $orange; +} + // ----------------------------- -// HOME +// Home +.segment { + border-radius: 12; + margin: 0 4 0 0; + padding: 0 12; + .value { + padding: 0 0 0 8; + vertical-alignment: center; + &.rtl { + padding: 0 8 0 0; + } + } + &.select { + color: $orange; + @extend .hl; + } +} .emptyState { padding: 16 16 8; label { @@ -261,13 +265,18 @@ button { font-size: 17; } } + // ----------------------------- -// Recipe Items +// Recipe Item .recipeItem { padding: 8 16; .recipeInfo { vertical-alignment: center; padding: 0 0 4 8; + &.rtl { + transform: none; + padding: 0 8 4 0; + } } .title { padding: 0 0 4; @@ -275,6 +284,9 @@ button { .attr { font-size: 10; padding: 0 6 1 2; + &.rtl { + padding: 0 2 1 6; + } } } .simple .recipeInfo { @@ -283,7 +295,6 @@ button { .minimal .title { padding: 0; } - .grid { padding: 8; .recipeInfo { @@ -311,39 +322,34 @@ button { .imgHolder { border-radius: 12; } -// ----------------------------- -// COOKING TIMER -.singleTimer { - padding: 8 16; +// ----------------------------- +// CookingTimer +.timer { + padding: 8 16 0; .info { - margin: 8; - } - .recipeTitle { - horizontal-alignment: left; - // font-size: 12; + margin: 8 8 8 16; + &.r { + margin: 8 16 8 8; + } } progress { - color: $orange; - width: 100%; - height: 4; margin: 8 0 0; } } + // ----------------------------- -// SETTINGS +// Settings .group-info { padding: 16 16 16 72; line-height: 4; } -.options-list { +.options { .option { vertical-align: center; - padding: 14 8; - margin: 0 16; + padding: 14 12; .ico { - padding: 0; - margin: 0 24 0 16; + margin: 0 24 0 12; } .info, .sub { @@ -359,7 +365,7 @@ button { } // ----------------------------- -// ABOUT +// About .app-info { .icon { horizontal-alignment: center; @@ -372,8 +378,9 @@ button { line-height: 4; } } + // ----------------------------- -// VIEW RECIPE +// ViewRecipe .photo { border-radius: 12; margin: 24 16 0 0; @@ -396,15 +403,12 @@ button { @extend .tw; } } -.clickable { - color: $orange; -} .ingredient { padding: 0 16; .value { @extend .tw; vertical-align: center; - padding: 14 0 14 16; + padding: 14 16; line-height: 4; } } @@ -416,13 +420,12 @@ button { } .value { @extend .tw; - padding: 14 0 14 16; + padding: 14 16; line-height: 4; } } .done { opacity: 0.5; - // @extend .fade; .value { text-decoration: line-through; } @@ -443,8 +446,9 @@ button { font-size: 12; line-height: 4; } + // ----------------------------- -// APPBAR +// AppBar .appbar { z-index: 4; min-height: 56; @@ -461,13 +465,16 @@ button { padding: 14 16; } .fab { - margin-left: 4; + margin-left: 8; + } + &.home { + margin: 8 8 0; } } .toolbar { z-index: 4; padding: 4; - margin-bottom: 0; + margin: 0 0 52; horizontal-alignment: left; .tool { padding: 0 12; @@ -475,19 +482,20 @@ button { vertical-alignment: center; } .ico { - padding-right: 8; + padding: 0 8 0 0; + &.rtl { + padding: 0 0 0 8; + } } } } .fab { - width: 48; - height: 48; - margin: 0 4 0 0; border-radius: 12; background: $orange; } + // ----------------------------- -// EDIT RECIPE +// EditRecipe .sectionTitle { @extend .tb; @extend .tw; @@ -504,8 +512,9 @@ button { font-size: 17; color: $orange; } + // ----------------------------- -// MEAL PLANNER +// MealPlanner .calendar { padding: 0 8; .navBtn { @@ -541,13 +550,13 @@ button { } .recipeTitle { @extend .tw; - text-align: left; padding: 16 8; line-height: 4; } } + // ----------------------------- -// DIALOGS +// Dialogs .modal { max-width: 320; width: 100%; @@ -567,13 +576,12 @@ button { padding: 0 16 8; } ListPicker { - width: 25%; - height: 128; + width: 30%; + height: 144; margin: 16 0; } .listItem { @extend .tw; - width: 100%; letter-spacing: 0; text-transform: none; line-height: 4; @@ -607,32 +615,9 @@ button { padding: 16; line-height: 4; } -// ----------------------------- -ActivityIndicator { - width: 24; - height: 24; - margin: 12; - color: $orange; -} + // ----------------------------- // Transitions -.blink { - animation-name: blink; - animation-duration: 1s; - animation-iteration-count: infinite; - animation-timing-function: ease; -} -@keyframes blink { - 0% { - opacity: 0; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0; - } -} .hl { animation-name: hl; animation-duration: 0.2s; @@ -661,3 +646,18 @@ ActivityIndicator { opacity: 0.5; } } + +// ----------------------------- +// Helpers +.rtl { + transform: scaleX(-1); +} +.clickable { + color: $orange; +} +.hal { + horizontal-alignment: left; + &.r { + horizontal-alignment: right; + } +} diff --git a/app/components/settings/Interface.vue b/app/components/settings/Interface.vue index be65f6eb..dbcc4c2c 100644 --- a/app/components/settings/Interface.vue +++ b/app/components/settings/Interface.vue @@ -1,11 +1,17 @@ @@ -16,7 +22,7 @@ import { Device, Frame, } from "@nativescript/core"; -import { localize, overrideLocale } from "@nativescript/localize"; +import { localize } from "@nativescript/localize"; import Action from "../modals/Action"; import Confirm from "../modals/Confirm"; import OptionsList from "../sub/OptionsList"; @@ -27,11 +33,11 @@ export default { components: { OptionsList }, data() { return { - appLanguage: "English", + applang: 0, }; }, computed: { - ...mapState(["icon", "language", "appTheme", "layout"]), + ...mapState(["icon", "language", "appTheme", "layout", "RTL"]), items() { return [ {}, @@ -39,23 +45,21 @@ export default { type: "list", icon: "lang", title: "lang", - subTitle: this.appLanguage, - action: this.selectAppLanguage, + subTitle: this.applang, + action: this.setAppLang, }, { type: "list", icon: "theme", title: "Theme", - subTitle: localize( - ApplicationSettings.getString("appTheme", "sysDef") - ), + subTitle: ApplicationSettings.getString("appTheme", "sysDef"), action: this.selectThemes, }, { type: "list", icon: "layout", title: "listVM", - subTitle: localize(this.layout), + subTitle: this.layout, action: this.setLayoutMode, }, {}, @@ -63,12 +67,12 @@ export default { }, }, methods: { - ...mapActions(["setTheme", "setLayout"]), - onPageLoad({ object }) { + ...mapActions(["setTheme", "setLayout", "setRTL"]), + pgLoad({ object }) { object.bindingContext = new Observable(); }, // LANGUAGE SELECTION - selectAppLanguage() { + setAppLang() { let languages = this.language.map((e) => e.title); this.$showModal(Action, { props: { @@ -76,26 +80,19 @@ export default { list: [...languages], }, }).then((action) => { - if (action && this.appLanguage !== action) { - let currentLocale = Device.language.split("-")[0]; + if (action && this.applang !== action) { + let currentLocale = ApplicationSettings.getString( + "appLocale", + "none" + ).split("-"); let locale = this.language.filter((e) => e.title === action)[0] .locale; if (currentLocale !== locale) { - this.$showModal(Confirm, { - props: { - title: "appRst", - description: localize("nLangInfo"), - cancelButtonText: "cBtn", - okButtonText: "rst", - }, - }).then((result) => { - if (result) { - this.appLanguage = action; - ApplicationSettings.setString("appLanguage", action); - overrideLocale(locale); - setTimeout(utils.restartApp, 250); - } - }); + this.applang = action; + ApplicationSettings.setString("applang", action); + ApplicationSettings.setString("appLocale", locale); + utils.updateLocale(); + this.setRTL(); } } }); @@ -111,7 +108,7 @@ export default { if ( action && (ApplicationSettings.getString("appTheme") != this.appTheme - ? true + ? 1 : this.appTheme != action) ) { this.setTheme(action); @@ -136,10 +133,7 @@ export default { }, }, created() { - this.appLanguage = ApplicationSettings.getString( - "appLanguage", - localize("sysDef") - ); + this.applang = ApplicationSettings.getString("applang", "sysDef"); }, }; diff --git a/app/i18n/en-GB.default.json b/app/i18n/en-GB.default.json index 7063b5b4..3e6c911d 100644 --- a/app/i18n/en-GB.default.json +++ b/app/i18n/en-GB.default.json @@ -320,5 +320,21 @@ "texp": "%s timers expired", "dismiss": "Dismiss", "dismissAll": "Dismiss all timers", - "ttv": "Tap to view" + "ttv": "Tap to view", + "oAP": "%1$s ongoing, %2$s paused", + "calVM": "Calendar view mode", + "mnthly": "Monthly", + "wkly": "Weekly", + "dly": "Daily", + "sun": "Sunday", + "mon": "Monday", + "tue": "Tuesday", + "wed": "Wednesday", + "thu": "Thursday", + "fri": "Friday", + "sat": "Saturday", + "cpy": "copy", + "tdy": "Today", + "tmrw": "Tomorrow", + "ystr": "Yesterday" } diff --git a/app/main.ts b/app/main.ts index 633e14e6..a5fe7681 100644 --- a/app/main.ts +++ b/app/main.ts @@ -1,15 +1,98 @@ +import { + Application, + AndroidApplication, + ApplicationSettings, + Utils, + Device, + Color, + Frame, +} from '@nativescript/core' import { localize, androidLaunchEventLocalizationHandler, } from '@nativescript/localize' -import { Application, AndroidApplication, Utils } from '@nativescript/core' +import Vue from 'nativescript-vue' +import EnRecipes from './components/EnRecipes.vue' +import EditRecipe from './components/EditRecipe.vue' +import MealPlanner from './components/MealPlanner.vue' +import CookingTimer from './components/CookingTimer.vue' +import GroceryList from './components/GroceryList.vue' +import store from './store' +import * as utils from '~/shared/utils' -const keepScreenOn = () => { +export const EventBus = new Vue() + +let renderView: any = EnRecipes + +import CollectionView from '@nativescript-community/ui-collectionview/vue' +Vue.use(CollectionView) +import { StackLayout, GridLayout, DockLayout } from '@nativescript-rtl/ui' +Vue.registerElement('RStackLayout', () => StackLayout) +Vue.registerElement('RGridLayout', () => GridLayout) +Vue.registerElement('RDockLayout', () => DockLayout) + +import { myMixin } from './shared/mixins' +Vue.mixin(myMixin) + +const initFrame = () => { + const vm = store + + //MAIN INIT + vm.commit('setTheme', ApplicationSettings.getString('appTheme', 'sysDef')) + if (!vm.state.recipes.length) vm.commit('initRecipes') + vm.commit('initMealPlans') + vm.commit('initListItems') + vm.commit('initTimerPresets') + if (!Object.keys(vm.state.timerSound).length) { + let hasTimerSound = ApplicationSettings.getString('timerSound', null) + vm.commit( + 'setTimerSound', + hasTimerSound ? JSON.parse(hasTimerSound) : utils.getTones().defaultTone + ) + } + + // INIT FRAME + const View = android.view.View as any + const window = Application.android.startActivity.getWindow() + const decorView = window.getDecorView() + let sdkv = parseInt(Device.sdkVersion) + function setColors(color) { + window.setStatusBarColor(new Color(color).android) + sdkv >= 27 && window.setNavigationBarColor(new Color(color).android) + } + switch (vm.state.appTheme) { + case 'Light': + setColors('#f1f3f5') + break + case 'Dark': + setColors('#212529') + break + default: + setColors('#000000') + break + } + if (sdkv >= 27) + decorView.setSystemUiVisibility( + vm.state.appTheme == 'Light' + ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | + View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + : View.SYSTEM_UI_FLAG_DARK_STATUS_BAR | + View.SYSTEM_UI_FLAG_DARK_NAVIGATION_BAR + ) + else + decorView.setSystemUiVisibility( + vm.state.appTheme == 'Light' + ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + : View.SYSTEM_UI_FLAG_DARK_STATUS_BAR + ) + Frame.topmost().className = store.state.appTheme +} +const showOverLockscreen = () => { let ctx = Utils.ad.getApplicationContext() const pm = ctx.getSystemService(android.content.Context.POWER_SERVICE) let isScreenOff = !pm.isInteractive() if (isScreenOff) { - console.log('keepScreenOn') + console.log('showOverLockscreen') const window = Application.android.startActivity.getWindow() const windowMgr = android.view.WindowManager const flags = @@ -17,42 +100,63 @@ const keepScreenOn = () => { windowMgr.LayoutParams.FLAG_TURN_SCREEN_ON | windowMgr.LayoutParams.FLAG_KEEP_SCREEN_ON window.addFlags(flags) - function clearFlags(args) { - args.cancel = true - window.clearFlags(flags) - Application.android.off( - AndroidApplication.activityBackPressedEvent, - clearFlags - ) - } - Application.android.on( - AndroidApplication.activityBackPressedEvent, - clearFlags - ) } } -Application.on(Application.resumeEvent, keepScreenOn) +const intentListener = ({ intent, android }: any) => { + console.log(intent, android) + let action = ((intent || android).getStringExtra('action') || + (android && android.getAction())) as string + + if (action) { + console.log(action) + switch (action) { + case 'new_recipe': + renderView = EditRecipe + break + case 'planner': + renderView = MealPlanner + break + case 'timer': + renderView = CookingTimer + Vue.navigateTo(CookingTimer as any, { + animated: false, + }) + break + case 'grocery': + renderView = GroceryList + break + } + } +} + +Application.on(Application.resumeEvent, (args) => { + console.log('App Resume') + showOverLockscreen() +}) Application.on(Application.launchEvent, (args) => { - console.log('launching') + console.log('App Launch') + console.log('RTL', store.state.RTL) + store.commit('setRTL') if (args.android) { androidLaunchEventLocalizationHandler() intentListener(args) } + Application.android.on( + AndroidApplication.activityNewIntentEvent, + intentListener + ) + Frame.on(Frame.loadedEvent, initFrame) }) -import Vue from 'nativescript-vue' -import EnRecipes from './components/EnRecipes.vue' -import CookingTimer from './components/CookingTimer.vue' -import store from './store' - -export const EventBus = new Vue() - -import CollectionView from '@nativescript-community/ui-collectionview/vue' -Vue.use(CollectionView) - -import { lvMixin } from './shared/mixins' -Vue.mixin(lvMixin) +Application.on(Application.exitEvent, () => { + console.log('App Exit') + renderView = EnRecipes + Application.android.off( + AndroidApplication.activityNewIntentEvent, + intentListener + ) +}) Vue.config.silent = false @@ -60,37 +164,5 @@ Vue.filter('L', localize) new Vue({ store, - render: (h) => h(EnRecipes), + render: (h) => h('Frame', [h(renderView)]), }).$start() - -const intentListener = ({ intent, android }: any) => { - let ct = 'CookingTimer' - let action = (intent || android).getStringExtra('action') - console.log('calling: ', action) - if (action == 'open_timer' && store.state.currentComponent != ct) { - let openTimer = setInterval(() => { - let comp = store.state.currentComponent - if (comp == ct) clearInterval(openTimer) - else { - if (comp == 'CTSettings') Vue.navigateBack() - else { - Vue.navigateTo(CookingTimer) - store.commit('setComponent', 'CookingTimer') - } - } - }, 250) - } -} -Application.on(Application.launchEvent, () => { - Application.android.on( - AndroidApplication.activityNewIntentEvent, - intentListener - ) -}) -Application.on(Application.exitEvent, () => { - store.commit('setComponent', 'EnRecipes') - Application.android.off( - AndroidApplication.activityNewIntentEvent, - intentListener - ) -}) diff --git a/app/resources/Android/src/main/AndroidManifest.xml b/app/resources/Android/src/main/AndroidManifest.xml index f5e4faba..14e84039 100644 --- a/app/resources/Android/src/main/AndroidManifest.xml +++ b/app/resources/Android/src/main/AndroidManifest.xml @@ -11,13 +11,14 @@ - - + + + diff --git a/app/resources/Android/src/main/res/drawable-anydpi-v26/ic_launcher.xml b/app/resources/Android/src/main/res/drawable-anydpi-v26/app_icon.xml similarity index 72% rename from app/resources/Android/src/main/res/drawable-anydpi-v26/ic_launcher.xml rename to app/resources/Android/src/main/res/drawable-anydpi-v26/app_icon.xml index 3b5cf969..04c8ed4c 100644 --- a/app/resources/Android/src/main/res/drawable-anydpi-v26/ic_launcher.xml +++ b/app/resources/Android/src/main/res/drawable-anydpi-v26/app_icon.xml @@ -1,5 +1,5 @@ - + diff --git a/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_add.xml b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_add.xml new file mode 100644 index 00000000..1407d627 --- /dev/null +++ b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_add.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_grocery.xml b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_grocery.xml new file mode 100644 index 00000000..d7d2a1e5 --- /dev/null +++ b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_grocery.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_planner.xml b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_planner.xml new file mode 100644 index 00000000..b16e4142 --- /dev/null +++ b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_planner.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_timer.xml b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_timer.xml new file mode 100644 index 00000000..655ede74 --- /dev/null +++ b/app/resources/Android/src/main/res/drawable-anydpi-v26/sc_timer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/resources/Android/src/main/res/drawable-hdpi/ic_launcher.webp b/app/resources/Android/src/main/res/drawable-hdpi/app_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-hdpi/ic_launcher.webp rename to app/resources/Android/src/main/res/drawable-hdpi/app_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-hdpi/ic_launcher_foreground.webp b/app/resources/Android/src/main/res/drawable-hdpi/app_icon_fg.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-hdpi/ic_launcher_foreground.webp rename to app/resources/Android/src/main/res/drawable-hdpi/app_icon_fg.webp diff --git a/app/resources/Android/src/main/res/drawable-hdpi/ic_stat_notify.webp b/app/resources/Android/src/main/res/drawable-hdpi/notify_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-hdpi/ic_stat_notify.webp rename to app/resources/Android/src/main/res/drawable-hdpi/notify_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-hdpi/ic_stat_notify_silhouette.webp b/app/resources/Android/src/main/res/drawable-hdpi/notify_icon_sil.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-hdpi/ic_stat_notify_silhouette.webp rename to app/resources/Android/src/main/res/drawable-hdpi/notify_icon_sil.webp diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_add.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_add.webp new file mode 100644 index 00000000..3c966167 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_add.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_add_fg.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_add_fg.webp new file mode 100644 index 00000000..fef38e89 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_add_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery.webp new file mode 100644 index 00000000..e1f015d0 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery_fg.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery_fg.webp new file mode 100644 index 00000000..5e3af964 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_grocery_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_planner.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_planner.webp new file mode 100644 index 00000000..5ef4f9c1 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_planner.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_planner_fg.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_planner_fg.webp new file mode 100644 index 00000000..761ad469 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_planner_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_timer.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_timer.webp new file mode 100644 index 00000000..d67881cc Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_timer.webp differ diff --git a/app/resources/Android/src/main/res/drawable-hdpi/sc_timer_fg.webp b/app/resources/Android/src/main/res/drawable-hdpi/sc_timer_fg.webp new file mode 100644 index 00000000..4d34a7ac Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-hdpi/sc_timer_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/ic_launcher.webp b/app/resources/Android/src/main/res/drawable-mdpi/app_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-mdpi/ic_launcher.webp rename to app/resources/Android/src/main/res/drawable-mdpi/app_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-mdpi/ic_launcher_foreground.webp b/app/resources/Android/src/main/res/drawable-mdpi/app_icon_fg.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-mdpi/ic_launcher_foreground.webp rename to app/resources/Android/src/main/res/drawable-mdpi/app_icon_fg.webp diff --git a/app/resources/Android/src/main/res/drawable-mdpi/ic_stat_notify.webp b/app/resources/Android/src/main/res/drawable-mdpi/notify_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-mdpi/ic_stat_notify.webp rename to app/resources/Android/src/main/res/drawable-mdpi/notify_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-mdpi/ic_stat_notify_silhouette.webp b/app/resources/Android/src/main/res/drawable-mdpi/notify_icon_sil.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-mdpi/ic_stat_notify_silhouette.webp rename to app/resources/Android/src/main/res/drawable-mdpi/notify_icon_sil.webp diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_add.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_add.webp new file mode 100644 index 00000000..290f87b0 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_add.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_add_fg.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_add_fg.webp new file mode 100644 index 00000000..17d50d70 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_add_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery.webp new file mode 100644 index 00000000..4318670e Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery_fg.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery_fg.webp new file mode 100644 index 00000000..15020eb9 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_grocery_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_planner.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_planner.webp new file mode 100644 index 00000000..816f2371 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_planner.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_planner_fg.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_planner_fg.webp new file mode 100644 index 00000000..3d4f4293 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_planner_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_timer.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_timer.webp new file mode 100644 index 00000000..ac5889e7 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_timer.webp differ diff --git a/app/resources/Android/src/main/res/drawable-mdpi/sc_timer_fg.webp b/app/resources/Android/src/main/res/drawable-mdpi/sc_timer_fg.webp new file mode 100644 index 00000000..95e87029 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-mdpi/sc_timer_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/ic_launcher.webp b/app/resources/Android/src/main/res/drawable-xhdpi/app_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xhdpi/ic_launcher.webp rename to app/resources/Android/src/main/res/drawable-xhdpi/app_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/ic_launcher_foreground.webp b/app/resources/Android/src/main/res/drawable-xhdpi/app_icon_fg.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xhdpi/ic_launcher_foreground.webp rename to app/resources/Android/src/main/res/drawable-xhdpi/app_icon_fg.webp diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/ic_stat_notify.webp b/app/resources/Android/src/main/res/drawable-xhdpi/notify_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xhdpi/ic_stat_notify.webp rename to app/resources/Android/src/main/res/drawable-xhdpi/notify_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/ic_stat_notify_silhouette.webp b/app/resources/Android/src/main/res/drawable-xhdpi/notify_icon_sil.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xhdpi/ic_stat_notify_silhouette.webp rename to app/resources/Android/src/main/res/drawable-xhdpi/notify_icon_sil.webp diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_add.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_add.webp new file mode 100644 index 00000000..1a377bea Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_add.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_add_fg.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_add_fg.webp new file mode 100644 index 00000000..f7ed5af8 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_add_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery.webp new file mode 100644 index 00000000..69a63422 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery_fg.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery_fg.webp new file mode 100644 index 00000000..4e2e4a99 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_grocery_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner.webp new file mode 100644 index 00000000..4ed87d31 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner_fg.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner_fg.webp new file mode 100644 index 00000000..b712b04d Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_planner_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer.webp new file mode 100644 index 00000000..144623a4 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer_fg.webp b/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer_fg.webp new file mode 100644 index 00000000..dd1d2049 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xhdpi/sc_timer_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/ic_launcher.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/app_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxhdpi/ic_launcher.webp rename to app/resources/Android/src/main/res/drawable-xxhdpi/app_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/ic_launcher_foreground.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/app_icon_fg.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxhdpi/ic_launcher_foreground.webp rename to app/resources/Android/src/main/res/drawable-xxhdpi/app_icon_fg.webp diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/ic_stat_notify.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/notify_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxhdpi/ic_stat_notify.webp rename to app/resources/Android/src/main/res/drawable-xxhdpi/notify_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/ic_stat_notify_silhouette.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/notify_icon_sil.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxhdpi/ic_stat_notify_silhouette.webp rename to app/resources/Android/src/main/res/drawable-xxhdpi/notify_icon_sil.webp diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add.webp new file mode 100644 index 00000000..be7c550a Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add_fg.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add_fg.webp new file mode 100644 index 00000000..e0096ef5 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_add_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery.webp new file mode 100644 index 00000000..118157c7 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery_fg.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery_fg.webp new file mode 100644 index 00000000..81dbd757 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_grocery_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner.webp new file mode 100644 index 00000000..25317794 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner_fg.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner_fg.webp new file mode 100644 index 00000000..21bb98fa Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_planner_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer.webp new file mode 100644 index 00000000..21239054 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer_fg.webp b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer_fg.webp new file mode 100644 index 00000000..cc7b14c5 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxhdpi/sc_timer_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/ic_launcher.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/app_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxxhdpi/ic_launcher.webp rename to app/resources/Android/src/main/res/drawable-xxxhdpi/app_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/app_icon_fg.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.webp rename to app/resources/Android/src/main/res/drawable-xxxhdpi/app_icon_fg.webp diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/ic_stat_notify.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/notify_icon.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxxhdpi/ic_stat_notify.webp rename to app/resources/Android/src/main/res/drawable-xxxhdpi/notify_icon.webp diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/ic_stat_notify_silhouette.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/notify_icon_sil.webp similarity index 100% rename from app/resources/Android/src/main/res/drawable-xxxhdpi/ic_stat_notify_silhouette.webp rename to app/resources/Android/src/main/res/drawable-xxxhdpi/notify_icon_sil.webp diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add.webp new file mode 100644 index 00000000..a21ac1b1 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add_fg.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add_fg.webp new file mode 100644 index 00000000..d431d913 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_add_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery.webp new file mode 100644 index 00000000..3c944bda Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery_fg.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery_fg.webp new file mode 100644 index 00000000..bd147b6f Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_grocery_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner.webp new file mode 100644 index 00000000..0c98f90a Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner_fg.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner_fg.webp new file mode 100644 index 00000000..14ef2e2f Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_planner_fg.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer.webp new file mode 100644 index 00000000..43399182 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer.webp differ diff --git a/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer_fg.webp b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer_fg.webp new file mode 100644 index 00000000..cd0438d8 Binary files /dev/null and b/app/resources/Android/src/main/res/drawable-xxxhdpi/sc_timer_fg.webp differ diff --git a/app/shared/utils.ts b/app/shared/utils.ts index ee37e93a..aefcca58 100644 --- a/app/shared/utils.ts +++ b/app/shared/utils.ts @@ -6,11 +6,18 @@ import { Color, path, knownFolders, - TimerInfo, } from '@nativescript/core' +import { localize } from '@nativescript/localize' + let timerOne declare const global, android, androidx, com, java, Array: any +const PowerManager = android.os.PowerManager +const pm = Utils.android + .getApplicationContext() + .getSystemService(android.content.Context.POWER_SERVICE) +const wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'Timers') + export const restartApp = () => { const ctx = Utils.ad.getApplicationContext() let mStartActivity = new android.content.Intent( @@ -60,14 +67,14 @@ export const vibrate = (duration) => { if (vibratorService.hasVibrator()) vibratorService.vibrate(duration) } export const timer = (dur, callback) => { - clearInterval(timerOne) callback(true) + clearInterval(timerOne) timerOne = setInterval(() => { dur-- callback(true) if (dur == 0) { - callback(false) clearInterval(timerOne) + callback(false) } }, 1000) } @@ -285,12 +292,12 @@ export const shareText = (text, subject) => { intent.putExtra(android.content.Intent.EXTRA_TEXT, text) share(intent, subject) } -export const shareImage = (image, subject) => { +export const shareImage = (image, subject, title) => { let ctx = Application.android.context const intent = getSendIntent('image/jpeg') const baos = new java.io.ByteArrayOutputStream() image.android.compress(android.graphics.Bitmap.CompressFormat.JPEG, 100, baos) - const tmpFile = new java.io.File(ctx.getExternalCacheDir(), 'EnRecipes.jpg') + const tmpFile = new java.io.File(ctx.getCacheDir(), `${title}.jpg`) const fos = new java.io.FileOutputStream(tmpFile) fos.write(baos.toByteArray()) fos.flush() @@ -304,6 +311,14 @@ export const shareImage = (image, subject) => { share(intent, subject) } +export const keepScreenOn = (bool) => { + let ctx = + Application.android.foregroundActivity || Application.android.startActivity + let window = ctx.getWindow() + let flag = android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + bool ? window.addFlags(flag) : window.clearFlags(flag) +} + // TIMER NOTIFICATION export class TimerNotif { static getIcon(ctx, icon) { @@ -322,26 +337,25 @@ export class TimerNotif { // nID ? NotifySrv.cancel(nID) : NotifySrv.cancelAll() NotifySrv.cancel(nID) } - static getNotification( { + multi, actions, bID, cID, cName, description, - nID, priority, sound, title, vibrate, }: { + multi?: boolean actions?: boolean bID: string cID: string cName: string description: string - nID: number priority: number sound: string title: string @@ -361,7 +375,6 @@ export class TimerNotif { if (sdkv >= 26) { const importance = priority > 0 ? NotifyMgr.IMPORTANCE_HIGH : NotifyMgr.IMPORTANCE_MIN - console.log(priority, importance) const AudioAttributes = android.media.AudioAttributes const audioAttributes = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) @@ -386,7 +399,7 @@ export class TimerNotif { const PendingIntent = android.app.PendingIntent const mainInt = new Intent(ctx, com.tns.NativeScriptActivity.class) - mainInt.putExtra('action', 'open_timer') + mainInt.putExtra('action', 'timer') const mainPInt = PendingIntent.getActivity( ctx, 1, @@ -395,10 +408,15 @@ export class TimerNotif { ) // Action intent - let actionInt1, actionInt2, actionPInt1, actionPInt2 + let actionInt1, + actionInt2, + actionInt3, + actionPInt1, + actionPInt2, + actionPInt3 if (actions) { actionInt1 = new Intent(bID) - actionInt1.putExtra('action', 'stop') + actionInt1.putExtra('action', 'delay') actionPInt1 = PendingIntent.getBroadcast( ctx, 2, @@ -406,18 +424,26 @@ export class TimerNotif { PendingIntent.FLAG_UPDATE_CURRENT ) actionInt2 = new Intent(bID) - actionInt2.putExtra('action', 'delay') + actionInt2.putExtra('action', 'dismiss') actionPInt2 = PendingIntent.getBroadcast( ctx, 3, actionInt2, PendingIntent.FLAG_UPDATE_CURRENT ) + actionInt3 = new Intent(bID) + actionInt3.putExtra('action', 'dismissAll') + actionPInt3 = PendingIntent.getBroadcast( + ctx, + 4, + actionInt3, + PendingIntent.FLAG_UPDATE_CURRENT + ) } // CREATE NOTIFICATION - let icon = TimerNotif.getIcon(ctx, 'ic_stat_notify_silhouette') + let icon = this.getIcon(ctx, 'notify_icon_sil') let builder = new NotificationCompat.Builder(ctx, cID) .setColor(new Color('#ff5200').android) .setContentIntent(mainPInt) @@ -434,10 +460,12 @@ export class TimerNotif { if (description) builder.setContentText(description) if (vibrate) builder.setVibrate([500, 1000]) if (actions) { - builder.setDeleteIntent(actionPInt2) builder.setFullScreenIntent(mainPInt, true) - builder.addAction(null, 'Stop', actionPInt1) - builder.addAction(null, 'Delay', actionPInt2) + if (multi) builder.addAction(null, localize('dismissAll'), actionPInt3) + else { + builder.addAction(null, localize('delay'), actionPInt1) + builder.addAction(null, localize('dismiss'), actionPInt2) + } } let notification = builder.build() notification.flags = @@ -450,7 +478,45 @@ export class TimerNotif { const NotifySrv = ctx.getSystemService( android.content.Context.NOTIFICATION_SERVICE ) - NotifySrv.notify(data.nID, TimerNotif.getNotification(data, ctx)) + NotifySrv.notify(data.nID, this.getNotification(data, ctx)) + } +} +export class Printer { + static PrintPackage = global.androidx.print + static isSupported() { + return this.PrintPackage.PrintHelper.systemSupportsPrint() + } + static print(view) { + return new Promise((resolve, reject) => { + try { + let img: any + img = android.graphics.Bitmap.createBitmap( + view.getMeasuredWidth(), + view.getMeasuredHeight(), + android.graphics.Bitmap.Config.ARGB_8888 + ) + view.android.draw(new android.graphics.Canvas(img)) + this.printImage(img).then(resolve, reject) + } catch (e) { + reject(e) + } + }) + } + static printImage(img) { + return new Promise((resolve, reject) => { + try { + let callback = (success) => resolve(success) + let printHelper = new this.PrintPackage.PrintHelper( + Application.android.foregroundActivity + ) + printHelper.setScaleMode(this.PrintPackage.PrintHelper.SCALE_MODE_FIT) + let jobName = 'MyPrintJob' + printHelper.printBitmap(jobName, img) + callback(true) + } catch (e) { + reject(e) + } + }) } } @@ -489,3 +555,15 @@ export const getTones = () => { return { tones, defaultTone: defaultToneUri ? defaultTone : tones[0] } } + +//DETECT RTL LANGUAGE +export const RTL = (): boolean => { + const ctx = Utils.android.getApplicationContext() + const config = ctx.getResources().getConfiguration() + return config.getLayoutDirection() == android.view.View.LAYOUT_DIRECTION_RTL +} + +//WAKE LOCK +export const wakeLock = (bool) => { + bool ? !wl.isHeld() && wl.acquire() : wl.isHeld() && wl.release() +} diff --git a/app/store.ts b/app/store.ts index f27a76bc..182aeaed 100644 --- a/app/store.ts +++ b/app/store.ts @@ -5,11 +5,17 @@ import { openOrCreate } from '@akylas/nativescript-sqlite' import { getFileAccess, File, - ApplicationSettings, Application, knownFolders, path, } from '@nativescript/core' +import { + getNumber, + setNumber, + getString, + setString, +} from '@nativescript/core/application-settings' +import * as utils from '~/shared/utils' // OPEN DATABASE FILE const db = openOrCreate( @@ -31,6 +37,11 @@ db.execute( 'CREATE TABLE IF NOT EXISTS mealPlans (date INT, type TEXT, title TEXT)' ) +// CREATE timerPresets TABLE +db.execute( + 'CREATE TABLE IF NOT EXISTS timerPresets (id INT PRIMARY KEY, label TEXT, time TEXT)' +) + const defaultCuisines = [ 'American', 'Brazilian', @@ -136,21 +147,22 @@ const defaultUnits = [ 'medium', 'large', ] + const listItems = { cuisines: { - sort: true, + sort: 1, defaultItems: defaultCuisines, }, categories: { - sort: true, + sort: 1, defaultItems: defaultCategories, }, yieldUnits: { - sort: false, + sort: 0, defaultItems: defaultYieldUnits, }, units: { - sort: false, + sort: 0, defaultItems: defaultUnits, }, } @@ -227,10 +239,15 @@ export default new Vuex.Store({ trans: '\ue93c', delay: '\ue93d', ring: '\ue93e', + print: '\ue93f', }, currentComponent: 'EnRecipes', - sortType: 'Oldest first', + sortType: 'random', language: [ + { + locale: 'ar', + title: 'العربية', + }, { locale: 'da', title: 'Dansk', @@ -239,10 +256,18 @@ export default new Vuex.Store({ locale: 'de', title: 'Deutsch', }, + { + locale: 'en-IN', + title: 'English (IN)', + }, { locale: 'en-GB', title: 'English (UK)', }, + { + locale: 'en-US', + title: 'English (US)', + }, { locale: 'es', title: 'Español', @@ -267,10 +292,6 @@ export default new Vuex.Store({ locale: 'hi', title: 'हिंदी', }, - { - locale: 'ml', - title: 'മലയാളം', - }, { locale: 'id', title: 'Indonesia', @@ -279,6 +300,14 @@ export default new Vuex.Store({ locale: 'it', title: 'Italiano', }, + { + locale: 'ja', + title: '日本語', + }, + { + locale: 'ml', + title: 'മലയാളം', + }, { locale: 'nb-NO', title: 'Norsk bokmål', @@ -287,10 +316,10 @@ export default new Vuex.Store({ locale: 'nl', title: 'Nederlands', }, - // { - // locale: 'pt', - // title: 'Português', - // }, + { + locale: 'pt', + title: 'Português', + }, { locale: 'pt-BR', title: 'Português (BR)', @@ -308,97 +337,114 @@ export default new Vuex.Store({ title: 'తెలుగు', }, ], - shakeEnabled: ApplicationSettings.getBoolean('shakeEnabled', true), + shakeEnabled: getNumber('shakeEnabled', 1), importSummary: { found: 0, imported: 0, updated: 0, }, - layout: ApplicationSettings.getString('layout', 'detailed'), + layout: getString('layout', 'detailed'), selectedCuisine: null, selectedCategory: null, selectedTag: null, appTheme: 'sysDef', - mondayFirst: ApplicationSettings.getBoolean('mondayFirst', false), - timerDelay: ApplicationSettings.getString('timerDelay', '1 minute'), + mondayFirst: getNumber('mondayFirst', 0), + timerDelay: getString('timerDelay', '1 minute'), timerSound: {}, - timerVibrate: ApplicationSettings.getBoolean('timerVibrate', false), - timerPresets: [ - { - id: 534534563, - label: 'Soft Eggs', - recipeID: null, - time: '00:06:00', - timerInterval: null, - isPaused: false, - preset: 1, - }, - { - id: 564646, - label: 'Medium Eggs', - recipeID: null, - time: '00:08:00', - timerInterval: null, - isPaused: false, - preset: 1, - }, - { - id: 43276767, - label: 'Hard Eggs', - recipeID: null, - time: '00:10:00', - timerInterval: null, - isPaused: false, - preset: 1, - }, - ], + timerVibrate: getNumber('timerVibrate', 0), + timerPresets: [], activeTimers: [], - timerIntervals: [], + FGService: 0, + RTL: 0, }, mutations: { - addTimerPreset(state, timer) { - state.timerPresets.push(timer) + setRTL(state) { + state.RTL = utils.RTL() as any | 0 }, - removeTimerPreset(state, index) { - state.timerPresets.splice(index, 1) + setFGService(state, val) { + state.FGService = val + }, + addTimerPreset(state, timer) { + let i = state.timerPresets.findIndex((e) => e.id == timer.id) + if (state.timerPresets.some((e) => e.id == timer.id)) { + state.timerPresets.splice(i, 1, timer) + } else state.timerPresets.push(timer) + db.execute( + `REPLACE INTO timerPresets (id, label, time) VALUES (?, ?, ?)`, + [timer.id, timer.label, timer.time] + ) + }, + deleteTimerPreset(state, i) { + let id = state.timerPresets[i] + state.timerPresets.splice(i, 1) + db.execute(`DELETE FROM timerPresets WHERE id = ${id}`) + }, + initTimerPresets(state) { + if (!state.timerPresets.length) + db.select(`SELECT * FROM timerPresets`).then((res) => { + res.forEach((t) => { + t.recipeID = 0 + t.timerInt = 0 + t.isPaused = 0 + t.preset = 1 + t.done = 0 + state.timerPresets.push(t) + }) + }) + }, + importTimerPresets(state, timers) { + let newPresets = timers.filter( + (e) => !state.timerPresets.some((f) => f.id === e.id) + ) + newPresets.forEach((t) => { + db.execute( + `INSERT INTO timerPresets (id, label, time) VALUES (?, ?, ?)`, + [t.id, t.label, t.time] + ) + state.timerPresets.push(t) + }) }, clearTimerInterval(state) { state.activeTimers.forEach((e) => { - clearInterval(e.timerInterval) - e.timerInterval = null + clearInterval(e.timerInt) + e.timerInt = 0 }) }, - addActiveTimer(state, { timer, index }) { - state.activeTimers.splice(index, 0, timer) + addActiveTimer(state, { timer, i }) { + state.activeTimers.splice(i, 0, timer) + }, + sortActiveTimers(state) { + let a = state.activeTimers.reduce((acc, e) => { + ;(acc[e.recipeID] = acc[e.recipeID] || []).push(e) + return acc + }, {}) + state.activeTimers = [...(Object).values(a).flat(2)] }, updateActiveTimer(state, timer) { - let index = state.activeTimers.findIndex((e) => e.id == timer.id) - state.activeTimers.splice(index, 1, timer) + let i = state.activeTimers.findIndex((e) => e.id == timer.id) + state.activeTimers.splice(i, 1, timer) }, - removeActiveTimer(state, index) { - state.activeTimers.splice(index, 1) + removeActiveTimer(state, i) { + state.activeTimers.splice(i, 1) }, setTimerDelay(state, delay) { state.timerDelay = delay - ApplicationSettings.setString('timerDelay', delay) + setString('timerDelay', delay) }, setTimerSound(state, sound) { - state.timerSound = { - title: sound.title, - uri: sound.uri, - } - ApplicationSettings.setString('timerSound', JSON.stringify(sound)) + state.timerSound = sound + setString('timerSound', JSON.stringify(sound)) }, - setTimerVibrate(state, bool) { - state.timerVibrate = bool - ApplicationSettings.setBoolean('timerVibrate', bool) + setTimerVibrate(state, n) { + state.timerVibrate = n + setNumber('timerVibrate', n) }, clearImportSummary(state) { for (const key in state.importSummary) state.importSummary[key] = 0 }, - setFirstDay(state, bool) { - state.mondayFirst = bool - ApplicationSettings.setBoolean('mondayFirst', bool) + setFirstDay(state, n) { + state.mondayFirst = n | 0 + setNumber('mondayFirst', n | 0) }, setTheme(state, theme) { switch (theme) { @@ -414,7 +460,7 @@ export default new Vuex.Store({ state.appTheme = theme break } - ApplicationSettings.setString('appTheme', theme) + setString('appTheme', theme) }, clearFilter(state) { state.selectedCuisine = state.selectedCategory = state.selectedTag = null @@ -436,8 +482,8 @@ export default new Vuex.Store({ state.recipes.push(e) }) }) - state.shakeEnabled = ApplicationSettings.getBoolean('shakeEnabled', true) - state.sortType = ApplicationSettings.getString('sortType', 'Oldest first') + state.shakeEnabled = getNumber('shakeEnabled', 1) + state.sortType = getString('sortType', 'random') }, importRecipesFromJSON(state, recipes) { let localRecipesIDs, partition @@ -463,6 +509,12 @@ export default new Vuex.Store({ r.yieldQuantity = r.yield.quantity r.yieldUnit = r.yield.unit delete r.yield + function getTime(d) { + return new Date(d).getTime() + } + r.lastTried = getTime(r.lastTried) + r.lastModified = getTime(r.lastModified) + r.created = getTime(r.created) return r }) } @@ -492,9 +544,9 @@ export default new Vuex.Store({ JSON.stringify(r.notes), r.favorite ? 1 : 0, r.tried ? 1 : 0, - r.lastTried ? new Date(r.lastTried).getTime() : null, - r.lastModified ? new Date(r.lastModified).getTime() : null, - r.created ? new Date(r.created).getTime() : null, + r.lastTried, + r.lastModified, + r.created, ] ) }) @@ -533,9 +585,9 @@ export default new Vuex.Store({ JSON.stringify(r.notes), r.favorite ? 1 : 0, r.tried ? 1 : 0, - r.lastTried ? new Date(r.lastTried).getTime() : null, - r.lastModified ? new Date(r.lastModified).getTime() : null, - r.created ? new Date(r.created).getTime() : null, + r.lastTried, + r.lastModified, + r.created, ] ) } @@ -649,9 +701,9 @@ export default new Vuex.Store({ function exist({ id }, index: number) { if (id === recipe.id) { i = index - return true + return 1 } - return false + return 0 } state.recipes.some(exist) ? Object.assign(state.recipes[i], recipe) @@ -659,9 +711,9 @@ export default new Vuex.Store({ }, deleteRecipes(state, ids) { ids.forEach((id: string) => { - let index = state.recipes.findIndex((e) => e.id === id) - getFileAccess().deleteFile(state.recipes[index].image) - state.recipes.splice(index, 1) + let i = state.recipes.findIndex((e) => e.id === id) + getFileAccess().deleteFile(state.recipes[i].image) + state.recipes.splice(i, 1) db.execute(`DELETE FROM recipes WHERE id = '${id}'`) state.recipes.forEach((e, i) => { if (e.combinations.includes(id)) { @@ -774,11 +826,11 @@ export default new Vuex.Store({ type = 'snacks' break } - return f.title === e.title && f.date === date && f.type === type + return f.title == e.title && f.date == date && f.type == type }) } else { return !state.mealPlans.some( - (f) => f.title === e.title && f.date === e.date && f.type === e.type + (f) => f.title == e.title && f.date == e.date && f.type == e.type ) } }) @@ -835,47 +887,48 @@ export default new Vuex.Store({ ) }) }, - addMealPlan(state, { date, type, title }) { + addMealPlan(state, { date, type, title, index, inDB }) { let mealPlan = { date, type, title, } - state.mealPlans.push(mealPlan) - const cols = Object.keys(mealPlan).join(', ') - const placeholder = Object.keys(mealPlan) - .fill('?') - .join(', ') - db.execute( - `INSERT INTO mealPlans (${cols}) VALUES (${placeholder})`, - Object.values(mealPlan) - ) - }, - deleteMealPlan(state, { date, type, title }) { - let index = state.mealPlans.findIndex( - (e) => e.title === title && e.type === type && e.date === date - ) - state.mealPlans.splice(index, 1) - state.mealPlans = [...state.mealPlans] - db.execute( - `DELETE FROM mealPlans WHERE date = ${date} AND type = '${type}' AND title = '${title}'` - ) - }, - toggleState(state, { id, key, setDate }) { - let index = state.recipes.findIndex((e) => e.id == id) - state.recipes[index][key] = state.recipes[index][key] ? 0 : 1 - db.execute( - `UPDATE recipes SET ${key} = ${state.recipes[index][key]} WHERE id = '${id}'` - ) - if (setDate) { - state.recipes[index].lastTried = new Date().getTime() + if (inDB) { + const cols = Object.keys(mealPlan).join(', ') + const placeholder = Object.keys(mealPlan) + .fill('?') + .join(', ') db.execute( - `UPDATE recipes SET lastTried = ${state.recipes[index].lastTried} WHERE id = '${id}'` + `INSERT INTO mealPlans (${cols}) VALUES (${placeholder})`, + Object.values(mealPlan) ) + if (index === null) state.mealPlans.push(mealPlan) + } else { + state.mealPlans.splice(index, 0, mealPlan) } }, - setComponent(state, comp) { - state.currentComponent = comp + deleteMealPlan(state, { date, type, title, index, inDB }) { + if (inDB) { + db.execute( + `DELETE FROM mealPlans WHERE date = ${date} AND type = '${type}' AND title = '${title}'` + ) + } else { + state.mealPlans.splice(index, 1) + state.mealPlans = [...state.mealPlans] + } + }, + toggleState(state, { id, key, setDate }) { + let i = state.recipes.findIndex((e) => e.id == id) + state.recipes[i][key] = state.recipes[i][key] ? 0 : 1 + db.execute( + `UPDATE recipes SET ${key} = ${state.recipes[i][key]} WHERE id = '${id}'` + ) + if (setDate) { + state.recipes[i].lastTried = new Date().getTime() + db.execute( + `UPDATE recipes SET lastTried = ${state.recipes[i].lastTried} WHERE id = '${id}'` + ) + } }, unSyncCombinations(state, { id, combinations }) { state.recipes.forEach((e, i) => { @@ -890,19 +943,17 @@ export default new Vuex.Store({ }) }, setShake(state, shake) { - state.shakeEnabled = shake - ApplicationSettings.setBoolean('shakeEnabled', shake) + state.shakeEnabled = shake | 0 + setNumber('shakeEnabled', shake | 0) }, setRating(state, { id, rating }) { - let index = state.recipes.findIndex((e) => e.id == id) - state.recipes[index].rating = rating + let i = state.recipes.findIndex((e) => e.id == id) + state.recipes[i].rating = rating db.execute(`UPDATE recipes SET rating = ${rating} WHERE id = '${id}'`) }, toggleCart(state, { id }) { - let index = state.recipes.indexOf( - state.recipes.filter((e) => e.id === id)[0] - ) - state.recipes[index].inBag = !state.recipes[index].inBag + let i = state.recipes.indexOf(state.recipes.filter((e) => e.id === id)[0]) + state.recipes[i].inBag = !state.recipes[i].inBag }, unlinkBrokenImages(state) { state.recipes.forEach((r, i) => { @@ -924,11 +975,26 @@ export default new Vuex.Store({ }, }, actions: { + setRTL({ commit }) { + commit('setRTL') + }, + sortActiveTimers({ commit }) { + commit('sortActiveTimers') + }, + setFGService({ commit }, val) { + commit('setFGService', val) + }, addTimerPreset({ commit }, timer) { commit('addTimerPreset', timer) }, - removeTimerPreset({ commit }, timer) { - commit('removeTimerPreset', timer) + deleteTimerPreset({ commit }, timer) { + commit('deleteTimerPreset', timer) + }, + initTimerPresets({ commit }) { + commit('initTimerPresets') + }, + importTimerPresets({ commit }, timers) { + commit('importTimerPresets', timers) }, clearTimerInterval({ commit }) { commit('clearTimerInterval') @@ -939,8 +1005,8 @@ export default new Vuex.Store({ updateActiveTimer({ commit }, timer) { commit('updateActiveTimer', timer) }, - removeActiveTimer({ commit }, index) { - commit('removeActiveTimer', index) + removeActiveTimer({ commit }, i) { + commit('removeActiveTimer', i) }, setTimerDelay({ commit }, delay) { commit('setTimerDelay', delay) @@ -948,14 +1014,14 @@ export default new Vuex.Store({ setTimerSound({ commit }, sound) { commit('setTimerSound', sound) }, - setTimerVibrate({ commit }, bool) { - commit('setTimerVibrate', bool) + setTimerVibrate({ commit }, n) { + commit('setTimerVibrate', n) }, clearImportSummary({ commit }) { commit('clearImportSummary') }, - setFirstDay({ commit }, bool) { - commit('setFirstDay', bool) + setFirstDay({ commit }, n) { + commit('setFirstDay', n) }, setTheme({ commit }, theme) { commit('setTheme', theme) @@ -1017,9 +1083,6 @@ export default new Vuex.Store({ toggleStateAction({ commit }, toggledRecipe) { commit('toggleState', toggledRecipe) }, - setComponent({ commit }, comp) { - commit('setComponent', comp) - }, unSyncCombinationsAction({ commit }, combinations) { commit('unSyncCombinations', combinations) }, diff --git a/package-lock.json b/package-lock.json index 9a322c11..0727a621 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "dependencies": { "@akylas/nativescript-sqlite": "^3.3.12", "@nativescript-community/ui-collectionview": "^4.0.29", - "@nativescript/core": "^8.0.5", + "@nativescript-rtl/ui": "^0.1.8", + "@nativescript/core": "^8.0.7", "@nativescript/local-notifications": "^5.0.3", "@nativescript/localize": "^5.0.4", "@triniwiz/nativescript-accelerometer": "^4.0.3", @@ -23,12 +24,12 @@ "devDependencies": { "@nativescript/android": "8.0.0", "@nativescript/types": "^8.0.1", - "@nativescript/webpack": "beta", - "@types/node": "^15.3.0", + "@nativescript/webpack": "^5.0.0-beta.12", + "@types/node": "^15.9.0", "nativescript-vue-template-compiler": "~2.9.0", - "sass": "^1.32.13", + "sass": "^1.34.1", "typescript": "^4.2.4", - "vue": "^2.6.12" + "vue": "^2.6.13" } }, "node_modules/@akylas/nativescript-sqlite": { @@ -53,26 +54,26 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "node_modules/@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -118,14 +119,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, "peerDependencies": { @@ -196,15 +197,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/types": "^7.14.4" } }, "node_modules/@babel/helper-simple-access": { @@ -322,9 +323,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -361,9 +362,9 @@ } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.0", @@ -384,6 +385,19 @@ "resolved": "https://registry.npmjs.org/@nativescript-community/ui-collectionview/-/ui-collectionview-4.0.31.tgz", "integrity": "sha512-kWtupfe+zr2Vj5hLfie/xxlFYLtLbBS6WrDBUD9z1cJYIZRf9KQxwl8z4wJ2dtQ51dlt1r8CJZgpgRbMTk5xQA==" }, + "node_modules/@nativescript-rtl/ui": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@nativescript-rtl/ui/-/ui-0.1.8.tgz", + "integrity": "sha512-GUmRHuwI0vJ1IKUH1ilm2SmPo8iv6o5PhA4LxmNnysODuiJywnnNfE9yFpoecBsDOMRVT6M/dlV26+3DfO4Rbw==", + "dependencies": { + "@types/node": "^14.6.4" + } + }, + "node_modules/@nativescript-rtl/ui/node_modules/@types/node": { + "version": "14.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.2.tgz", + "integrity": "sha512-sld7b/xmFum66AAKuz/rp/CUO8+98fMpyQ3SBfzzBNGMd/1iHBTAg9oyAvcYlAj46bpc74r91jSw2iFdnx29nw==" + }, "node_modules/@nativescript/android": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@nativescript/android/-/android-8.0.0.tgz", @@ -391,9 +405,9 @@ "dev": true }, "node_modules/@nativescript/core": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-8.0.6.tgz", - "integrity": "sha512-w9fmuzUrKUblHbkmApMNWExgFZewZCnwf8A2ymcdLsftvljXrDhztbIgQD4aDis61OaqE1N42UToYPpUkaw5pw==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-8.0.7.tgz", + "integrity": "sha512-2OLwPa5Y+9aKLyo0zWl0YSjWS0f+EFG8SdZe+uuU2mzEhCb8q9djdICjHynuXZkmrtQsx/lKjLhbtnoYQsMRvA==", "hasInstallScript": true, "dependencies": { "@nativescript/hook": "~2.0.0", @@ -459,46 +473,46 @@ "dev": true }, "node_modules/@nativescript/webpack": { - "version": "5.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.10.tgz", - "integrity": "sha512-j/NlhVCZi/8N5IQQbPjSRWPc3a7zSW8NTc0LsxbidsBPqeTiX1wUq5ajmNv/ctmbiNRsjmB9wTDwDxowormr2Q==", + "version": "5.0.0-dev.0", + "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-dev.0.tgz", + "integrity": "sha512-pJhuzm+sqMBrr+MHAm6qQclvHo6evK8IsqBpZ8s2e5O/Bk0HbtPdKJdiNQuw2TRHWpWJ1Rkp3Nc8lnZsoxK7VQ==", "dev": true, "dependencies": { - "@babel/core": "7.13.15", - "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", - "acorn": "^8.1.1", + "@babel/core": "^7.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.0", + "acorn": "^8.0.0", "acorn-stage3": "^4.0.0", - "babel-loader": "8.2.2", - "chalk": "4.1.0", - "cli-highlight": "2.1.11", - "commander": "7.2.0", - "copy-webpack-plugin": "8.1.1", - "css": "3.0.0", - "css-loader": "5.2.1", - "dotenv-webpack": "7.0.2", - "fork-ts-checker-webpack-plugin": "6.2.1", - "loader-utils": "2.0.0", - "lodash.get": "4.4.2", - "micromatch": "4.0.4", - "postcss": "8.2.10", - "postcss-import": "14.0.1", - "postcss-loader": "5.2.0", - "raw-loader": "4.0.2", - "react-refresh": "0.10.0", - "sass": "1.32.8", - "sass-loader": "11.0.1", - "sax": "1.2.4", - "source-map": "0.7.3", - "terser-webpack-plugin": "5.1.1", - "ts-dedent": "2.1.1", - "ts-loader": "8.1.0", - "vue-loader": "15.9.6", - "webpack": "5.31.2", - "webpack-bundle-analyzer": "4.4.0", - "webpack-chain": "6.5.1", - "webpack-cli": "4.6.0", - "webpack-merge": "5.7.3", - "webpack-virtual-modules": "0.4.2" + "babel-loader": "^8.0.0", + "chalk": "^4.0.0", + "cli-highlight": "^2.0.0", + "commander": "^7.0.0", + "copy-webpack-plugin": "^9.0.0", + "css": "^3.0.0", + "css-loader": "^5.0.0", + "dotenv-webpack": "^7.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.0", + "loader-utils": "^2.0.0", + "lodash.get": "^4.0.0", + "micromatch": "^4.0.0", + "postcss": "^8.0.0", + "postcss-import": "^14.0.0", + "postcss-loader": "^5.0.0", + "raw-loader": "^4.0.0", + "react-refresh": "^0.10.0", + "sass": "^1.0.0", + "sass-loader": "^12.0.0", + "sax": "^1.0.0", + "source-map": "^0.7.0", + "terser-webpack-plugin": "^5.0.0", + "ts-dedent": "^2.0.0", + "ts-loader": "^9.0.0", + "vue-loader": "^15.0.0", + "webpack": "^5.0.0", + "webpack-bundle-analyzer": "^4.0.0", + "webpack-chain": "^6.0.0", + "webpack-cli": "^4.0.0", + "webpack-merge": "^5.0.0", + "webpack-virtual-modules": "^0.4.0" }, "bin": { "nativescript-webpack": "dist/bin/index.js" @@ -512,28 +526,13 @@ } } }, - "node_modules/@nativescript/webpack/node_modules/sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", - "dev": true, - "dependencies": { - "chokidar": ">=2.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -541,21 +540,21 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -621,9 +620,9 @@ "integrity": "sha512-LKwlNaIWJPEbFKsPwA5vndqrKBUqE9dK9wdi/LsHs0Nl6pfMI7fPkBPoGW7UvVSMqy4s4d35Q0FDbKXR1t796A==" }, "node_modules/@types/eslint": { - "version": "7.2.11", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.11.tgz", - "integrity": "sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw==", + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -641,9 +640,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "node_modules/@types/json-schema": { @@ -653,9 +652,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", - "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", + "version": "15.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", + "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", "dev": true }, "node_modules/@types/parse-json": { @@ -979,9 +978,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1098,15 +1097,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -1375,22 +1365,10 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001234", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz", + "integrity": "sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA==", "dev": true, "funding": { "type": "opencollective", @@ -1398,9 +1376,9 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -1434,6 +1412,18 @@ "fsevents": "~2.3.1" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -1555,13 +1545,13 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz", + "integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==", "dev": true, "dependencies": { "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", + "glob-parent": "^6.0.0", "globby": "^11.0.3", "normalize-path": "^3.0.0", "p-limit": "^3.1.0", @@ -1569,7 +1559,7 @@ "serialize-javascript": "^5.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -1597,12 +1587,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -1650,23 +1634,21 @@ } }, "node_modules/css-loader": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.1.tgz", - "integrity": "sha512-YCyRzlt/jgG1xanXZDG/DHqAueOtXFHeusP9TS478oP1J++JSKOyEgGW1GHVoCj/rkS+GWOlBwqQJBr9yajQ9w==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, "dependencies": { - "camelcase": "^6.2.0", - "cssesc": "^3.0.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.8", + "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "engines": { "node": ">= 10.13.0" @@ -1847,21 +1829,21 @@ } }, "node_modules/dotenv-defaults": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.1.tgz", - "integrity": "sha512-ugFCyBF7ILuwpmznduHPQZBMucHHJ8T4OBManTEVjemxCm2+nqifSuW2lD2SNKdiKSH1E324kZSdJ8M04b4I/A==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", "dev": true, "dependencies": { "dotenv": "^8.2.0" } }, "node_modules/dotenv-webpack": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.2.tgz", - "integrity": "sha512-RY+/5uM/XY4bGtih9f9ic8hlrUDxVcZZBPWlnX/aHhaKxcVVX9SH/5VH7CSmvVo9GL6PKvQOA0X1bc552rnatQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.3.tgz", + "integrity": "sha512-O0O9pOEwrk+n1zzR3T2uuXRlw64QxHSPeNN1GaiNBloQFNaCUL9V8jxSVz4jlXXFP/CIqK8YecWf8BAvsSgMjw==", "dev": true, "dependencies": { - "dotenv-defaults": "^2.0.1" + "dotenv-defaults": "^2.0.2" }, "engines": { "node": ">=10" @@ -1877,9 +1859,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "version": "1.3.748", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz", + "integrity": "sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ==", "dev": true }, "node_modules/emoji-regex": { @@ -1898,29 +1880,25 @@ } }, "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, "engines": { - "node": ">=8.6" + "node": ">=6" } }, "node_modules/envinfo": { @@ -1935,18 +1913,6 @@ "node": ">=4" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2042,9 +2008,9 @@ } }, "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", @@ -2087,6 +2053,18 @@ "node": ">=8" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2151,9 +2129,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-Pyhn2kav/Y2g6I7aInABgcph/B78jjdXc4kGHzaAUBL4UVthknxM6aMH47JwpnuTJmdOuf6p5vMbIahsBHuWGg==", + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz", + "integrity": "sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.8.3", @@ -2163,6 +2141,7 @@ "cosmiconfig": "^6.0.0", "deepmerge": "^4.2.2", "fs-extra": "^9.0.0", + "glob": "^7.1.6", "memfs": "^3.1.2", "minimatch": "^3.0.4", "schema-utils": "2.7.0", @@ -2321,15 +2300,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -2425,9 +2404,9 @@ } }, "node_modules/highlight.js": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", - "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, "engines": { "node": "*" @@ -2614,12 +2593,6 @@ "node": ">=8" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2642,19 +2615,34 @@ "dev": true }, "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2836,19 +2824,6 @@ "node": ">= 4.0.0" } }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, "node_modules/merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -2908,21 +2883,21 @@ } }, "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "dependencies": { - "mime-db": "1.47.0" + "mime-db": "1.48.0" }, "engines": { "node": ">= 0.6" @@ -3295,14 +3270,14 @@ } }, "node_modules/postcss": { - "version": "8.2.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", - "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dev": true, "dependencies": { "colorette": "^1.2.2", - "nanoid": "^3.1.22", - "source-map": "^0.6.1" + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3313,9 +3288,9 @@ } }, "node_modules/postcss-import": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.1.tgz", - "integrity": "sha512-Xn2+z++vWObbEPhiiKO1a78JiyhqipyrXHBb3AHpv0ks7Cdg+GxQQJ24ODNMTanldf7197gSP3axppO9yaG0lA==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", @@ -3330,9 +3305,9 @@ } }, "node_modules/postcss-loader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.2.0.tgz", - "integrity": "sha512-uSuCkENFeUaOYsKrXm0eNNgVIxc71z8RcckLMbVw473rGojFnrUeqEz6zBgXsH2q1EIzXnO/4pEz9RhALjlITA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "dev": true, "dependencies": { "cosmiconfig": "^7.0.0", @@ -3478,15 +3453,6 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", @@ -3500,18 +3466,6 @@ "node": ">=4" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -3621,21 +3575,6 @@ "pify": "^2.3.0" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "node_modules/readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -3766,9 +3705,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.0.tgz", - "integrity": "sha512-rHEN0BscqjUYuomUEaqq3BMgsXqQfkcMVR7UhscsAVub0/spUrZGBMxQXFS2kfiDsPLZw5yuU9iJEFNC2x38Qw==", + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.1.tgz", + "integrity": "sha512-scLA7EIZM+MmYlej6sdVr0HRbZX5caX5ofDT9asWnUJj21oqgsC+1LuNfm0eg+vM0fCTZHhwImTiCU0sx9h9CQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0" @@ -3781,16 +3720,16 @@ } }, "node_modules/sass-loader": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.0.1.tgz", - "integrity": "sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.0.0.tgz", + "integrity": "sha512-LJQMyDdNdhcvoO2gJFw7KpTaioVFDeRJOuatRDUNgCIqyu4s4kgDsNofdGzAZB1zFOgo/p3fy+aR/uGXamcJBg==", "dev": true, "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -3798,7 +3737,7 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", "sass": "^1.3.0", "webpack": "^5.0.0" }, @@ -3951,6 +3890,15 @@ "node": ">= 8" } }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-resolve": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", @@ -3997,15 +3945,6 @@ "node": ">= 0.10.0" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", @@ -4080,17 +4019,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dev": true, "dependencies": { - "jest-worker": "^26.6.2", + "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.5.1" + "terser": "^5.7.0" }, "engines": { "node": ">= 10.13.0" @@ -4197,23 +4136,22 @@ } }, "node_modules/ts-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz", - "integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", + "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", + "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "typescript": "*", - "webpack": "*" + "webpack": "^5.0.0" } }, "node_modules/ts-loader/node_modules/lru-cache": { @@ -4280,9 +4218,9 @@ "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" }, "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -4323,9 +4261,9 @@ "dev": true }, "node_modules/vue": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", - "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.13.tgz", + "integrity": "sha512-O+pAdJkce1ooYS1XyoQtpBQr9An+Oys3w39rkqxukVO3ZD1ilYJkWBGoRuadiQEm2LLJnCL2utV4TMSf52ubjw==", "dev": true }, "node_modules/vue-hot-reload-api": { @@ -4335,9 +4273,9 @@ "dev": true }, "node_modules/vue-loader": { - "version": "15.9.6", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", - "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", + "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", "dev": true, "dependencies": { "@vue/component-compiler-utils": "^3.1.0", @@ -4449,22 +4387,22 @@ } }, "node_modules/webpack": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.31.2.tgz", - "integrity": "sha512-0bCQe4ybo7T5Z0SC5axnIAH+1WuIdV4FwLYkaAlLtvfBhIx8bPS48WHTfiRZS1VM+pSiYt7e/rgLs3gLrH82lQ==", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", + "@types/estree": "^0.0.47", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", + "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", @@ -4475,8 +4413,8 @@ "schema-utils": "^3.0.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "bin": { "webpack": "bin/webpack.js" @@ -4495,9 +4433,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.0.tgz", - "integrity": "sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", "dev": true, "dependencies": { "acorn": "^8.0.4", @@ -4549,18 +4487,17 @@ } }, "node_modules/webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", "colorette": "^1.2.1", "commander": "^7.0.0", - "enquirer": "^2.3.6", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -4607,9 +4544,9 @@ } }, "node_modules/webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dev": true, "dependencies": { "source-list-map": "^2.0.1", @@ -4629,24 +4566,11 @@ } }, "node_modules/webpack-virtual-modules": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.2.tgz", - "integrity": "sha512-OUsT1VZhArN8nY7g6mMlw91HWnXcNXsIQjsQ83WteF4ViZ6YXqF2sWKOTDIZ0H+PPiApQdszLdZIrD7NNlU0Yw==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", "dev": true }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -4845,26 +4769,26 @@ } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", - "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.15", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.14", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -4901,14 +4825,14 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" } }, @@ -4976,15 +4900,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/types": "^7.14.4" } }, "@babel/helper-simple-access": { @@ -5092,9 +5016,9 @@ } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/template": { @@ -5125,9 +5049,9 @@ } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", @@ -5145,6 +5069,21 @@ "resolved": "https://registry.npmjs.org/@nativescript-community/ui-collectionview/-/ui-collectionview-4.0.31.tgz", "integrity": "sha512-kWtupfe+zr2Vj5hLfie/xxlFYLtLbBS6WrDBUD9z1cJYIZRf9KQxwl8z4wJ2dtQ51dlt1r8CJZgpgRbMTk5xQA==" }, + "@nativescript-rtl/ui": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@nativescript-rtl/ui/-/ui-0.1.8.tgz", + "integrity": "sha512-GUmRHuwI0vJ1IKUH1ilm2SmPo8iv6o5PhA4LxmNnysODuiJywnnNfE9yFpoecBsDOMRVT6M/dlV26+3DfO4Rbw==", + "requires": { + "@types/node": "^14.6.4" + }, + "dependencies": { + "@types/node": { + "version": "14.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.2.tgz", + "integrity": "sha512-sld7b/xmFum66AAKuz/rp/CUO8+98fMpyQ3SBfzzBNGMd/1iHBTAg9oyAvcYlAj46bpc74r91jSw2iFdnx29nw==" + } + } + }, "@nativescript/android": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@nativescript/android/-/android-8.0.0.tgz", @@ -5152,9 +5091,9 @@ "dev": true }, "@nativescript/core": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-8.0.6.tgz", - "integrity": "sha512-w9fmuzUrKUblHbkmApMNWExgFZewZCnwf8A2ymcdLsftvljXrDhztbIgQD4aDis61OaqE1N42UToYPpUkaw5pw==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-8.0.7.tgz", + "integrity": "sha512-2OLwPa5Y+9aKLyo0zWl0YSjWS0f+EFG8SdZe+uuU2mzEhCb8q9djdICjHynuXZkmrtQsx/lKjLhbtnoYQsMRvA==", "requires": { "@nativescript/hook": "~2.0.0", "css-tree": "^1.1.2", @@ -5218,82 +5157,71 @@ "dev": true }, "@nativescript/webpack": { - "version": "5.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.10.tgz", - "integrity": "sha512-j/NlhVCZi/8N5IQQbPjSRWPc3a7zSW8NTc0LsxbidsBPqeTiX1wUq5ajmNv/ctmbiNRsjmB9wTDwDxowormr2Q==", + "version": "5.0.0-dev.0", + "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-dev.0.tgz", + "integrity": "sha512-pJhuzm+sqMBrr+MHAm6qQclvHo6evK8IsqBpZ8s2e5O/Bk0HbtPdKJdiNQuw2TRHWpWJ1Rkp3Nc8lnZsoxK7VQ==", "dev": true, "requires": { - "@babel/core": "7.13.15", - "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", - "acorn": "^8.1.1", + "@babel/core": "^7.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.0", + "acorn": "^8.0.0", "acorn-stage3": "^4.0.0", - "babel-loader": "8.2.2", - "chalk": "4.1.0", - "cli-highlight": "2.1.11", - "commander": "7.2.0", - "copy-webpack-plugin": "8.1.1", - "css": "3.0.0", - "css-loader": "5.2.1", - "dotenv-webpack": "7.0.2", - "fork-ts-checker-webpack-plugin": "6.2.1", - "loader-utils": "2.0.0", - "lodash.get": "4.4.2", - "micromatch": "4.0.4", - "postcss": "8.2.10", - "postcss-import": "14.0.1", - "postcss-loader": "5.2.0", - "raw-loader": "4.0.2", - "react-refresh": "0.10.0", - "sass": "1.32.8", - "sass-loader": "11.0.1", - "sax": "1.2.4", - "source-map": "0.7.3", - "terser-webpack-plugin": "5.1.1", - "ts-dedent": "2.1.1", - "ts-loader": "8.1.0", - "vue-loader": "15.9.6", - "webpack": "5.31.2", - "webpack-bundle-analyzer": "4.4.0", - "webpack-chain": "6.5.1", - "webpack-cli": "4.6.0", - "webpack-merge": "5.7.3", - "webpack-virtual-modules": "0.4.2" - }, - "dependencies": { - "sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - } + "babel-loader": "^8.0.0", + "chalk": "^4.0.0", + "cli-highlight": "^2.0.0", + "commander": "^7.0.0", + "copy-webpack-plugin": "^9.0.0", + "css": "^3.0.0", + "css-loader": "^5.0.0", + "dotenv-webpack": "^7.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.0", + "loader-utils": "^2.0.0", + "lodash.get": "^4.0.0", + "micromatch": "^4.0.0", + "postcss": "^8.0.0", + "postcss-import": "^14.0.0", + "postcss-loader": "^5.0.0", + "raw-loader": "^4.0.0", + "react-refresh": "^0.10.0", + "sass": "^1.0.0", + "sass-loader": "^12.0.0", + "sax": "^1.0.0", + "source-map": "^0.7.0", + "terser-webpack-plugin": "^5.0.0", + "ts-dedent": "^2.0.0", + "ts-loader": "^9.0.0", + "vue-loader": "^15.0.0", + "webpack": "^5.0.0", + "webpack-bundle-analyzer": "^4.0.0", + "webpack-chain": "^6.0.0", + "webpack-cli": "^4.0.0", + "webpack-merge": "^5.0.0", + "webpack-virtual-modules": "^0.4.0" } }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, @@ -5323,9 +5251,9 @@ "integrity": "sha512-LKwlNaIWJPEbFKsPwA5vndqrKBUqE9dK9wdi/LsHs0Nl6pfMI7fPkBPoGW7UvVSMqy4s4d35Q0FDbKXR1t796A==" }, "@types/eslint": { - "version": "7.2.11", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.11.tgz", - "integrity": "sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw==", + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "dev": true, "requires": { "@types/estree": "*", @@ -5343,9 +5271,9 @@ } }, "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "@types/json-schema": { @@ -5355,9 +5283,9 @@ "dev": true }, "@types/node": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", - "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", + "version": "15.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", + "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", "dev": true }, "@types/parse-json": { @@ -5643,9 +5571,9 @@ "dev": true }, "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", "dev": true }, "acorn-class-fields": { @@ -5716,12 +5644,6 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -5907,22 +5829,16 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001234", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz", + "integrity": "sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA==", "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -5943,6 +5859,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "chrome-trace-event": { @@ -6044,13 +5971,13 @@ } }, "copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz", + "integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==", "dev": true, "requires": { "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", + "glob-parent": "^6.0.0", "globby": "^11.0.3", "normalize-path": "^3.0.0", "p-limit": "^3.1.0", @@ -6071,12 +5998,6 @@ } } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -6126,23 +6047,21 @@ } }, "css-loader": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.1.tgz", - "integrity": "sha512-YCyRzlt/jgG1xanXZDG/DHqAueOtXFHeusP9TS478oP1J++JSKOyEgGW1GHVoCj/rkS+GWOlBwqQJBr9yajQ9w==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, "requires": { - "camelcase": "^6.2.0", - "cssesc": "^3.0.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.8", + "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "dependencies": { "lru-cache": { @@ -6257,21 +6176,21 @@ "dev": true }, "dotenv-defaults": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.1.tgz", - "integrity": "sha512-ugFCyBF7ILuwpmznduHPQZBMucHHJ8T4OBManTEVjemxCm2+nqifSuW2lD2SNKdiKSH1E324kZSdJ8M04b4I/A==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", "dev": true, "requires": { "dotenv": "^8.2.0" } }, "dotenv-webpack": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.2.tgz", - "integrity": "sha512-RY+/5uM/XY4bGtih9f9ic8hlrUDxVcZZBPWlnX/aHhaKxcVVX9SH/5VH7CSmvVo9GL6PKvQOA0X1bc552rnatQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.3.tgz", + "integrity": "sha512-O0O9pOEwrk+n1zzR3T2uuXRlw64QxHSPeNN1GaiNBloQFNaCUL9V8jxSVz4jlXXFP/CIqK8YecWf8BAvsSgMjw==", "dev": true, "requires": { - "dotenv-defaults": "^2.0.1" + "dotenv-defaults": "^2.0.2" } }, "duplexer": { @@ -6281,9 +6200,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "version": "1.3.748", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz", + "integrity": "sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ==", "dev": true }, "emoji-regex": { @@ -6299,23 +6218,21 @@ "dev": true }, "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + } } }, "envinfo": { @@ -6324,15 +6241,6 @@ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6409,9 +6317,9 @@ "dev": true }, "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -6443,6 +6351,17 @@ "merge2": "^1.3.0", "micromatch": "^4.0.2", "picomatch": "^2.2.1" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -6497,9 +6416,9 @@ } }, "fork-ts-checker-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-Pyhn2kav/Y2g6I7aInABgcph/B78jjdXc4kGHzaAUBL4UVthknxM6aMH47JwpnuTJmdOuf6p5vMbIahsBHuWGg==", + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz", + "integrity": "sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -6509,6 +6428,7 @@ "cosmiconfig": "^6.0.0", "deepmerge": "^4.2.2", "fs-extra": "^9.0.0", + "glob": "^7.1.6", "memfs": "^3.1.2", "minimatch": "^3.0.4", "schema-utils": "2.7.0", @@ -6621,9 +6541,9 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz", + "integrity": "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -6698,9 +6618,9 @@ "dev": true }, "highlight.js": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz", - "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true }, "html-entities": { @@ -6833,12 +6753,6 @@ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6858,14 +6772,25 @@ "dev": true }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "js-tokens": { @@ -7011,16 +6936,6 @@ "fs-monkey": "1.0.3" } }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -7067,18 +6982,18 @@ "dev": true }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.47.0" + "mime-db": "1.48.0" } }, "mimic-fn": { @@ -7362,28 +7277,20 @@ } }, "postcss": { - "version": "8.2.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", - "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.22", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" } }, "postcss-import": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.1.tgz", - "integrity": "sha512-Xn2+z++vWObbEPhiiKO1a78JiyhqipyrXHBb3AHpv0ks7Cdg+GxQQJ24ODNMTanldf7197gSP3axppO9yaG0lA==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "dev": true, "requires": { "postcss-value-parser": "^4.0.0", @@ -7392,9 +7299,9 @@ } }, "postcss-loader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.2.0.tgz", - "integrity": "sha512-uSuCkENFeUaOYsKrXm0eNNgVIxc71z8RcckLMbVw473rGojFnrUeqEz6zBgXsH2q1EIzXnO/4pEz9RhALjlITA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", @@ -7499,18 +7406,6 @@ "dev": true, "optional": true }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -7582,21 +7477,6 @@ "pify": "^2.3.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", @@ -7692,18 +7572,18 @@ "dev": true }, "sass": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.0.tgz", - "integrity": "sha512-rHEN0BscqjUYuomUEaqq3BMgsXqQfkcMVR7UhscsAVub0/spUrZGBMxQXFS2kfiDsPLZw5yuU9iJEFNC2x38Qw==", + "version": "1.34.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.34.1.tgz", + "integrity": "sha512-scLA7EIZM+MmYlej6sdVr0HRbZX5caX5ofDT9asWnUJj21oqgsC+1LuNfm0eg+vM0fCTZHhwImTiCU0sx9h9CQ==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0" } }, "sass-loader": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.0.1.tgz", - "integrity": "sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.0.0.tgz", + "integrity": "sha512-LJQMyDdNdhcvoO2gJFw7KpTaioVFDeRJOuatRDUNgCIqyu4s4kgDsNofdGzAZB1zFOgo/p3fy+aR/uGXamcJBg==", "dev": true, "requires": { "klona": "^2.0.4", @@ -7816,6 +7696,12 @@ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-resolve": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", @@ -7858,15 +7744,6 @@ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", @@ -7928,17 +7805,17 @@ } }, "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dev": true, "requires": { - "jest-worker": "^26.6.2", + "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.5.1" + "terser": "^5.7.0" }, "dependencies": { "schema-utils": { @@ -8006,14 +7883,13 @@ "dev": true }, "ts-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz", - "integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.2.tgz", + "integrity": "sha512-hNIhGTQHtNKjOzR2ZtQ2OSVbXPykOae+zostf1IlHCf61Mt41GMJurKNqrYUbzHgpmj6UWRu8eBfb7q0XliV0g==", "dev": true, "requires": { "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", + "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" }, @@ -8063,9 +7939,9 @@ "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, "universalify": { @@ -8096,9 +7972,9 @@ "dev": true }, "vue": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", - "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.13.tgz", + "integrity": "sha512-O+pAdJkce1ooYS1XyoQtpBQr9An+Oys3w39rkqxukVO3ZD1ilYJkWBGoRuadiQEm2LLJnCL2utV4TMSf52ubjw==", "dev": true }, "vue-hot-reload-api": { @@ -8108,9 +7984,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.6", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", - "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", + "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -8196,22 +8072,22 @@ } }, "webpack": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.31.2.tgz", - "integrity": "sha512-0bCQe4ybo7T5Z0SC5axnIAH+1WuIdV4FwLYkaAlLtvfBhIx8bPS48WHTfiRZS1VM+pSiYt7e/rgLs3gLrH82lQ==", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", + "@types/estree": "^0.0.47", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", + "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", @@ -8222,20 +8098,10 @@ "schema-utils": "^3.0.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "dependencies": { - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, "schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -8256,9 +8122,9 @@ } }, "webpack-bundle-analyzer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.0.tgz", - "integrity": "sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", "dev": true, "requires": { "acorn": "^8.0.4", @@ -8299,18 +8165,17 @@ } }, "webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", "colorette": "^1.2.1", "commander": "^7.0.0", - "enquirer": "^2.3.6", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -8331,9 +8196,9 @@ } }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dev": true, "requires": { "source-list-map": "^2.0.1", @@ -8349,9 +8214,9 @@ } }, "webpack-virtual-modules": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.2.tgz", - "integrity": "sha512-OUsT1VZhArN8nY7g6mMlw91HWnXcNXsIQjsQ83WteF4ViZ6YXqF2sWKOTDIZ0H+PPiApQdszLdZIrD7NNlU0Yw==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", "dev": true }, "which": { diff --git a/package.json b/package.json index c5fe4d58..1c93c7f3 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "dependencies": { "@akylas/nativescript-sqlite": "^3.3.12", "@nativescript-community/ui-collectionview": "^4.0.29", - "@nativescript/core": "^8.0.5", + "@nativescript-rtl/ui": "^0.1.8", + "@nativescript/core": "^8.0.7", "@nativescript/local-notifications": "^5.0.3", "@nativescript/localize": "^5.0.4", "@triniwiz/nativescript-accelerometer": "^4.0.3", @@ -32,11 +33,11 @@ "devDependencies": { "@nativescript/android": "8.0.0", "@nativescript/types": "^8.0.1", - "@nativescript/webpack": "beta", - "@types/node": "^15.3.0", + "@nativescript/webpack": "^5.0.0-beta.12", + "@types/node": "^15.9.0", "nativescript-vue-template-compiler": "~2.9.0", - "sass": "^1.32.13", + "sass": "^1.34.1", "typescript": "^4.2.4", - "vue": "^2.6.12" + "vue": "^2.6.13" } }