diff --git a/Assets/ImageSources/JoplinIconForeground.svg b/Assets/ImageSources/JoplinIconForeground.svg
new file mode 100644
index 0000000000..aab92f3113
--- /dev/null
+++ b/Assets/ImageSources/JoplinIconForeground.svg
@@ -0,0 +1,78 @@
+
+
diff --git a/Assets/ImageSources/JoplinNotificationIcon.svg b/Assets/ImageSources/JoplinNotificationIcon.svg
new file mode 100644
index 0000000000..9f263309ba
--- /dev/null
+++ b/Assets/ImageSources/JoplinNotificationIcon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/package.json b/package.json
index 63d3392b9d..8add31d02f 100644
--- a/package.json
+++ b/package.json
@@ -84,6 +84,7 @@
"lint-staged": "13.2.2",
"madge": "6.0.0",
"npm-package-json-lint": "6.4.0",
+ "svg2vectordrawable": "^2.9.1",
"typedoc": "0.17.8",
"typescript": "4.9.4"
},
diff --git a/packages/app-mobile/android/app/src/main/res/drawable-anydpi-v24/ic_notification.xml b/packages/app-mobile/android/app/src/main/res/drawable-anydpi-v24/ic_notification.xml
new file mode 100644
index 0000000000..307d85a37f
--- /dev/null
+++ b/packages/app-mobile/android/app/src/main/res/drawable-anydpi-v24/ic_notification.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/packages/app-mobile/android/app/src/main/res/drawable-hdpi/ic_notification.png b/packages/app-mobile/android/app/src/main/res/drawable-hdpi/ic_notification.png
new file mode 100644
index 0000000000..b9b2e87af3
Binary files /dev/null and b/packages/app-mobile/android/app/src/main/res/drawable-hdpi/ic_notification.png differ
diff --git a/packages/app-mobile/android/app/src/main/res/drawable-mdpi/ic_notification.png b/packages/app-mobile/android/app/src/main/res/drawable-mdpi/ic_notification.png
new file mode 100644
index 0000000000..57d55b2f0c
Binary files /dev/null and b/packages/app-mobile/android/app/src/main/res/drawable-mdpi/ic_notification.png differ
diff --git a/packages/app-mobile/android/app/src/main/res/drawable-xhdpi/ic_notification.png b/packages/app-mobile/android/app/src/main/res/drawable-xhdpi/ic_notification.png
new file mode 100644
index 0000000000..203dcae9db
Binary files /dev/null and b/packages/app-mobile/android/app/src/main/res/drawable-xhdpi/ic_notification.png differ
diff --git a/packages/app-mobile/android/app/src/main/res/drawable-xxhdpi/ic_notification.png b/packages/app-mobile/android/app/src/main/res/drawable-xxhdpi/ic_notification.png
new file mode 100644
index 0000000000..9dc753ac62
Binary files /dev/null and b/packages/app-mobile/android/app/src/main/res/drawable-xxhdpi/ic_notification.png differ
diff --git a/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.png
deleted file mode 100644
index e673f82e1e..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000000..28ffd4fee1
--- /dev/null
+++ b/packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index ca053fb6b8..6c84555ff4 100644
--- a/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index ca053fb6b8..6c84555ff4 100644
--- a/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/packages/app-mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index a884bbbd0e..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index beaf085390..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 9322dd4164..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index bc11bfe425..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/packages/app-mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 9dce85cb96..0000000000
Binary files a/packages/app-mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/packages/app-mobile/services/AlarmServiceDriver.android.ts b/packages/app-mobile/services/AlarmServiceDriver.android.ts
index a80a738f49..a5d6ada08a 100644
--- a/packages/app-mobile/services/AlarmServiceDriver.android.ts
+++ b/packages/app-mobile/services/AlarmServiceDriver.android.ts
@@ -53,8 +53,7 @@ export default class AlarmServiceDriver {
title: notification.title,
message: notification.body ? notification.body : '-', // Required
channel: 'net.cozic.joplin.notification',
- small_icon: 'ic_launcher_foreground', // Android requires the icon to be transparent
- color: 'blue',
+ small_icon: 'ic_notification',
data: {
joplinNotificationId: notification.id,
noteId: notification.noteId,
diff --git a/packages/react-native-alarm-notification/android/src/main/AndroidManifest.xml b/packages/react-native-alarm-notification/android/src/main/AndroidManifest.xml
index 52c1187084..a53e2073be 100644
--- a/packages/react-native-alarm-notification/android/src/main/AndroidManifest.xml
+++ b/packages/react-native-alarm-notification/android/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+
diff --git a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmModel.java b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmModel.java
index 1e8fdb6a38..fd8c5ac8a3 100644
--- a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmModel.java
+++ b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmModel.java
@@ -369,7 +369,7 @@ public class AlarmModel implements Serializable {
alarm.setActive(1);
alarm.setAutoCancel(bundle.getBoolean("auto_cancel", true));
alarm.setChannel(bundle.getString("channel", "my_channel_id"));
- alarm.setColor(bundle.getString("color", "red"));
+ alarm.setColor(bundle.getString("color", ""));
Bundle data = bundle.getBundle("data");
alarm.setData(data);
@@ -380,7 +380,7 @@ public class AlarmModel implements Serializable {
alarm.setMessage(bundle.getString("message", "My Notification Message"));
alarm.setPlaySound(bundle.getBoolean("play_sound", true));
alarm.setScheduleType(bundle.getString("schedule_type", "once"));
- alarm.setSmallIcon(bundle.getString("small_icon", "ic_launcher"));
+ alarm.setSmallIcon(bundle.getString("small_icon", "ic_notification"));
alarm.setSnoozeInterval((int) bundle.getDouble("snooze_interval", 1.0));
alarm.setSoundName(bundle.getString("sound_name", null));
alarm.setSoundNames(bundle.getString("sound_names", null));
diff --git a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmReceiver.java b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmReceiver.java
index ddd08ab3fa..448db6a028 100644
--- a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmReceiver.java
+++ b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmReceiver.java
@@ -9,6 +9,7 @@ import android.util.Log;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import java.util.ArrayList;
+import java.util.List;
public class AlarmReceiver extends BroadcastReceiver {
@@ -27,7 +28,7 @@ public class AlarmReceiver extends BroadcastReceiver {
alarmUtil.sendNotification(alarm);
alarmUtil.setBootReceiver();
- ArrayList alarms = alarmDB.getAlarmList(1);
+ List alarms = alarmDB.getAlarmList(1);
Log.d(Constants.TAG, "alarm start: " + alarm.toString() + ", alarms left: " + alarms.size());
} catch (Exception e) {
Log.e(Constants.TAG, "Failed to add alarm", e);
diff --git a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmUtil.java b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmUtil.java
index 8dc7823476..5a1d4d9fee 100644
--- a/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmUtil.java
+++ b/packages/react-native-alarm-notification/android/src/main/java/com/emekalites/react/alarm/notification/AlarmUtil.java
@@ -1,5 +1,9 @@
package com.emekalites.react.alarm.notification;
+import static com.emekalites.react.alarm.notification.Constants.ADD_INTENT;
+import static com.emekalites.react.alarm.notification.Constants.NOTIFICATION_ACTION_DISMISS;
+import static com.emekalites.react.alarm.notification.Constants.NOTIFICATION_ACTION_SNOOZE;
+
import android.app.AlarmManager;
import android.app.Application;
import android.app.Notification;
@@ -21,6 +25,7 @@ import android.os.Build;
import android.util.Log;
import android.widget.Toast;
+import androidx.core.app.AlarmManagerCompat;
import androidx.core.app.NotificationCompat;
import com.facebook.react.bridge.WritableMap;
@@ -33,10 +38,6 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
-import static com.emekalites.react.alarm.notification.Constants.ADD_INTENT;
-import static com.emekalites.react.alarm.notification.Constants.NOTIFICATION_ACTION_DISMISS;
-import static com.emekalites.react.alarm.notification.Constants.NOTIFICATION_ACTION_SNOOZE;
-
class AlarmUtil {
private static final long[] DEFAULT_VIBRATE_PATTERN = {0, 250, 250, 250};
@@ -47,7 +48,7 @@ class AlarmUtil {
AlarmUtil(Application context) {
this.context = context;
- this.alarmDB = new AlarmDatabase(context);
+ this.alarmDB = new AlarmDatabase(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
defaultFlags = PendingIntent.FLAG_IMMUTABLE;
@@ -110,12 +111,12 @@ class AlarmUtil {
String scheduleType = alarm.getScheduleType();
if (scheduleType.equals("once")) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
- } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ if (alarmManager.canScheduleExactAlarms()) {
+ AlarmManagerCompat.setAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ }
} else {
- alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ AlarmManagerCompat.setExact(alarmManager, AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
}
} else if (scheduleType.equals("repeat")) {
long interval = this.getInterval(alarm.getInterval(), alarm.getIntervalValue());
@@ -152,12 +153,12 @@ class AlarmUtil {
String scheduleType = alarm.getScheduleType();
if (scheduleType.equals("once")) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
- } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ if (alarmManager.canScheduleExactAlarms()) {
+ AlarmManagerCompat.setAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ }
} else {
- alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
+ AlarmManagerCompat.setExact(alarmManager, AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
}
} else if (scheduleType.equals("repeat")) {
long interval = this.getInterval(alarm.getInterval(), alarm.getIntervalValue());
@@ -176,7 +177,7 @@ class AlarmUtil {
duration = value;
break;
case "hourly":
- duration = 60 * value;
+ duration = 60L * value;
break;
case "daily":
duration = 60 * 24;
@@ -317,9 +318,9 @@ class AlarmUtil {
int smallIconResId;
String smallIcon = alarm.getSmallIcon();
if (smallIcon != null && !smallIcon.equals("")) {
- smallIconResId = res.getIdentifier(smallIcon, "mipmap", packageName);
+ smallIconResId = res.getIdentifier(smallIcon, "drawable", packageName);
} else {
- smallIconResId = res.getIdentifier("ic_launcher", "mipmap", packageName);
+ smallIconResId = res.getIdentifier("ic_notification", "drawable", packageName);
}
Intent intent = new Intent(context, intentClass);
@@ -329,7 +330,7 @@ class AlarmUtil {
intent.putExtra(Constants.NOTIFICATION_ID, alarm.getId());
intent.putExtra("data", alarm.getData());
- PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationID, intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, channelID)
.setSmallIcon(smallIconResId)
@@ -378,11 +379,9 @@ class AlarmUtil {
}
//color
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- String color = alarm.getColor();
- if (color != null && !color.equals("")) {
- mBuilder.setColor(Color.parseColor(color));
- }
+ String color = alarm.getColor();
+ if (color != null && !color.equals("")) {
+ mBuilder.setColor(Color.parseColor(color));
}
mBuilder.setContentIntent(pendingIntent);
@@ -410,8 +409,8 @@ class AlarmUtil {
//large icon
String largeIcon = alarm.getLargeIcon();
- if (largeIcon != null && !largeIcon.equals("") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- int largeIconResId = res.getIdentifier(largeIcon, "mipmap", packageName);
+ if (largeIcon != null && !largeIcon.equals("")) {
+ int largeIconResId = res.getIdentifier(largeIcon, "drawable", packageName);
Bitmap largeIconBitmap = BitmapFactory.decodeResource(res, largeIconResId);
if (largeIconResId != 0) {
mBuilder.setLargeIcon(largeIconBitmap);
diff --git a/packages/tools/generate-images.json b/packages/tools/generate-images.json
index 49f0591073..c835b7c5e2 100644
--- a/packages/tools/generate-images.json
+++ b/packages/tools/generate-images.json
@@ -58,6 +58,10 @@
"7_a088bffc3266cee9cf14dcb575533df2_Assets/LinuxIcons/256x256.png_256_256__": true,
"7_a088bffc3266cee9cf14dcb575533df2_Assets/LinuxIcons/512x512.png_512_512__": true,
"7_a088bffc3266cee9cf14dcb575533df2_Assets/LinuxIcons/1024x1024.png_1024_1024__": true,
- "icns_to_icon_set_89ddfe84307b49fa96580655b5d7c045_216bb492f34224f24aabacb5f98c3620_fe652082bfb7427cd5c74566ecc24322_ebf1ccaf3f5b77b01ff690b763a411f9_216bb492f34224f24aabacb5f98c3620_950b970a784b14c329e09e78af827a77_ebf1ccaf3f5b77b01ff690b763a411f9_d33dafc8081155149dd1d8c1713bf03f_950b970a784b14c329e09e78af827a77_94949c497e46ed0c67082175f5bb22f8": true
+ "icns_to_icon_set_89ddfe84307b49fa96580655b5d7c045_216bb492f34224f24aabacb5f98c3620_fe652082bfb7427cd5c74566ecc24322_ebf1ccaf3f5b77b01ff690b763a411f9_216bb492f34224f24aabacb5f98c3620_950b970a784b14c329e09e78af827a77_ebf1ccaf3f5b77b01ff690b763a411f9_d33dafc8081155149dd1d8c1713bf03f_950b970a784b14c329e09e78af827a77_94949c497e46ed0c67082175f5bb22f8": true,
+ "11_5f89ab52500090249bf3464c17dae433_packages/app-mobile/android/app/src/main/res/drawable-mdpi/ic_notification.png_24_24__": true,
+ "11_5f89ab52500090249bf3464c17dae433_packages/app-mobile/android/app/src/main/res/drawable-hdpi/ic_notification.png_36_36__": true,
+ "11_5f89ab52500090249bf3464c17dae433_packages/app-mobile/android/app/src/main/res/drawable-xhdpi/ic_notification.png_48_48__": true,
+ "11_5f89ab52500090249bf3464c17dae433_packages/app-mobile/android/app/src/main/res/drawable-xxhdpi/ic_notification.png_72_72__": true
}
}
\ No newline at end of file
diff --git a/packages/tools/generate-images.ts b/packages/tools/generate-images.ts
index daf9b49b75..f58a348e7d 100644
--- a/packages/tools/generate-images.ts
+++ b/packages/tools/generate-images.ts
@@ -4,6 +4,7 @@ import { execCommand } from './tool-utils';
import { fileExtension } from '@joplin/lib/path-utils';
const md5File = require('md5-file');
const sharp = require('sharp');
+const svg2vectordrawable = require('svg2vectordrawable/src/svg-file-to-vectordrawable-file');
interface Source {
id: number;
@@ -60,6 +61,14 @@ const sources: Source[] = [
id: 9,
name: 'WebsiteTopImageCn.png',
},
+ {
+ id: 10,
+ name: 'JoplinIconForeground.svg',
+ },
+ {
+ id: 11,
+ name: 'JoplinNotificationIcon.svg',
+ },
];
function sourceById(id: number) {
@@ -71,6 +80,47 @@ function sourceById(id: number) {
const operations: Operation[] = [
+ // ============================================================================
+ // Android icons
+ // ============================================================================
+
+ {
+ source: 10,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable/ic_launcher_foreground.xml',
+ width: 108,
+ height: 108,
+ },
+ {
+ source: 11,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable-anydpi-v24/ic_notification.xml',
+ width: 24,
+ height: 24,
+ },
+ {
+ source: 11,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable-mdpi/ic_notification.png',
+ width: 24,
+ height: 24,
+ },
+ {
+ source: 11,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable-hdpi/ic_notification.png',
+ width: 36,
+ height: 36,
+ },
+ {
+ source: 11,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable-xhdpi/ic_notification.png',
+ width: 48,
+ height: 48,
+ },
+ {
+ source: 11,
+ dest: 'packages/app-mobile/android/app/src/main/res/drawable-xxhdpi/ic_notification.png',
+ width: 72,
+ height: 72,
+ },
+
// ============================================================================
// iOS icons
// ============================================================================
@@ -534,6 +584,15 @@ async function main() {
s.webp({
// quality: 90,
});
+ } else if (destExt === 'xml') {
+ const options = {
+ floatPrecision: 2,
+ fillBlack: false,
+ xmlTag: false,
+ tint: '#FFFFFFFF',
+ };
+ svg2vectordrawable.convertFile(sourcePath, destPath, options);
+ continue;
} else {
throw new Error(`Unsupported extension: ${destExt}`);
}
diff --git a/packages/tools/package.json b/packages/tools/package.json
index 60e7b2eff2..64e9081c54 100644
--- a/packages/tools/package.json
+++ b/packages/tools/package.json
@@ -37,6 +37,7 @@
"request": "2.88.2",
"sharp": "0.32.1",
"source-map-support": "0.5.21",
+ "svg2vectordrawable": "2.9.1",
"uri-template": "2.0.0",
"yargs": "17.7.2"
},
diff --git a/yarn.lock b/yarn.lock
index 5b1209c268..9badeaddfc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5460,6 +5460,7 @@ __metadata:
sharp: 0.32.1
source-map-support: 0.5.21
sqlite3: 5.1.6
+ svg2vectordrawable: 2.9.1
typescript: 4.9.4
uri-template: 2.0.0
yargs: 17.7.2
@@ -7424,6 +7425,13 @@ __metadata:
languageName: node
linkType: hard
+"@trysound/sax@npm:0.2.0":
+ version: 0.2.0
+ resolution: "@trysound/sax@npm:0.2.0"
+ checksum: 11226c39b52b391719a2a92e10183e4260d9651f86edced166da1d95f39a0a1eaa470e44d14ac685ccd6d3df7e2002433782872c0feeb260d61e80f21250e65c
+ languageName: node
+ linkType: hard
+
"@tsconfig/node10@npm:^1.0.7":
version: 1.0.9
resolution: "@tsconfig/node10@npm:1.0.9"
@@ -8061,6 +8069,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/q@npm:^1.5.1":
+ version: 1.5.5
+ resolution: "@types/q@npm:1.5.5"
+ checksum: 3bd386fb97a0e5f1ce1ed7a14e39b60e469b5ca9d920a7f69e0cdb58d22c0f5bdd16637d8c3a5bfeda76663c023564dd47a65389ee9aaabd65aee54803d5ba45
+ languageName: node
+ linkType: hard
+
"@types/qs@npm:*":
version: 6.9.7
resolution: "@types/qs@npm:6.9.7"
@@ -8846,6 +8861,13 @@ __metadata:
languageName: node
linkType: hard
+"abs-svg-path@npm:^0.1.1":
+ version: 0.1.1
+ resolution: "abs-svg-path@npm:0.1.1"
+ checksum: af1a167c09e8bdb76c80adca7333f3d828e5b50e37b9702aa03675e271919e7b1eeaa35cce939970ecba14769953b7465ea34c2129ab683ddff9d973a07f164f
+ languageName: node
+ linkType: hard
+
"absolute-path@npm:^0.0.0":
version: 0.0.0
resolution: "absolute-path@npm:0.0.0"
@@ -10448,6 +10470,13 @@ __metadata:
languageName: node
linkType: hard
+"boolbase@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "boolbase@npm:1.0.0"
+ checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0
+ languageName: node
+ linkType: hard
+
"boolean@npm:^3.0.1":
version: 3.1.4
resolution: "boolean@npm:3.1.4"
@@ -11363,7 +11392,7 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:2.4.2, chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.3.1, chalk@npm:^2.4.2":
+"chalk@npm:2.4.2, chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.3.1, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
dependencies:
@@ -11874,6 +11903,17 @@ __metadata:
languageName: node
linkType: hard
+"coa@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "coa@npm:2.0.2"
+ dependencies:
+ "@types/q": ^1.5.1
+ chalk: ^2.4.1
+ q: ^1.1.2
+ checksum: 44736914aac2160d3d840ed64432a90a3bb72285a0cd6a688eb5cabdf15d15a85eee0915b3f6f2a4659d5075817b1cb577340d3c9cbb47d636d59ab69f819552
+ languageName: node
+ linkType: hard
+
"code-excerpt@npm:^3.0.0":
version: 3.0.0
resolution: "code-excerpt@npm:3.0.0"
@@ -12892,6 +12932,19 @@ __metadata:
languageName: node
linkType: hard
+"css-select@npm:^4.1.3":
+ version: 4.3.0
+ resolution: "css-select@npm:4.3.0"
+ dependencies:
+ boolbase: ^1.0.0
+ css-what: ^6.0.1
+ domhandler: ^4.3.1
+ domutils: ^2.8.0
+ nth-check: ^2.0.1
+ checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0
+ languageName: node
+ linkType: hard
+
"css-selector-parser@npm:^1.3":
version: 1.4.1
resolution: "css-selector-parser@npm:1.4.1"
@@ -12910,6 +12963,23 @@ __metadata:
languageName: node
linkType: hard
+"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "css-tree@npm:1.1.3"
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: ^0.6.1
+ checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f
+ languageName: node
+ linkType: hard
+
+"css-what@npm:^6.0.1":
+ version: 6.1.0
+ resolution: "css-what@npm:6.1.0"
+ checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe
+ languageName: node
+ linkType: hard
+
"css@npm:3.0.0":
version: 3.0.0
resolution: "css@npm:3.0.0"
@@ -12930,6 +13000,15 @@ __metadata:
languageName: node
linkType: hard
+"csso@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "csso@npm:4.2.0"
+ dependencies:
+ css-tree: ^1.1.2
+ checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998
+ languageName: node
+ linkType: hard
+
"cssom@npm:^0.4.4":
version: 0.4.4
resolution: "cssom@npm:0.4.4"
@@ -14609,6 +14688,17 @@ __metadata:
languageName: node
linkType: hard
+"dom-serializer@npm:^1.0.1":
+ version: 1.4.1
+ resolution: "dom-serializer@npm:1.4.1"
+ dependencies:
+ domelementtype: ^2.0.1
+ domhandler: ^4.2.0
+ entities: ^2.0.0
+ checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22
+ languageName: node
+ linkType: hard
+
"dom-serializer@npm:^2.0.0":
version: 2.0.0
resolution: "dom-serializer@npm:2.0.0"
@@ -14634,7 +14724,7 @@ __metadata:
languageName: node
linkType: hard
-"domelementtype@npm:2.3.0, domelementtype@npm:^2.3.0":
+"domelementtype@npm:2.3.0, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0":
version: 2.3.0
resolution: "domelementtype@npm:2.3.0"
checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6
@@ -14684,6 +14774,15 @@ __metadata:
languageName: node
linkType: hard
+"domhandler@npm:^4.2.0, domhandler@npm:^4.3.1":
+ version: 4.3.1
+ resolution: "domhandler@npm:4.3.1"
+ dependencies:
+ domelementtype: ^2.2.0
+ checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa
+ languageName: node
+ linkType: hard
+
"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2":
version: 5.0.3
resolution: "domhandler@npm:5.0.3"
@@ -14735,6 +14834,17 @@ __metadata:
languageName: node
linkType: hard
+"domutils@npm:^2.8.0":
+ version: 2.8.0
+ resolution: "domutils@npm:2.8.0"
+ dependencies:
+ dom-serializer: ^1.0.1
+ domelementtype: ^2.2.0
+ domhandler: ^4.2.0
+ checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391
+ languageName: node
+ linkType: hard
+
"dot-case@npm:^3.0.4":
version: 3.0.4
resolution: "dot-case@npm:3.0.4"
@@ -19829,6 +19939,13 @@ __metadata:
languageName: node
linkType: hard
+"is-svg-path@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "is-svg-path@npm:1.0.2"
+ checksum: ed35f610d117f3bd2b6a1a637e9c03136f408976221c2396acfa811636ac71853b7509338245853154e2da69f9b5223a65ecf8d1d6192bd8b337a32b46b589e3
+ languageName: node
+ linkType: hard
+
"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3":
version: 1.0.4
resolution: "is-symbol@npm:1.0.4"
@@ -22996,6 +23113,13 @@ __metadata:
languageName: node
linkType: hard
+"mdn-data@npm:2.0.14":
+ version: 2.0.14
+ resolution: "mdn-data@npm:2.0.14"
+ checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16
+ languageName: node
+ linkType: hard
+
"mdurl@npm:^1.0.1":
version: 1.0.1
resolution: "mdurl@npm:1.0.1"
@@ -24809,6 +24933,15 @@ __metadata:
languageName: node
linkType: hard
+"normalize-svg-path@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "normalize-svg-path@npm:1.1.0"
+ dependencies:
+ svg-arc-to-cubic-bezier: ^3.0.0
+ checksum: 106e108b2f99e9e222a1c6edfc859523c6c3c2b0a6ba64743ed08af120b23b9bc2c16682bc2ae043a24c011c34c8252376c68525cf11735c6f110b571740eb2e
+ languageName: node
+ linkType: hard
+
"normalize-url@npm:^4.1.0":
version: 4.5.1
resolution: "normalize-url@npm:4.5.1"
@@ -24998,6 +25131,15 @@ __metadata:
languageName: node
linkType: hard
+"nth-check@npm:^2.0.1":
+ version: 2.1.1
+ resolution: "nth-check@npm:2.1.1"
+ dependencies:
+ boolbase: ^1.0.0
+ checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3
+ languageName: node
+ linkType: hard
+
"nullthrows@npm:^1.1.1":
version: 1.1.1
resolution: "nullthrows@npm:1.1.1"
@@ -25935,6 +26077,13 @@ __metadata:
languageName: node
linkType: hard
+"parse-svg-path@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "parse-svg-path@npm:0.1.2"
+ checksum: bba7d4b4207fcc9eaf553b0d34db96ea8a1173635bc94528b5b66e1581902d4792d8d6229103764f01af4d839274234e97a4fa1c6f0fe7dcce195383848cec56
+ languageName: node
+ linkType: hard
+
"parse-url@npm:^6.0.0":
version: 6.0.0
resolution: "parse-url@npm:6.0.0"
@@ -27105,7 +27254,7 @@ __metadata:
languageName: node
linkType: hard
-"q@npm:^1.5.1":
+"q@npm:^1.1.2, q@npm:^1.5.1":
version: 1.5.1
resolution: "q@npm:1.5.1"
checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12
@@ -29115,6 +29264,7 @@ __metadata:
node-gyp: 9.3.1
nodemon: 2.0.22
npm-package-json-lint: 6.4.0
+ svg2vectordrawable: ^2.9.1
typedoc: 0.17.8
typescript: 4.9.4
languageName: unknown
@@ -30386,6 +30536,13 @@ __metadata:
languageName: node
linkType: hard
+"stable@npm:^0.1.8":
+ version: 0.1.8
+ resolution: "stable@npm:0.1.8"
+ checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb
+ languageName: node
+ linkType: hard
+
"stack-trace@npm:0.0.10":
version: 0.0.10
resolution: "stack-trace@npm:0.0.10"
@@ -31171,6 +31328,69 @@ __metadata:
languageName: node
linkType: hard
+"svg-arc-to-cubic-bezier@npm:^3.0.0":
+ version: 3.2.0
+ resolution: "svg-arc-to-cubic-bezier@npm:3.2.0"
+ checksum: 55bf17756d558b9c0daddf636a6c9f2fe01fd5ac412229dfa2d4b29740226a82c980bcd3b5eb09ce311cbea282106c7549d97f8c8dba3a5a7b75f786bcb5e155
+ languageName: node
+ linkType: hard
+
+"svg-path-bounds@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "svg-path-bounds@npm:1.0.2"
+ dependencies:
+ abs-svg-path: ^0.1.1
+ is-svg-path: ^1.0.1
+ normalize-svg-path: ^1.0.0
+ parse-svg-path: ^0.1.2
+ checksum: 8590a4e14942a34f595df64d804a3533cb83a29498b34f61723cf3172958a5a3c3b211805c6c4b2f93fb90ff4eab74b08a2dc1daa489d6ba429534aca5f5184d
+ languageName: node
+ linkType: hard
+
+"svg2vectordrawable@npm:2.9.1, svg2vectordrawable@npm:^2.9.1":
+ version: 2.9.1
+ resolution: "svg2vectordrawable@npm:2.9.1"
+ dependencies:
+ coa: ^2.0.2
+ mkdirp: ^1.0.4
+ svg-path-bounds: ^1.0.1
+ svgo: ^2.8.0
+ svgpath: ^2.5.0
+ bin:
+ s2v: bin/svg2vectordrawable
+ svg2android: bin/svg2vectordrawable
+ svg2avd: bin/svg2vectordrawable
+ svg2drawable: bin/svg2vectordrawable
+ svg2vector: bin/svg2vectordrawable
+ svg2vectordrawable: bin/svg2vectordrawable
+ checksum: 37f83e21f6dd81a09afcbe2b01f09c9cde3f9c1614045a66e5ae82d550f2629b0bad6335913fd13e8dc1d885bcfcb184f410100419ec3ba53380ae0a2034c939
+ languageName: node
+ linkType: hard
+
+"svgo@npm:^2.8.0":
+ version: 2.8.0
+ resolution: "svgo@npm:2.8.0"
+ dependencies:
+ "@trysound/sax": 0.2.0
+ commander: ^7.2.0
+ css-select: ^4.1.3
+ css-tree: ^1.1.3
+ csso: ^4.2.0
+ picocolors: ^1.0.0
+ stable: ^0.1.8
+ bin:
+ svgo: bin/svgo
+ checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420
+ languageName: node
+ linkType: hard
+
+"svgpath@npm:^2.5.0":
+ version: 2.6.0
+ resolution: "svgpath@npm:2.6.0"
+ checksum: 57bd2512b41a03a729c2880a6c771bb8ad449a9cea47c1fc43ac5cec70bf81a607591bb916ba16c21c9d87122537bcdf2ac4082dae13559c84c964b8fe868204
+ languageName: node
+ linkType: hard
+
"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"