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 @@ + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + 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"