Merge pull request #66 from tomfong/dev/post-v3.2.0

Release v3.3.0
This commit is contained in:
Tom Fong 2022-12-01 21:10:52 +08:00 committed by GitHub
commit 6812279341
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 764 additions and 280 deletions

View file

@ -68,6 +68,7 @@ By using the app, you can
* German Deutsch (de)
* French Français (fr)
* Italian Italiano (it)
* Russian Русский (ru)
You are welcomed to help translate the app into more languages (refer to this <a href="#how-to-help-translate">section</a>)
@ -115,12 +116,13 @@ Thank you the following contributors who have made the app better!
|:-:|:-:|:-:|
| mondstern | [mondlicht-und-sterne](https://github.com/mondlicht-und-sterne) | German language translation |
| Valentino Bocchetti | [luftmensch-luftmensch](https://github.com/luftmensch-luftmensch) | Italian language translation |
| Smooth-E | [Smooth-E](https://github.com/Smooth-E) | Russian language translation |
## Framework
```sh
Ionic CLI : 6.20.4
Ionic Framework : @ionic/angular 6.3.7
Ionic Framework : @ionic/angular 6.3.9
@angular-devkit/build-angular : 14.2.10
@angular-devkit/schematics : 14.2.10
@angular/cli : 14.2.10

View file

@ -6,8 +6,8 @@ android {
applicationId "com.tomfong.simpleqr"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 3020000
versionName "3.2.0"
versionCode 3030000
versionName "3.3.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<color tools:ignore="UnusedResources" name="colorPrimary">#00a5aa</color>
<color tools:ignore="UnusedResources" name="colorPrimaryDark">#00a5aa</color>
<color tools:ignore="UnusedResources" name="colorAccent">#00a5aa</color>
</resources>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="app_name">Simple QR</string>
<string name="title_activity_main">Simple QR</string>
<string name="package_name">com.tomfong.simpleqr</string>
<string name="custom_url_scheme">com.tomfong.simpleqr</string>
</resources>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:background">@null</item>
</style>
<style name="AppTheme.NoActionBarLaunch" parent="Theme.SplashScreen">
<item name="android:background">@drawable/splash_background</item>
<item name="android:windowBackground">@drawable/splash_background</item>
</style>
</resources>

View file

@ -0,0 +1,3 @@
* Support Russian language
* Allow user to manually save a record if auto logging is off
* Minor update on UI

View file

@ -1,6 +1,6 @@
<i>Simple QR</i> is an open-source app to scan, create and store QR codes with a simple UI and experience. No backend service connected. No data collected. No ads.
English, French, German, Itanlian, Traditional Chinese and Simplified Chinese are supported.
English, French, German, Itanlian, Russian, Traditional Chinese and Simplified Chinese are supported.
By using the app, you can:

View file

@ -19,6 +19,7 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
1B75189429375EAB00800D38 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -160,6 +161,7 @@
de,
fr,
it,
ru,
);
mainGroup = 504EC2FB1FED79650016851F;
productRefGroup = 504EC3051FED79650016851F /* Products */;
@ -268,6 +270,7 @@
D26FE7F9283D1E6C002A61AE /* fr */,
D26FE7FA283D1E76002A61AE /* de */,
D29D2E2A2847C31D00566DFF /* it */,
1B75189429375EAB00800D38 /* ru */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -396,7 +399,7 @@
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.2.0;
MARKETING_VERSION = 3.3.0;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = com.tomfong.simpleqr;
PRODUCT_NAME = "$(TARGET_NAME)";
@ -419,7 +422,7 @@
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.2.0;
MARKETING_VERSION = 3.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tomfong.simpleqr;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "Simple QR";

View file

@ -0,0 +1,6 @@
"CFBundleDisplayName" = "Simple QR";
"CFBundleName" = "Simple QR";
"NSCameraUsageDescription" = "Simple QR использует камеру для сканирования QR-кода и штрих-кодов";
"NSContactsUsageDescription" = "Simple QR использует Контакты для добавления контакта";
"NSPhotoLibraryAddUsageDescription" = "Simple QR использует библиотеку фотографий для сохранения изображения QR-кода";
"NSPhotoLibraryUsageDescription" = "Simple QR использует библиотеку фотографий для импорта изображений и сканирования QR-кода.";

322
package-lock.json generated
View file

@ -1,24 +1,24 @@
{
"name": "simple-qr",
"version": "3.2.0",
"version": "3.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "simple-qr",
"version": "3.2.0",
"version": "3.3.0",
"dependencies": {
"@angular/animations": "^14.2.3",
"@angular/cdk": "^14.2.2",
"@angular/common": "^14.2.3",
"@angular/core": "^14.2.3",
"@angular/forms": "^14.2.11",
"@angular/localize": "^14.2.11",
"@angular/forms": "^14.2.12",
"@angular/localize": "^14.2.12",
"@angular/material": "^14.2.2",
"@angular/material-moment-adapter": "^14.2.7",
"@angular/platform-browser": "^14.2.3",
"@angular/platform-browser-dynamic": "^14.2.11",
"@angular/router": "^14.2.11",
"@angular/platform-browser-dynamic": "^14.2.12",
"@angular/router": "^14.2.12",
"@awesome-cordova-plugins/aes-256": "^6.2.0",
"@awesome-cordova-plugins/chooser": "^6.2.0",
"@awesome-cordova-plugins/core": "^6.2.0",
@ -26,7 +26,7 @@
"@awesome-cordova-plugins/sms": "^6.2.0",
"@awesome-cordova-plugins/social-sharing": "^6.2.0",
"@awesome-cordova-plugins/theme-detection": "^6.2.0",
"@capacitor-community/barcode-scanner": "^3.0.0",
"@capacitor-community/barcode-scanner": "^3.0.1",
"@capacitor-community/contacts": "^2.0.0-0",
"@capacitor-community/screen-brightness": "^4.0.0",
"@capacitor/android": "^4.5.0",
@ -43,7 +43,7 @@
"@capacitor/splash-screen": "^4.1.2",
"@capacitor/status-bar": "^4.1.0",
"@capacitor/toast": "^4.1.0",
"@ionic/angular": "^6.3.7",
"@ionic/angular": "^6.3.9",
"@ionic/storage": "^3.0.6",
"@ionic/storage-angular": "^3.0.6",
"@ng-bootstrap/ng-bootstrap": "^13.1.1",
@ -75,7 +75,7 @@
"@angular/cli": "^14.2.10",
"@angular/compiler": "^14.2.3",
"@angular/compiler-cli": "^14.2.3",
"@angular/language-service": "^14.2.11",
"@angular/language-service": "^14.2.12",
"@capacitor/cli": "^4.5.0",
"@ionic/angular-toolkit": "^6.1.0",
"@ionic/cli": "6.20.1",
@ -306,9 +306,9 @@
}
},
"node_modules/@angular/animations": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.11.tgz",
"integrity": "sha512-HOw8xecbKfs7A5Ezjf+BfXKvvwU7X8I0US5Ey6bOuLvpA3QVOGSLw9BeutY5Q2mPWiRgnNNQW+FOd8Pe9gEkpQ==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.12.tgz",
"integrity": "sha512-gwdnFZkvVUr+enUNfhfCGRGGqNHn1+vTA81apLfHYhJxgjiLUtETc4KTOrQevtDm022pEd+LSrvr8r+7ag+jkw==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -316,7 +316,7 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/core": "14.2.11"
"@angular/core": "14.2.12"
}
},
"node_modules/@angular/cdk": {
@ -372,9 +372,9 @@
}
},
"node_modules/@angular/common": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.11.tgz",
"integrity": "sha512-a5w7lz4SoUzCwSDnuUPnfbEYPA8ufFiXz44mOv48P4uIb78q3rZ/R/EyWD1O3yJPof0o8aPNKpKZzuRDv3Q8ow==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
"integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -382,14 +382,14 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/core": "14.2.11",
"@angular/core": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.11.tgz",
"integrity": "sha512-QD4tq37qqPxxNK4o0Pd7dJm06evwEPChV67S/ecX3S6UkSDp8lVoWKiVx9htp/5s4iydKZU4eGu9oTOMOLVdOw==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
"integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -397,7 +397,7 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/core": "14.2.11"
"@angular/core": "14.2.12"
},
"peerDependenciesMeta": {
"@angular/core": {
@ -406,9 +406,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.11.tgz",
"integrity": "sha512-ipIEgueW8bhxVSq6qlgndBLVRCJoTvk1he/TI3w34m2EnZY1ctgGGCm1VbB3XARh+irVesPVMIAxRtjYds7XOw==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
"integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
"dependencies": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
@ -430,14 +430,14 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/compiler": "14.2.11",
"@angular/compiler": "14.2.12",
"typescript": ">=4.6.2 <4.9"
}
},
"node_modules/@angular/core": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.11.tgz",
"integrity": "sha512-4uEIA6ESMLt2f/ivKuVBpME0IbuFHWmpweN4dwJt83DfJBiBfpqdrFYZHz/Kbkh9cGCiP7L4/eKPRWTlAHehhw==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
"integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -450,9 +450,9 @@
}
},
"node_modules/@angular/forms": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.11.tgz",
"integrity": "sha512-sItoA3/I8j/pf3zhv8sR37M5dAYUJpezv8rw2fTT2Y+nZJFUpkFWqX2N4qpMlPY0MP9OX++8K8/d2j0Lfi3wJQ==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
"integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -460,25 +460,25 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/common": "14.2.11",
"@angular/core": "14.2.11",
"@angular/platform-browser": "14.2.11",
"@angular/common": "14.2.12",
"@angular/core": "14.2.12",
"@angular/platform-browser": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/language-service": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.11.tgz",
"integrity": "sha512-YOQ7zVnRkZaIlAwA+u+x+wUGlvvKQDR+CGkIF19L/C0Zo6b8vFmfcNqWig6Wq8sRwS+5fULcPoOAESaUwq3urw==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.12.tgz",
"integrity": "sha512-YmW6simyEVmpDmbYVUhZ2IxSP6pmsWrV120rB9Y21/BeM39WIXA4NCNirVWlAd/KAKY9O7Sbn1nXI6rSDfhopQ==",
"dev": true,
"engines": {
"node": "^14.15.0 || >=16.10.0"
}
},
"node_modules/@angular/localize": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.11.tgz",
"integrity": "sha512-vrYv2f6BR1dKebZB+c0O4Arx7iGF1MqN4gHB+V5KHS7UPIc3YnoQn9LaFDRWWazjrXCvq1uf1Cb8qzzu19+lZQ==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
"integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
"dependencies": {
"@babel/core": "7.18.9",
"glob": "8.0.3",
@ -493,8 +493,8 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/compiler": "14.2.11",
"@angular/compiler-cli": "14.2.11"
"@angular/compiler": "14.2.12",
"@angular/compiler-cli": "14.2.12"
}
},
"node_modules/@angular/localize/node_modules/@babel/core": {
@ -565,9 +565,9 @@
}
},
"node_modules/@angular/platform-browser": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.11.tgz",
"integrity": "sha512-lGi9pF0Kf/GGrVKcfxxfStM2eMSluDTmbcYuVAX28iBn5XEdfsonrkfy2cnxUMnQ7nioMAZBNGOJHbQPKz4jwg==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
"integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -575,9 +575,9 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/animations": "14.2.11",
"@angular/common": "14.2.11",
"@angular/core": "14.2.11"
"@angular/animations": "14.2.12",
"@angular/common": "14.2.12",
"@angular/core": "14.2.12"
},
"peerDependenciesMeta": {
"@angular/animations": {
@ -586,9 +586,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.11.tgz",
"integrity": "sha512-kjcZda+gcAiYd0I3mjLSr6xR/HkUCnmIMyqaFGoHnIDXI2c6wLDxi49pivrJFvUYJPfYAJ6GjlYTM6L9B3XSEQ==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
"integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -596,16 +596,16 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/common": "14.2.11",
"@angular/compiler": "14.2.11",
"@angular/core": "14.2.11",
"@angular/platform-browser": "14.2.11"
"@angular/common": "14.2.12",
"@angular/compiler": "14.2.12",
"@angular/core": "14.2.12",
"@angular/platform-browser": "14.2.12"
}
},
"node_modules/@angular/router": {
"version": "14.2.11",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.11.tgz",
"integrity": "sha512-AbnyKXabar2WsG3fL24O1xdwkcRhRKI7u2vc9D8bcp2ks5GOJNxfbtG2Z6PSO18vtDszQxwELRe2cOEe+0TmPQ==",
"version": "14.2.12",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
"integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
"dependencies": {
"tslib": "^2.3.0"
},
@ -613,9 +613,9 @@
"node": "^14.15.0 || >=16.10.0"
},
"peerDependencies": {
"@angular/common": "14.2.11",
"@angular/core": "14.2.11",
"@angular/platform-browser": "14.2.11",
"@angular/common": "14.2.12",
"@angular/core": "14.2.12",
"@angular/platform-browser": "14.2.12",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@ -720,9 +720,9 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz",
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
"integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
"engines": {
"node": ">=6.9.0"
}
@ -841,9 +841,9 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.20.2",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz",
"integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
"integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
@ -862,13 +862,13 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
"version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
"integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
"integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"regexpu-core": "^5.1.0"
"regexpu-core": "^5.2.1"
},
"engines": {
"node": ">=6.9.0"
@ -1101,28 +1101,28 @@
}
},
"node_modules/@babel/helper-wrap-function": {
"version": "7.19.0",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
"integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
"integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.19.0",
"@babel/types": "^7.19.0"
"@babel/traverse": "^7.20.5",
"@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz",
"integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==",
"version": "7.20.6",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
"integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"dependencies": {
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.20.1",
"@babel/types": "^7.20.0"
"@babel/traverse": "^7.20.5",
"@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
@ -1142,9 +1142,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz",
"integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
"integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
"bin": {
"parser": "bin/babel-parser.js"
},
@ -1400,14 +1400,14 @@
}
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
"integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
"integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-create-class-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/helper-create-class-features-plugin": "^7.20.5",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@ -1673,9 +1673,9 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.20.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz",
"integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
"integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
@ -1917,13 +1917,13 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.19.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
"integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
"integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.19.0",
"@babel/helper-plugin-utils": "^7.19.0"
"@babel/helper-create-regexp-features-plugin": "^7.20.5",
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@ -1964,9 +1964,9 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
"version": "7.20.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz",
"integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
"integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
@ -1994,13 +1994,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
"integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
"integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"regenerator-transform": "^0.15.0"
"@babel/helper-plugin-utils": "^7.20.2",
"regenerator-transform": "^0.15.1"
},
"engines": {
"node": ">=6.9.0"
@ -2300,18 +2300,18 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.20.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
"integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"dependencies": {
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.20.1",
"@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/parser": "^7.20.1",
"@babel/types": "^7.20.0",
"@babel/parser": "^7.20.5",
"@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@ -2320,11 +2320,11 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/generator": {
"version": "7.20.4",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz",
"integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
"integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"dependencies": {
"@babel/types": "^7.20.2",
"@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
@ -2346,9 +2346,9 @@
}
},
"node_modules/@babel/types": {
"version": "7.20.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz",
"integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==",
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
"integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"dependencies": {
"@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
@ -2359,11 +2359,11 @@
}
},
"node_modules/@capacitor-community/barcode-scanner": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-3.0.0.tgz",
"integrity": "sha512-Jzr4phHyDS+C2ZE+eoVsuq15oFvFLVtAJmmegIjwVBcb3CxgRdkt/kdVurXgVKMQ6mJ6StYI7hALeMu2vkyC6A==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-3.0.1.tgz",
"integrity": "sha512-3R6LXQ3kikuc71Pvffkul9pLvHK8v85VcvBw6E0rjAWgWJbCLf0ssBmycrqMa8/aMZjdw1XNn3nJTXijkfCifQ==",
"peerDependencies": {
"@capacitor/core": "^4.0.0"
"@capacitor/core": "^4.5.0"
}
},
"node_modules/@capacitor-community/contacts": {
@ -2848,11 +2848,11 @@
"dev": true
},
"node_modules/@ionic/angular": {
"version": "6.3.7",
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.3.7.tgz",
"integrity": "sha512-a6EAhK5+elNNvnnSFKdNxdcNKd+epEpR1csQaiixisrWpWirxTNteqNLn9HAe+13iR8esI3mGgyOzVKr011ILw==",
"version": "6.3.9",
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.3.9.tgz",
"integrity": "sha512-j/nuHCulDygDeU4WwdKY1l+kwQGKRBN9afwdbCO79lztKenlPwiqyYwds2lZuvhMmF+S5oqXrN5gt26mVUBdCA==",
"dependencies": {
"@ionic/core": "^6.3.6",
"@ionic/core": "6.3.9",
"ionicons": "^6.0.4",
"jsonc-parser": "^3.0.0",
"tslib": "^2.0.0"
@ -3323,9 +3323,9 @@
}
},
"node_modules/@ionic/core": {
"version": "6.3.7",
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.3.7.tgz",
"integrity": "sha512-HWntdPsc4lVHHwz7kY2BSQteafwXsPxc8y5wAdfeA8woRLGse+1Vq00CDUihf7tTUflM1CdmVgGtyYlDAnO2fA==",
"version": "6.3.9",
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.3.9.tgz",
"integrity": "sha512-0JlCGIgLASoxZ6XXEkhCMQzdedvzqI7lsD6zBYPkUyMFOMTff7fZdQg1r9v9IQVHW+UCuyM4xc0MT4YOD4/S3A==",
"dependencies": {
"@stencil/core": "^2.18.0",
"ionicons": "^6.0.4",
@ -4467,9 +4467,9 @@
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -5018,9 +5018,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001431",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz",
"integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==",
"version": "1.0.30001435",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
"integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==",
"funding": [
{
"type": "opencollective",
@ -5831,9 +5831,9 @@
}
},
"node_modules/cssdb": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz",
"integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
"integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
"dev": true,
"funding": {
"type": "opencollective",
@ -6284,9 +6284,9 @@
}
},
"node_modules/enhanced-resolve": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
"integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
"version": "5.12.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
"integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@ -7866,9 +7866,9 @@
]
},
"node_modules/ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
"integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
"dev": true,
"engines": {
"node": ">= 4"
@ -9371,9 +9371,9 @@
}
},
"node_modules/log4js": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz",
"integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==",
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz",
"integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==",
"dev": true,
"dependencies": {
"date-format": "^4.0.14",
@ -9651,9 +9651,9 @@
}
},
"node_modules/minipass": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
"integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
@ -11029,9 +11029,9 @@
}
},
"node_modules/postcss-custom-properties": {
"version": "12.1.10",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz",
"integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==",
"version": "12.1.11",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
"integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.2.0"
@ -12868,17 +12868,17 @@
}
},
"node_modules/socket.io": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
"integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
"dev": true,
"dependencies": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
"engine.io": "~6.2.0",
"engine.io": "~6.2.1",
"socket.io-adapter": "~2.4.0",
"socket.io-parser": "~4.2.0"
"socket.io-parser": "~4.2.1"
},
"engines": {
"node": ">=10.0.0"
@ -13973,9 +13973,9 @@
}
},
"node_modules/vm2": {
"version": "3.9.11",
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz",
"integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==",
"version": "3.9.12",
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.12.tgz",
"integrity": "sha512-OMmRsKh1gmdosFzuqmj6O43hqIStqXA24YbwjtUTO0TkOBP8yLNHLplbr4odnAzEcMnm9lt2r3R8kTivn8urMg==",
"dev": true,
"dependencies": {
"acorn": "^8.7.0",

View file

@ -1,8 +1,7 @@
{
"name": "simple-qr",
"version": "3.2.0",
"version": "3.3.0",
"author": "Tom Fong",
"homepage": "https://tomfong.github.io",
"scripts": {
"ng": "ng",
"build:an": "ionic cap build android --prod --no-open",
@ -21,13 +20,13 @@
"@angular/cdk": "^14.2.2",
"@angular/common": "^14.2.3",
"@angular/core": "^14.2.3",
"@angular/forms": "^14.2.11",
"@angular/localize": "^14.2.11",
"@angular/forms": "^14.2.12",
"@angular/localize": "^14.2.12",
"@angular/material": "^14.2.2",
"@angular/material-moment-adapter": "^14.2.7",
"@angular/platform-browser": "^14.2.3",
"@angular/platform-browser-dynamic": "^14.2.11",
"@angular/router": "^14.2.11",
"@angular/platform-browser-dynamic": "^14.2.12",
"@angular/router": "^14.2.12",
"@awesome-cordova-plugins/aes-256": "^6.2.0",
"@awesome-cordova-plugins/chooser": "^6.2.0",
"@awesome-cordova-plugins/core": "^6.2.0",
@ -35,7 +34,7 @@
"@awesome-cordova-plugins/sms": "^6.2.0",
"@awesome-cordova-plugins/social-sharing": "^6.2.0",
"@awesome-cordova-plugins/theme-detection": "^6.2.0",
"@capacitor-community/barcode-scanner": "^3.0.0",
"@capacitor-community/barcode-scanner": "^3.0.1",
"@capacitor-community/contacts": "^2.0.0-0",
"@capacitor-community/screen-brightness": "^4.0.0",
"@capacitor/android": "^4.5.0",
@ -52,7 +51,7 @@
"@capacitor/splash-screen": "^4.1.2",
"@capacitor/status-bar": "^4.1.0",
"@capacitor/toast": "^4.1.0",
"@ionic/angular": "^6.3.7",
"@ionic/angular": "^6.3.9",
"@ionic/storage": "^3.0.6",
"@ionic/storage-angular": "^3.0.6",
"@ng-bootstrap/ng-bootstrap": "^13.1.1",
@ -84,7 +83,7 @@
"@angular/cli": "^14.2.10",
"@angular/compiler": "^14.2.3",
"@angular/compiler-cli": "^14.2.3",
"@angular/language-service": "^14.2.11",
"@angular/language-service": "^14.2.12",
"@capacitor/cli": "^4.5.0",
"@ionic/angular-toolkit": "^6.1.0",
"@ionic/cli": "6.20.1",

View file

@ -3,7 +3,7 @@ import { ActivatedRoute, Router } from '@angular/router';
import { AlertController, IonItemSliding, LoadingController, ModalController, PopoverController, ToastController } from '@ionic/angular';
import { EnvService } from 'src/app/services/env.service';
import { format, Locale } from 'date-fns';
import { de, enUS, fr, it, zhCN, zhHK } from 'date-fns/locale';
import { de, enUS, fr, it, ru, zhCN, zhHK } from 'date-fns/locale';
import { ScanRecord } from 'src/app/models/scan-record';
import { TranslateService } from '@ngx-translate/core';
import { Bookmark } from 'src/app/models/bookmark';
@ -138,6 +138,9 @@ export class HistoryPage {
case "it":
locale = it;
break;
case "ru":
locale = ru;
break;
case "zh-CN":
locale = zhCN;
break;

View file

@ -1,5 +1,6 @@
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Preferences } from '@capacitor/preferences';
import { AlertController, IonRouterOutlet, Platform } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
import { EnvService } from 'src/app/services/env.service';
@ -50,10 +51,26 @@ export class LandingPage {
}
async confirmExitApp(): Promise<void> {
if (this.env.showExitAppAlert == "on") {
const alert = await this.alertController.create({
header: this.translate.instant('EXIT_APP'),
message: this.translate.instant('MSG.EXIT_APP'),
cssClass: ['alert-bg'],
inputs: [
{
type: "checkbox",
label: this.translate.instant("MSG.TUTORIAL_NOT_SHOW_AGAIN"),
checked: false,
handler: async (result) => {
if (result.checked) {
this.env.showExitAppAlert = "off";
} else {
this.env.showExitAppAlert = "on";
}
await Preferences.set({ key: this.env.KEY_SHOW_EXIT_APP_ALERT, value: this.env.showExitAppAlert });
}
}
],
cssClass: ['alert-bg', 'alert-input-no-border'],
buttons: [
{
text: this.translate.instant('EXIT'),
@ -70,6 +87,9 @@ export class LandingPage {
]
});
await alert.present();
} else {
navigator['app'].exitApp();
}
}
}

View file

@ -106,19 +106,22 @@
[ngStyle]="env.colorTheme === 'dark'? {'background-color': '#222428'} : (env.colorTheme === 'black'? {'background-color': '#000000'} : {'background-color': '#F0F0F0'})">
<ng-container *ngIf="env.resultPageButtons === 'icon-only'">
<ion-row *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan" class="d-flex justify-content-center">
<ion-row *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
class="d-flex justify-content-center">
<ion-button (click)="tapHaptic(); searchOpenFoodFacts()" [color]="'primary'" fill="clear">
<ion-icon name="fast-food"></ion-icon>
</ion-button>
</ion-row>
<ion-row *ngIf="contentType === 'url' && env.showBrowseButton === 'on' && isHttp" class="d-flex justify-content-center">
<ion-row *ngIf="contentType === 'url' && env.showBrowseButton === 'on' && isHttp"
class="d-flex justify-content-center">
<ion-button (click)="tapHaptic(); browseWebsite()" [color]="'primary'" fill="clear">
<ion-icon name="globe"></ion-icon>
</ion-button>
</ion-row>
<ion-row *ngIf="contentType === 'url' && env.showOpenUrlButton === 'on' && !isHttp" class="d-flex justify-content-center">
<ion-row *ngIf="contentType === 'url' && env.showOpenUrlButton === 'on' && !isHttp"
class="d-flex justify-content-center">
<ion-button (click)="tapHaptic(); openLink()" [color]="'primary'" fill="clear">
<ion-icon name="open"></ion-icon>
</ion-button>
@ -170,7 +173,13 @@
</ion-button>
</ion-row>
<ion-row class="ion-padding-horizontal justify-content-around">
<ion-row class="ion-padding-horizontal">
<div class="d-flex justify-content-between detailed-action-button-container">
<ion-button
*ngIf="!resultSaved && this.env.scanRecordLogging == 'off' && this.qrCodeContent != null && this.qrCodeContent != '' "
(click)="tapHaptic(); saveRecord()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear">
<ion-icon slot="icon-only" src="assets/icon/history.svg"></ion-icon>
</ion-button>
<ion-button *ngIf="env.showSearchButton === 'on'" (click)="tapHaptic(); webSearch()"
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
@ -207,15 +216,25 @@
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
<ion-icon slot="icon-only" name="bookmark"></ion-icon>
</ion-button>
</div>
</ion-row>
</ng-container>
<ng-container *ngIf="env.resultPageButtons === 'detailed'">
<ion-row class="ion-padding-horizontal py-2">
<div class="d-flex justify-content-between detailed-action-button-container">
<ion-button class="pr-1" *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
(click)="tapHaptic(); searchOpenFoodFacts()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="outline"
<ion-button class="pr-1"
*ngIf="!resultSaved && this.env.scanRecordLogging == 'off' && this.qrCodeContent != null && this.qrCodeContent != '' "
(click)="tapHaptic(); saveRecord()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="outline"
shape="round" [@inAnimation]>
<ion-icon class="pr-2" src="assets/icon/history.svg"></ion-icon>
<ion-label>{{ 'SAVE' | translate }}</ion-label>
</ion-button>
<ion-button class="pr-1"
*ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
(click)="tapHaptic(); searchOpenFoodFacts()" [color]="env.colorTheme === 'light'? 'dark' : 'light'"
fill="outline" shape="round" [@inAnimation]>
<ion-icon class="pr-2" name="fast-food"></ion-icon>
<ion-label>Facts</ion-label>
</ion-button>

View file

@ -54,6 +54,8 @@ export class ResultPage {
showQrFirst: boolean = false;
resultSaved: boolean = false;
@ViewChildren(MatFormField) formFields: QueryList<MatFormField>;
constructor(
@ -104,6 +106,14 @@ export class ResultPage {
this.reset();
}
async saveRecord() {
if (this.qrCodeContent != null && this.qrCodeContent != "") {
await this.env.saveScanRecord(this.qrCodeContent);
}
this.resultSaved = true;
this.presentToast(this.translate.instant("SAVED"), "short", "bottom");
}
reset() {
this.contentType = "freeText";
delete this.qrCodeContent;
@ -125,6 +135,7 @@ export class ResultPage {
this.base64DecodedText = "";
this.bookmarked = false;
this.showQrFirst = false;
this.resultSaved = false;
delete this.env.recordSource;
delete this.env.detailedRecordSource;
delete this.env.viewResultFrom;

View file

@ -19,8 +19,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'default'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'default'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -31,8 +30,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'de'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'de'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -43,8 +41,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'en'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'en'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -55,8 +52,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'fr'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'fr'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -67,8 +63,18 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'it'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'it'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
<ion-label class="ion-padding-start">
<p class="ion-padding pre-line">
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
Русский (ru)
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'ru'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -79,8 +85,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-HK'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-HK'" [color]="'primary'">
</ion-radio>
</ion-item>
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
@ -91,8 +96,7 @@
</ion-text>
</p>
</ion-label>
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-CN'"
[color]="'primary'">
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-CN'" [color]="'primary'">
</ion-radio>
</ion-item>
</ion-radio-group>

View file

@ -13,7 +13,7 @@ import { Bookmark } from 'src/app/models/bookmark';
import { SocialSharing } from '@awesome-cordova-plugins/social-sharing/ngx';
import { Haptics, ImpactStyle } from '@capacitor/haptics';
import { Preferences } from '@capacitor/preferences';
import { de, enUS, fr, it, zhCN, zhHK } from 'date-fns/locale';
import { de, enUS, fr, it, ru, zhCN, zhHK } from 'date-fns/locale';
@Component({
selector: 'app-setting-record',
@ -316,6 +316,9 @@ export class SettingRecordPage {
case "it":
rawCsvData = "ID,Contenuto,Creato a,Fonte,Tipo di codice a barre,Aggiunto ai preferiti?,Etichetta\r\n";
break;
case "ru":
rawCsvData = "ID,Содержание,Создано в,Источник,Тип штрих-кода,В закладках?,Ярлык\r\n";
break;
case "zh-CN":
rawCsvData = "ID,内容,建立于,来源,条码类型,已书签?,标签\r\n";
break;
@ -471,6 +474,9 @@ export class SettingRecordPage {
case "it":
locale = it;
break;
case "ru":
locale = ru;
break;
case "zh-CN":
locale = zhCN;
break;
@ -501,6 +507,9 @@ export class SettingRecordPage {
case "it":
locale = it;
break;
case "ru":
locale = ru;
break;
case "zh-CN":
locale = zhCN;
break;

View file

@ -134,7 +134,29 @@
</ion-label>
</ion-item>
<ion-item *ngIf="isAndroid" class="ion-no-padding ripple-parent" detail="false" lines="none"
(click)="confirmExitApp()">
(click)="rateAndroidApp()">
<ion-icon class="ion-margin-start ion-padding-horizontal" color="primary" name="logo-google-playstore"></ion-icon>
<ion-label>
<p class="ion-padding pre-line">
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
{{ 'RATE_THE_APP' | translate }}
</ion-text>
</p>
</ion-label>
</ion-item>
<ion-item *ngIf="isIos" class="ion-no-padding ripple-parent" detail="false" lines="none"
(click)="rateIosApp()">
<ion-icon class="ion-margin-start ion-padding-horizontal" color="primary" name="logo-apple-appstore"></ion-icon>
<ion-label>
<p class="ion-padding pre-line">
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
{{ 'RATE_THE_APP' | translate }}
</ion-text>
</p>
</ion-label>
</ion-item>
<ion-item *ngIf="isAndroid" class="ion-no-padding ripple-parent" detail="false" lines="none"
(click)="exitApp()">
<ion-icon class="ion-margin-start ion-padding-horizontal" color="danger" name="exit"></ion-icon>
<ion-label>
<p class="ion-padding pre-line">

View file

@ -28,10 +28,22 @@ export class SettingPage {
await SplashScreen.hide()
}
get isIos(): boolean {
return this.platform.is('ios');
}
get isAndroid(): boolean {
return this.platform.is('android');
}
rateAndroidApp() {
window.open(this.env.GOOGLE_PLAY_URL, '_system');
}
rateIosApp() {
window.open(this.env.APP_STORE_URL, '_system');
}
setLanguage() {
this.router.navigate(['setting-language']);
}
@ -127,28 +139,9 @@ export class SettingPage {
alert.present();
}
async confirmExitApp(): Promise<void> {
const alert = await this.alertController.create({
header: this.translate.instant('EXIT_APP'),
message: this.translate.instant('MSG.EXIT_APP'),
cssClass: ['alert-bg'],
buttons: [
{
text: this.translate.instant('EXIT'),
handler: () => {
exitApp() {
navigator['app'].exitApp();
}
},
{
text: this.translate.instant('RATE_THE_APP'),
handler: () => {
this.openGooglePlay();
}
}
]
});
await alert.present();
}
openGooglePlay(): void {
window.open(this.env.GOOGLE_PLAY_URL, '_system');

View file

@ -15,7 +15,7 @@ import { v4 as uuidv4 } from 'uuid';
import { Preferences } from '@capacitor/preferences';
import { Observable } from 'rxjs';
export declare type LanguageType = 'de' | 'en' | 'fr' | 'it' | 'zh-CN' | 'zh-HK';
export declare type LanguageType = 'de' | 'en' | 'fr' | 'it' | 'ru' | 'zh-CN' | 'zh-HK';
export declare type TabPageType = "/tabs/scan" | "/tabs/generate" | "/tabs/import-image" | "/tabs/history" | "/tabs/setting";
export declare type HistoryPageSegmentType = 'history' | 'bookmarks';
export declare type OnOffType = "on" | "off";
@ -31,7 +31,7 @@ export declare type ResultPageButtonsType = 'detailed' | 'icon-only';
})
export class EnvService {
public appVersionNumber: string = '3.2.0';
public appVersionNumber: string = '3.3.0';
public startPage: TabPageType = "/tabs/scan";
public historyPageStartSegment: HistoryPageSegmentType = 'history';
@ -75,6 +75,7 @@ export class EnvService {
public showSendMessageButton: OnOffType = 'on';
public showSendEmailButton: OnOffType = 'on';
public showOpenFoodFactsButton: OnOffType = 'on';
public showExitAppAlert: OnOffType = "on";
public debugMode: OnOffType = 'off';
public autoExitAppMin: 1 | 3 | 5 | -1 = -1;
@ -86,6 +87,7 @@ export class EnvService {
public readonly KEY_LANGUAGE = "language";
public readonly KEY_COLOR = "color";
public readonly KEY_DEBUG_MODE = "debug-mode-on";
public readonly KEY_SHOW_EXIT_APP_ALERT = "showExitAppAlert";
public readonly KEY_ORIENTATION = "orientation";
public readonly KEY_SCAN_RECORD_LOGGING = "scan-record-logging";
public readonly KEY_RECORDS_LIMIT = "recordsLimit";
@ -121,10 +123,10 @@ export class EnvService {
public readonly KEY_SHOW_OPEN_FOOD_FACTS_BUTTON = "showOpenFoodFactsButton";
public readonly KEY_AUTO_EXIT_MIN = "autoExitAppMin";
public readonly KEY_ANDROID_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
public readonly KEY_IOS_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
public readonly KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30100";
public readonly KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30100";
public readonly KEY_ANDROID_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30300";
public readonly KEY_IOS_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30300";
public readonly KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
public readonly KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
public readonly APP_FOLDER_NAME: string = 'SimpleQR';
@ -852,6 +854,15 @@ export class EnvService {
await this.toggleColorTheme();
}
);
await Preferences.get({ key: this.KEY_SHOW_EXIT_APP_ALERT }).then(
async result => {
if (result.value != null) {
this.showExitAppAlert = result.value as OnOffType;
} else {
this.showExitAppAlert = 'on';
}
}
);
await Preferences.get({ key: this.KEY_DEBUG_MODE }).then(
async result => {
if (result.value != null) {
@ -1216,6 +1227,7 @@ export class EnvService {
this.showOpenFoodFactsButton = 'on';
this.scanRecords = [];
this.bookmarks = [];
this.showExitAppAlert = 'on';
this.debugMode = 'off';
this.autoExitAppMin = -1;
}
@ -1349,6 +1361,9 @@ export class EnvService {
this.showOpenFoodFactsButton = 'on';
await Preferences.set({ key: this.KEY_SHOW_OPEN_FOOD_FACTS_BUTTON, value: this.showOpenFoodFactsButton });
this.showExitAppAlert = 'on';
await Preferences.set({ key: this.KEY_SHOW_EXIT_APP_ALERT, value: this.showExitAppAlert });
this.debugMode = 'off';
await Preferences.set({ key: this.KEY_DEBUG_MODE, value: this.debugMode });
@ -1600,6 +1615,9 @@ export class EnvService {
case "it":
language = "it"
break;
case "ru":
language = "ru"
break;
case "zh":
if (browserCultureLang == 'zh-CN' || browserCultureLang == 'zh-SG') {
language = 'zh-CN';

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "Standard zurücksetzen",
"RESTORE": "Wiederherstellen",
"RESULT": "Ergebnis",
"SAVE": "Speichern",
"SAVED": "Gespeichert",
"SCAN": "Scannen",
"SCANNED": "Gescannt",
"SCANNING_FEEDBACK_ONLY": "Nur Feedback scannen",

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "Reset Default",
"RESTORE": "Restore",
"RESULT": "Result",
"SAVE": "Save",
"SAVED": "Saved",
"SCAN": "Scan",
"SCANNED": "Scanned",
"SCANNING_FEEDBACK_ONLY": "Scanning Feedback Only",

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "Réinitialiser par défaut",
"RESTORE": "Restaurer",
"RESULT": "Résultat",
"SAVE": "Enregistrer",
"SAVED": "Enregistrée",
"SCAN": "Scanner",
"SCANNED": "Scanné",
"SCANNING_FEEDBACK_ONLY": "Vibrer lors de la numérisation uniquement",

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "Ripristina predefinito",
"RESTORE": "Ripristina",
"RESULT": "Risultato",
"SAVE": "Salva",
"SAVED": "Salvato",
"SCAN": "Scannerizza",
"SCANNED": "Scannerizzato",
"SCANNING_FEEDBACK_ONLY": "Scansione esclusivamente del feedback",

316
src/assets/i18n/ru.json Normal file
View file

@ -0,0 +1,316 @@
{
"100_RECORDS": "100 записей",
"30_RECORDS": "30 записей",
"49_DIGIT": "49-значный",
"50_RECORDS": "50 записей",
"ABOUT": "О приложении",
"ABOUT_SIMPLE_QR": "О Simple QR",
"ADD": "Добавить",
"ADD_BCC": "Добавить BCC",
"ADD_CC": "Добавить CC",
"ADD_CONTACT": "Добавить контакт",
"ADD_RECIPIENT": "Добавить получателя",
"APP": "Приложение",
"APPEARANCE_AND_EFFECTS": "Внешний вид и эффекты",
"APP_INITIAL_PAGE": "Стартовая страница",
"APP_VERSION": "Версия приложения",
"AT": "в",
"AT_LEAST_1_MINUTE_LATER": "Как минимум через минуту",
"AT_LEAST_3_MINUTES_LATER": "Как минимум через 3 минуты",
"AT_LEAST_5_MINUTES_LATER": "Как минимум через 5 минут",
"AUTO_KILL_BACKGROUND": "Фоновая активность",
"AUTO_LOGGING": "Автоматическое добавление в историю",
"AUTO_MAX_BRIGHTNESS": "Максимальная яркость",
"AUTO_QR_CODE_POPUP": "Показывать QR-Код",
"BACKGROUND_COLOR": "Цвет фона",
"BACKING_UP": "Сохранение резервной копии",
"BACKUP": "Резервное копирование",
"BASE64": "Base64",
"BASE64_DECODED": "Декодировано из Base64",
"BASE64_ENCODED": "Закодировано в Base64",
"BCC": "BCC",
"BLACK": "Черная",
"BOOKMARK": "Закладки",
"BOOKMARKED": "Добавлено в закладки",
"BOOKMARKED_TEXTS": "Сохраненные тексты",
"BOOKMARKS": "Закладки",
"BROWSE": "Просмотреть",
"BROWSER": "Браузер",
"BROWSE_WEBSITE": "Посетить веб-сайт",
"CALL": "Позвонить",
"CANCEL": "Отмена",
"CC": "CC",
"CITY": "Город",
"CLEAR": "Очистить",
"CLOSE": "Закрыть",
"COLOR": "Цвет",
"COLOR_THEME": "Тема",
"COMING_SOON": "Скоро...",
"CONTACT_METHOD": "Метод связи",
"CONTACT_NAME": "Имя контакта",
"CONTENT": "Содержание",
"CONTENT_TYPE": "Тип содержания",
"COPIED": "Скопировано",
"COPY": "Скопировать",
"COPY_SECRET_AND_SAVE_BACKUP": "Скопировать ключ и сохранить резервную копию",
"COPY_TEXT": "Скопировать текст",
"COUNTRY": "Страна",
"CREATE": "Создать",
"CREATED": "Создано",
"CREATE_QR_CODE": "Создать QR-Код",
"DARK": "Тёмная",
"DATE_OF_BIRTH": "Дата рождения",
"DEBUG_MODE": "Режим отладки",
"DECODING": "Декодирование",
"DECRYPTING": "Расшифровка",
"DETAILED": "Подробнее",
"DONE": "Готово",
"DUCK_DUCK_GO": "DuckDuckGo",
"ECOSIA": "Ecosia",
"EDIT": "Редактировать",
"EMAIL_ADDRESS": "Адрес электронной почты",
"EMAIL_BODY": "Содержание электронного письма",
"EMAIL_NTT_DOCOMO": "Электронное письмо (NTT Docomo)",
"EMAIL_RECIPIENT": "Получатель",
"EMAIL_SUBJECT": "Тема",
"EMAIL_TO": "Отправить по электронной почте",
"EMAIL_W3C_STANDARD": "Электронное письмо (стандарт W3C)",
"ENCRYPTING": "Шифрование",
"ERROR_CORRECTION_LEVEL": "Уровень коррекции ошибок",
"EXIT": "Выйти",
"EXIT_APP": "Выйти из приложения",
"EXPORT": "Экспорт",
"EXPORTING": "Экспортирование",
"EXPORT_TO_CSV": "Экспортировать в CSV",
"FAX_NUMBER": "Номер Fax",
"FEMALE": "Женский",
"FIRST_NAME": "Имя",
"FOLLOW_SYSTEM_SETTINGS": "Как в системе",
"FREE_TEXT": "Текст",
"FULL_RESET": "Полный сброс",
"FUNCTIONS": "Функции",
"GENDER": "Пол",
"GOOGLE_SEARCH": "Google Search",
"HAPTIC_FEEDBACK_ONLY": "Только тактильный отклик",
"HIDDEN_NETWORK_?": "Скрытая сеть?",
"HOME_ADDRESS": "Домашний адрес",
"HOME_PHONE_NUMBER": "Номер домашнего телефона",
"ICON_ONLY": "Только иконка",
"IMPORT": "Импорт",
"IMPORT_FROM_CSV": "Импортировать из CSV",
"IMPORT_IMAGE": "Импорт изображения",
"INITIAL_SEGMENT": "Стартовая страница",
"JOB_TITLE": "Должность",
"LANGUAGE": "Язык",
"LAST_NAME": "Фамилия",
"LEVEL_H": "Уровень H",
"LEVEL_L": "Уровень L",
"LEVEL_M": "Уровень M",
"LEVEL_Q": "Уровень Q",
"LIGHT": "Светлая",
"LOADING_DATA": "Загрузка информации",
"LOCK_LANDSCAPE": "Альбомная",
"LOCK_PORTRAIT": "Портретная",
"LOG": "История",
"LOG_BACKUP_AND_RESTORE": "История и восстановление",
"MALE": "Мужской",
"MANAGE_RECORDS": "Управление записями",
"MARGIN": "Отступ",
"MESSAGE": "Сообщение",
"MESSAGE_CONTENT": "Содержание сообщения",
"MICROSOFT_BING": "Microsoft Bing",
"MOBILE_PHONE_NUMBER": "Номер мобильного телефона",
"MORE": "Подробнее",
"NAME": "Имя",
"NO": "Нет",
"NONE": "None",
"NOT_AVAILABLE": "Нет доступа",
"NOT_PROVIDED": "Не предоставлено",
"NOT_TO_DISCLOSE": "Не указан",
"NO_LIMIT": "Нет ограничений",
"NUMBER_OF_RECORDS": "Количество записей",
"OK": "ОК",
"ONLY_DELETE_DATA": "Только удалить информацию",
"ONLY_RESET_SETTING": "Только сбросить настройки",
"OPEN": "Открыть",
"OPEN_URL": "Открыть URL",
"OPEN_WITH_...": "Открыть с помощью...",
"OPTIMIZING_DATA_...": "Оптимизация информации...",
"ORGANIZATION": "Организация",
"ORIGINAL": "Оригинал",
"OTHERS": "Другое",
"PASSWORD": "Пароль",
"PATCH_NOTES": "Нововведения",
"PERMISSION_REQUIRED": "Необходимо разрешение",
"PERSONAL": "Персональные данные",
"PHONE_NO": "Номер телефона",
"PHONE_NUMBER": "Номер телефона",
"PLEASE_WAIT": "Пожалуйста, подождите",
"POSTAL_CODE": "Почтовый индекс",
"PREPARING": "Подготовка",
"PREVIEW": "Предпросмотр",
"PRIVACY_POLICY": "Политика конфиденциальности",
"QR_CODE": "QR-Код",
"QR_CODE_AND_DECODED_RESULT": "QR-Код и результат",
"QR_CODE_CONTENT": "Содержание QR-Кода",
"QR_CODE_STYLE": "Стиль QR-Кода",
"RATE_THE_APP": "Оценить приложение",
"RECORDS_LIMIT": "Ограничение количества записей",
"REMOVE_ALL": "Удалить все",
"REMOVE_BCC": "Убрать BCC",
"REMOVE_CC": "Убрать CC",
"REMOVE_RECIPIENT": "Убрать получателя",
"REPORT_ISSUE": "Сообщить о проблеме",
"RESET_APP": "Сброс приложения",
"RESET_DEFAULT": "Настройки по умолчанию",
"RESTORE": "Восстановление",
"RESULT": "Результат",
"SAVE": "Сохранять",
"SAVED": "Сохранено",
"SCAN": "Сканировать",
"SCANNED": "Просканировано",
"SCANNING_FEEDBACK_ONLY": "Только отклик сканирования",
"SCAN_BY_CAMERA": "Сканирование с помощью камеры",
"SCREEN_ORIENTATION": "Ориентация экрана",
"SEARCH": "Поиск",
"SEARCH_ENGINE": "Поисковая система",
"SECRET": "Ключ",
"SEND": "Отправить",
"SEND_EMAIL": "Отправить электронное письмо",
"SEND_MESSAGE": "Отправить сообщение",
"SETTING": "Настройки",
"SETTINGS": "Настройки",
"SHARE": "Поделиться",
"SHARING": "Отправка",
"SHOW": "Показать",
"SHOW_NUMBER_OR_RECORDS": "Показывать количество записей",
"SHOW_QR_CODE": "Показать QR-Код",
"SIMPLE_QR": "Simple QR",
"STATE": "Округ",
"STREET": "Улица",
"SUCCESS": "Успешно",
"SUPPORTED_BARCODE_TYPE": "Поддерживаемые операции",
"SUPPORTED_TYPE": "Поддерживаемые операции",
"SYSTEM_DEFAULT": "Как в системе",
"TASK": "Задача",
"TASK_BUTTON_LAYOUT": "Кнопки действия",
"TURN_OFF": "Выключить",
"TURN_ON": "Включить",
"TURNED_OFF": "Выключено",
"TURNED_ON": "Включено",
"TUTORIAL": "Обучение",
"UNDO": "Отменить",
"UNKNOWN": "Неизвестно",
"UPDATE_SUCCESSFULLY": "Успешно обновлено",
"URL": "URL",
"VCARD_CONTACT": "Контакт vCard",
"VERSION_VERSION": "Версия {version}",
"VIBRATION": "Вибрация",
"VIEWED": "Просмотрено",
"VIEW_BOOKMARK": "Просмотр закладки",
"VIEW_GITHUB": "Посетить GitHub",
"VIEW_LOG": "Просмотр истории",
"VIEW_STORE_AND_SOURCE_CODE": "Посетить магазин и репозиторий с исходным кодом ",
"VIEW_INSTRUCTIONS": "Посмотреть обучение",
"WEBSITE": "Веб-сайт",
"WIFI": "WiFi",
"WIFI_ENCRYPTION": "Шифрование WiFi",
"WIFI_SSID": "WiFi SSID",
"WORK": "Место работы",
"WORK_PHONE_NUMBER": "Номер рабочего телефона",
"YAHOO_SEARCH": "Yahoo! Search",
"YANDEX": "Yandex",
"YES": "Да",
"MSG": {
"ALREADY_BOOKMARKED": "Ошибка! Уже добавлено в закладки ранее",
"AUTO_KILL_BACKGROUND_EXPLAIN": "<p>Чтобы использовать меньше системных ресурсов и батареи, выставьте количество времени, спустя которое приложение будет автоматически остановлено, если оно работает в фоне.</p><br><p>Если вы выберете опцию <b>Как в системе</b>, фоновая активность приложения будет полностью контролироваться системой, приложение не будет приостанавливать свою работу самостоятельно.</p><br><p>Заметьте, что в некоторых ситуациях система может останавливать приложение заблаговременно.</p>",
"AUTO_LOGGING_EXPLAIN": "Содержание каждого QR-Кода и Бар-Кода автоматически сохраняется после сканирования. Вы можете повторно обращаться к этим записям в разделе Истории.",
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "Автоматически увеличивать яркость экрана до максимального значения во время просмотра QR-Кода.",
"AUTO_SHOW_QR_EXPLAIN": "Автоматически показывать QR-Код на странице результата после этих действий.",
"BACKUP_EXPLAIN": "Вы можете создать локальную резервную копию всех записей истории и закладок. Вам будет выдан набор ключей после резервного копирования. Сохраняйте эти ключи, иначе вы не сможете восстановить созданную резервную копию. Заметьте, что Simple QR не поддерживает резервное копирование между разными платформами.",
"BACKUP_FAILED": "Не удалось создать резервную копию",
"BACKUP_FAILED_2": "Не удалось создать резервную копию. Пожалуйста, убедитесь, что приложению выдано разрешение на взаимодействие с файлами.",
"BACKUP_SUCCESSFULLY": "<p>Резервное копирование успешно завершено. Пожалуйста, сохраните файл резервной копии и следующий ключ</p><p>{secret}</p>",
"BARCODE_TYPE": "Сканирование<ul><li>QR-Код</li><li>Бар-Код</li><li>Код Aztec</li><li>Data Matrix</li><li>PDF417</li></ul>Импорт изображения<ul><li>QR-Код</li></ul>Создание<ul><li>QR-Код</li></ul>",
"BOOKMARKED": "Успешно добавлено в закладки",
"BUTTON_DISPLAY_EXPLAIN": "Показать или скрыть кнопки действий.",
"BUTTON_STYLE_EXPLAIN": "Выберите стиль кнопок действий.",
"CAMERA_PERMISSION": "Чтобы приложение могло осуществлять сканирование, предоставьте доступ к Камере.",
"CONTACT_PERMISSION": "Для сохранения контакта, необходимо предоставить доступ к Контактам.",
"COPIED_SECRET": "Ключ скопирован",
"COPY_TEXT": "Какую часть контента вы бы хотели скопировать?",
"CREATE_QRCODE_MAX_LENGTH": "Максимум 1817 символов",
"CREATE_QRCODE_MAX_LENGTH_EXPLAIN": "Длина содержания сгенерированного QR-Кода не должна превышать 1817 символов.",
"DEBUG_MODE_ON": "Режим Отладки успешно активирован",
"DELETE_OVERFLOWED_RECORDS": "После того, как вы покинете эту страницу, лишние записи будут безвозвратно удалены.",
"EMAIL_MAX_LENGTH": "Максимум 254 символа",
"EMAIL_SUBJECT_MAX_LENGTH": "Максимум 78 символов",
"ERROR_CORRECTION_LEVEL_EXPLAIN": "<p>В структуру QR-Кодов заложена способность восстановления информации, даже если Код поврежден.</p><p>Существует 4 уровня такой защиты:</p><p>Уровень L восстанавливает 7% байт информации.</p><p>Уровень M восстанавливает 15% байт информации.</p><p>Уровень Q восстанавливает 25% байт информации.</p><p>Уровень H восстанавливает 30% байт информации.</p><br><p>Заметьте, что увеличение уровня защиты может увеличить вероятность восстановления информации, но также увеличивает размер QR-Кода. Поэтому, при обычных условиях рекомендуем использовать уровень M.</p>",
"EXIT_APP": "<p>Уверены, что хотите покинуть приложение?</p><p>Если вам нравится Simple QR, пожалуйста, оцените его в магазине приложений.</p>",
"EXPORT_TO_CSV_EXPLAIN": "Вы можете экспортировать все записи истории и закладки в CSV файл.",
"FAILED_SAVING_CONTACT": "Не удалось сохранить контакт",
"FAIL_PREPARE_SMS": "Не удалось отправить сообщение",
"IMPORT_FAILED": "Не удалось импортировать",
"IMPORT_FROM_CSV_EXPLAIN": "Вы можете импортировать записи истории и закладки из CSV файла в формате, заданном Simple QR. Если вы желаете переместить информацию между Android и iOS, воспользуйтесь этой функцией.",
"INPUT_TAG": "Пожалуйста, дайте закладке имя",
"INVALID_BK_FILE": "Это несовместимый файл резервной копии.",
"INVALID_CSV_FILE": "Это несовместимый CSV файл.",
"NOT_BASE64_DE": "Невозможно декодировать информацию из Base64",
"NOT_BASE64_EN": "Невозможно закодировать информацию в Base64",
"NOT_BASE64_EN_DE": "Невозможно закодировать или декодировать информацию Base64",
"NO_QR_CODE": "Не удалось распознать QR-Код",
"ONLY_VCARD_3_0": "Поддерживается только формат vCard 3.0",
"PLEASE_INPUT_VALID_SECRET": "Пожалуйста, введите правильный ключ",
"PORTRAIT_ONLY": "Портретная",
"PREPARE_SMS": "Подготовка сообщения",
"PREVIOUS_RECORDS": "Записи предыдущих действий: сканирования, создания или просмотра",
"QR_CODE_VALUE_NOT_EMPTY": "Содержание QR-Кода не может быть пустым",
"READ_IMAGE_PERMISSION": "Необходимо предоставить разрешение взаимодействовать с файлами, чтобы просканировать изображение.",
"RECORDS_LIMIT_EXPLAIN": "Укажите максимальное количество записей истории. Старые записи будут автоматически удалены при достижении указанного лимита.",
"REMOVE_ALL_BOOKMARKS": "Уверены, что хотите <b>безвозвратно</b> удалить все закладки?",
"REMOVE_ALL_RECORD": "Уверены, что хотите <b>безвозвратно</b> удалить все записи истории?",
"RESET_APP": "Уверены, что хотите вернуться к настройкам по умолчанию и удалить все данные приложения? <b>Это действие необратимо.</b>",
"RESET_DEFAULT": "Уверены, что хотите вернуться к настройкам по умолчанию?",
"RESTORE_EXPLAIN": "Вы можете восстановить закладки и записи истории из резервной копии. Полученные данные будут совмещены с текущими данными приложения. Файл резервной копии должен иметь тип TFSQBK.",
"RESTORE_EXPLAIN_IOS": "Вы можете восстановить закладки и записи истории из резервной копии. Полученные данные будут совмещены с текущими данными приложения. Файл резервной копии должен иметь тип ISQBK.",
"RESTORE_FAILED": "Не удалось восстановить",
"RESTORE_SECRET": "Пожалуйста, введите ключ для восстановления данных",
"RESTORE_SUCCESSFUL": "Восстановление успешно завершено",
"RESTORE_WRONG_SECRET": "Неверный ключ",
"SAVED_CONTACT": "Контакт сохранен",
"SAVING_CONTACT": "Идет сохранение контакта",
"SCAN_QR_FROM_IMAGE": "Simple QR использует модуль \"cozmo/jsQR\", чтобы сканировать QR-Код из изображение. Чтобы успешно осуществить сканирование",
"SCAN_QR_FROM_IMAGE_R1": "Дайте приложению разрешение на доступ к Памяти устройства или Фото на нем.",
"SCAN_QR_FROM_IMAGE_R2": "Убедитесь, что фон изображения не прозрачный. Не рекомендовано использовать изображение, полученные не при помощи камеры.",
"SCAN_QR_FROM_IMAGE_R3": "Отмените редактирование фото, если вы хотите просканировать изображение целиком (по ситуации).",
"SEARCH": "Что конкретно вы хотите найти?",
"SEARCH_ENGINE_EXPLAIN": "Выберите поисковую систему для осуществления поиска после получения результата.",
"SHARE_QR": "Скорее сканируй!\n\nОтправлено при помощи Simple QR",
"SMS_MAX_LENGTH": "Максимум 160 символов",
"SSID_MAX_LENGTH": "Максимум 32 символа",
"START_PAGE_EXPLAIN": "Выберете стартовую страницу приложения.",
"START_PAGE_HEADER_EXPLAIN": "Показывать заголовок Simple QR на стартовой странице.",
"TAG_MAX_LENGTH": "Максимум 30 символов",
"TAG_MAX_LENGTH_EXPLAIN": "Длина имени не должна превышать 30 символов..",
"TUTORIAL_NOT_SHOW_AGAIN": "Не показывать снова",
"TUTORIAL_SWIPE_LEFT": "Смахните влево, чтобы удалить соответствующую запись.",
"TUTORIAL_SWIPE_RIGHT": "Смахните вправо, чтобы добавить текст соответствующей записи в закладки / редактировать имя соответствующей закладки.",
"UNDO_DELETE": "Вы можете отменить удаление",
"VIBRATION_EXPLAIN": "Использовать вибрацию или тактильный отклик. Заметьте, что не все устройства поддерживают эту функцию."
},
"BARCODE_TYPE": {
"1D": "Бар-Код ",
"AZTEC": "Код Aztec ",
"DATA_MATRIX": "Data Matrix ",
"EAN": "European Article Number ",
"MAXICODE": "MaxiCode ",
"PDF_417": "PDF417 ",
"QR_CODE": "QR-Код ",
"RSS": "GS1 DataBar ",
"UPC": "Universal Product Code "
},
"UPDATE": {
"UPDATE_NOTES_ANDROID": "<p>В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.</p>",
"UPDATE_NOTES_IOS": "<p>В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.</p>"
}
}

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "还原预设值",
"RESTORE": "还原",
"RESULT": "结果",
"SAVE": "储存",
"SAVED": "已储存",
"SCAN": "扫描",
"SCANNED": "扫描",
"SCANNING_FEEDBACK_ONLY": "仅扫描反馈",

View file

@ -165,6 +165,8 @@
"RESET_DEFAULT": "還原預設值",
"RESTORE": "還原",
"RESULT": "結果",
"SAVE": "儲存",
"SAVED": "已儲存",
"SCAN": "掃描",
"SCANNED": "掃描",
"SCANNING_FEEDBACK_ONLY": "僅掃描反饋",

View file

@ -109,6 +109,15 @@ ion-tab-button:not(.tab-selected)::part(native):hover {
opacity: 0.5;
}
.alert-input-no-border .alert-checkbox-group {
border: 0px !important;
}
.alert-input-no-border .alert-checkbox-label {
overflow: auto !important;
white-space: pre-line !important;
}
.alert-can-copy {
user-select: text !important;
}