diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 879f0756c5f6..b9e70e5e4fbb 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -33,6 +33,7 @@ body:
       options:
         - Android
         - Windows
+        - MacOS
         - Linux
         - Web
     validations:
diff --git a/FLUTTER_VERSION b/FLUTTER_VERSION
index afb053553c33..185e484bddaa 100644
--- a/FLUTTER_VERSION
+++ b/FLUTTER_VERSION
@@ -1 +1 @@
-3.16.4
\ No newline at end of file
+3.16.5
\ No newline at end of file
diff --git a/api/pubspec.yaml b/api/pubspec.yaml
index ffb776e02531..7761bb24efe7 100644
--- a/api/pubspec.yaml
+++ b/api/pubspec.yaml
@@ -12,7 +12,7 @@ dependencies:
   json_annotation: ^4.8.1
   replay_bloc: ^0.2.5
   rxdart: ^0.27.7
-  xml: ^6.4.2
+  xml: ^6.5.0
 dev_dependencies:
   test: ^1.25.0
   json_serializable: ^6.7.1
diff --git a/app/android/Gemfile.lock b/app/android/Gemfile.lock
index 8f8046566509..4ea22cc69b9f 100644
--- a/app/android/Gemfile.lock
+++ b/app/android/Gemfile.lock
@@ -3,18 +3,18 @@ GEM
   specs:
     CFPropertyList (3.0.6)
       rexml
-    addressable (2.8.5)
+    addressable (2.8.6)
       public_suffix (>= 2.0.2, < 6.0)
     artifactory (3.0.15)
     atomos (0.1.3)
     aws-eventstream (1.3.0)
-    aws-partitions (1.862.0)
+    aws-partitions (1.870.0)
     aws-sdk-core (3.190.0)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.74.0)
+    aws-sdk-kms (1.75.0)
       aws-sdk-core (~> 3, >= 3.188.0)
       aws-sigv4 (~> 1.1)
     aws-sdk-s3 (1.141.0)
@@ -35,7 +35,7 @@ GEM
     domain_name (0.6.20231109)
     dotenv (2.8.1)
     emoji_regex (3.2.3)
-    excon (0.105.0)
+    excon (0.108.0)
     faraday (1.10.3)
       faraday-em_http (~> 1.0)
       faraday-em_synchrony (~> 1.0)
@@ -106,7 +106,7 @@ GEM
       xcpretty (~> 0.3.0)
       xcpretty-travis-formatter (>= 0.0.3)
     gh_inspector (1.1.3)
-    google-apis-androidpublisher_v3 (0.53.0)
+    google-apis-androidpublisher_v3 (0.54.0)
       google-apis-core (>= 0.11.0, < 2.a)
     google-apis-core (0.11.2)
       addressable (~> 2.5, >= 2.5.1)
@@ -123,11 +123,11 @@ GEM
       google-apis-core (>= 0.11.0, < 2.a)
     google-apis-storage_v1 (0.29.0)
       google-apis-core (>= 0.11.0, < 2.a)
-    google-cloud-core (1.6.0)
-      google-cloud-env (~> 1.0)
+    google-cloud-core (1.6.1)
+      google-cloud-env (>= 1.0, < 3.a)
       google-cloud-errors (~> 1.0)
-    google-cloud-env (1.6.0)
-      faraday (>= 0.17.3, < 3.0)
+    google-cloud-env (2.1.0)
+      faraday (>= 1.0, < 3.a)
     google-cloud-errors (1.3.1)
     google-cloud-storage (1.45.0)
       addressable (~> 2.8)
@@ -137,8 +137,9 @@ GEM
       google-cloud-core (~> 1.6)
       googleauth (>= 0.16.2, < 2.a)
       mini_mime (~> 1.0)
-    googleauth (1.8.1)
-      faraday (>= 0.17.3, < 3.a)
+    googleauth (1.9.1)
+      faraday (>= 1.0, < 3.a)
+      google-cloud-env (~> 2.1)
       jwt (>= 1.4, < 3.0)
       multi_json (~> 1.11)
       os (>= 0.9, < 2.0)
@@ -148,7 +149,7 @@ GEM
       domain_name (~> 0.5)
     httpclient (2.8.3)
     jmespath (1.6.2)
-    json (2.7.0)
+    json (2.7.1)
     jwt (2.7.1)
     mini_magick (4.12.0)
     mini_mime (1.1.5)
@@ -186,7 +187,7 @@ GEM
       unicode-display_width (>= 1.1.1, < 3)
     trailblazer-option (0.1.2)
     tty-cursor (0.7.1)
-    tty-screen (0.8.1)
+    tty-screen (0.8.2)
     tty-spinner (0.9.3)
       tty-cursor (~> 0.7)
     uber (0.1.0)
diff --git a/app/lib/actions/export.dart b/app/lib/actions/export.dart
index b1bec7c806f7..d2890538d4b8 100644
--- a/app/lib/actions/export.dart
+++ b/app/lib/actions/export.dart
@@ -1,4 +1,4 @@
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly_api/butterfly_api.dart';
 import 'package:flutter/material.dart';
diff --git a/app/lib/api/open.dart b/app/lib/api/open.dart
index 399407f59e75..9aa507f920cd 100644
--- a/app/lib/api/open.dart
+++ b/app/lib/api/open.dart
@@ -1,13 +1,22 @@
 import 'dart:async';
-import 'dart:io';
 
+import 'package:butterfly/visualizer/asset.dart';
 import 'package:butterfly_api/butterfly_api.dart';
-import 'package:file_picker/file_picker.dart';
+import 'package:file_selector/file_selector.dart' as fs;
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:go_router/go_router.dart';
 import 'package:url_launcher/url_launcher.dart';
 
+Future<bool> openReleaseNotes() {
+  return launchUrl(
+      Uri(
+          scheme: 'https',
+          host: 'go.linwood.dev',
+          pathSegments: ['butterfly', '2.0']),
+      mode: LaunchMode.externalApplication);
+}
+
 Future<bool> openHelp(List<String> pageLocation, [String? fragment]) {
   return launchUrl(
       Uri(
@@ -18,21 +27,20 @@ Future<bool> openHelp(List<String> pageLocation, [String? fragment]) {
       mode: LaunchMode.externalApplication);
 }
 
-Future<(Uint8List?, String?)> openSupported(
-    [List<String>? fileExtension]) async {
-  final isMobile = !kIsWeb && (Platform.isAndroid || Platform.isIOS);
-  final files = await FilePicker.platform.pickFiles(
-    type: isMobile ? FileType.any : FileType.custom,
-    allowedExtensions: isMobile
-        ? null
-        : (fileExtension ??
-            AssetFileType.values.expand((e) => e.getFileExtensions()).toList()),
-    allowMultiple: false,
-    withData: true,
+Future<(Uint8List?, String?)> importFile(BuildContext context,
+    [List<AssetFileType>? types]) async {
+  final result = await fs.openFile(
+    acceptedTypeGroups: (types ?? AssetFileType.values)
+        .where((e) => e.getFileExtensions().isNotEmpty)
+        .map((e) => fs.XTypeGroup(
+              label: e.getLocalizedName(context),
+              extensions: e.getFileExtensions(),
+              mimeTypes: [e.getMime()],
+            ))
+        .toList(),
   );
-  if (files?.files.isEmpty ?? true) return (null, null);
-  var e = files!.files.first;
-  return (e.bytes, e.extension);
+  final data = await result?.readAsBytes();
+  return (data, result?.name.split('.').lastOrNull);
 }
 
 Future<void> openFile(
diff --git a/app/lib/api/open_release_notes.dart b/app/lib/api/open_release_notes.dart
deleted file mode 100644
index d3c33c9ff13a..000000000000
--- a/app/lib/api/open_release_notes.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'package:url_launcher/url_launcher.dart';
-
-Future<bool> openReleaseNotes() {
-  return launchUrl(
-      Uri(
-          scheme: 'https',
-          host: 'go.linwood.dev',
-          pathSegments: ['butterfly', '2.0']),
-      mode: LaunchMode.externalApplication);
-}
diff --git a/app/lib/api/save_data.dart b/app/lib/api/save.dart
similarity index 69%
rename from app/lib/api/save_data.dart
rename to app/lib/api/save.dart
index 279c02efebbb..81df0c3fe2c3 100644
--- a/app/lib/api/save_data.dart
+++ b/app/lib/api/save.dart
@@ -1,7 +1,4 @@
-import 'package:butterfly/api/save_data_stub.dart'
-    if (dart.library.io) 'package:butterfly/api/save_data_io.dart'
-    if (dart.library.js) 'package:butterfly/api/save_data_html.dart'
-    as save_data;
+import 'package:file_selector/file_selector.dart' as fs;
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -11,8 +8,21 @@ Future<void> exportFile(
   List<int> bytes,
   String fileExtension,
   String mimeType,
-) async =>
-    save_data.exportFile(context, bytes, fileExtension, mimeType);
+) async {
+  final result = await fs.getSaveLocation(
+    acceptedTypeGroups: [
+      fs.XTypeGroup(
+        label: AppLocalizations.of(context).export,
+        extensions: [fileExtension],
+        mimeTypes: [mimeType],
+      ),
+    ],
+  );
+  if (result == null) return;
+  final file = fs.XFile.fromData(Uint8List.fromList(bytes),
+      mimeType: mimeType, name: 'output.$fileExtension');
+  await file.saveTo(result.path);
+}
 
 Future<void> exportSvg(BuildContext context, String data) =>
     exportFile(context, data.codeUnits, 'svg', 'image/svg');
diff --git a/app/lib/api/save_data_html.dart b/app/lib/api/save_data_html.dart
deleted file mode 100644
index e30916e08e24..000000000000
--- a/app/lib/api/save_data_html.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// ignore_for_file: avoid_web_libraries_in_flutter
-
-import 'dart:html';
-
-import 'package:flutter/material.dart';
-
-void exportFile(
-  BuildContext context,
-  List<int> bytes,
-  String fileExtension,
-  String mimeType,
-) {
-  final a = document.createElement('a') as AnchorElement;
-  // Create data URL for zip
-  final blob = Blob([bytes], mimeType);
-  final url = Url.createObjectUrl(blob);
-  a.href = url;
-  a.download = 'export.$fileExtension';
-  a.click();
-}
diff --git a/app/lib/api/save_data_io.dart b/app/lib/api/save_data_io.dart
deleted file mode 100644
index bc480e5f02c6..000000000000
--- a/app/lib/api/save_data_io.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-import 'dart:io';
-
-import 'package:file_picker/file_picker.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:path_provider/path_provider.dart';
-import 'package:share_plus/share_plus.dart';
-
-Future<void> exportFile(
-  BuildContext context,
-  List<int> bytes,
-  String fileExtension,
-  String mimeType,
-) async {
-  if (Platform.isAndroid) {
-    final tempDir = await getTemporaryDirectory();
-    final tempPath = tempDir.path;
-    final tempFile = File('$tempPath/export.$fileExtension');
-    await tempFile.writeAsBytes(bytes);
-    await Share.shareXFiles([XFile(tempFile.path)]);
-    return;
-  }
-  final loc = AppLocalizations.of(context);
-  var fileName = await FilePicker.platform.saveFile(
-    fileName: 'export.$fileExtension',
-    type: FileType.custom,
-    allowedExtensions: [fileExtension],
-    dialogTitle: loc.export,
-  );
-
-  if (fileName == null) {
-    return;
-  }
-  if (!fileName.endsWith('.$fileExtension')) {
-    fileName += '.$fileExtension';
-  }
-  var file = File(fileName);
-  if (file.existsSync() && context.mounted) {
-    final result = await showDialog<bool>(
-        context: context,
-        builder: (context) => AlertDialog(
-              title: Text(loc.areYouSure),
-              content: Text(loc.existOverride),
-              actions: [
-                TextButton(
-                    child: Text(loc.no),
-                    onPressed: () => Navigator.of(context).pop(false)),
-                ElevatedButton(
-                    child: Text(loc.yes),
-                    onPressed: () async {
-                      Navigator.of(context).pop(true);
-                    })
-              ],
-            ));
-    if (result != true) {
-      return;
-    }
-  }
-  await file.writeAsBytes(bytes);
-}
diff --git a/app/lib/api/save_data_stub.dart b/app/lib/api/save_data_stub.dart
deleted file mode 100644
index eb8fd9ca4606..000000000000
--- a/app/lib/api/save_data_stub.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-import 'dart:async';
-
-import 'package:flutter/material.dart';
-
-FutureOr<void> exportFile(
-  BuildContext context,
-  List<int> bytes,
-  String fileExtension,
-  String mimeType,
-) {}
diff --git a/app/lib/dialogs/background/dialog.dart b/app/lib/dialogs/background/dialog.dart
index 5ec2b172f743..4dabf6486937 100644
--- a/app/lib/dialogs/background/dialog.dart
+++ b/app/lib/dialogs/background/dialog.dart
@@ -1,4 +1,3 @@
-import 'dart:io';
 import 'dart:ui' as ui;
 
 import 'package:butterfly/api/open.dart';
@@ -6,8 +5,6 @@ import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly/dialogs/texture.dart';
 import 'package:butterfly/visualizer/preset.dart';
 import 'package:butterfly_api/butterfly_api.dart';
-import 'package:file_picker/file_picker.dart';
-import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
diff --git a/app/lib/dialogs/background/general.dart b/app/lib/dialogs/background/general.dart
index 8cf8015b2614..43417f3590f6 100644
--- a/app/lib/dialogs/background/general.dart
+++ b/app/lib/dialogs/background/general.dart
@@ -49,16 +49,13 @@ class _GeneralBackgroundPropertiesView extends StatelessWidget {
               onTap: () async {
                 final state = context.read<DocumentBloc>().state;
                 if (state is! DocumentLoaded) return;
-                final files = await FilePicker.platform.pickFiles(
-                    type: FileType.image, allowMultiple: false, withData: true);
-                if (files?.files.isEmpty ?? true) return;
-                final e = files!.files.first;
-                var content = e.bytes ?? Uint8List(0);
-                if (!kIsWeb) {
-                  content = await File(e.path ?? '').readAsBytes();
-                }
-                final dataPath = Uri.dataFromBytes(content).toString();
-                final codec = await ui.instantiateImageCodec(content);
+                final (result, _) = await importFile(
+                  context,
+                  [AssetFileType.image],
+                );
+                if (result == null) return;
+                final dataPath = Uri.dataFromBytes(result).toString();
+                final codec = await ui.instantiateImageCodec(result);
                 final frame = await codec.getNextFrame();
                 final image = frame.image;
                 final width = image.width.toDouble(),
diff --git a/app/lib/dialogs/collaboration/dialog.dart b/app/lib/dialogs/collaboration/dialog.dart
index 5b03711546e9..a625155d166a 100644
--- a/app/lib/dialogs/collaboration/dialog.dart
+++ b/app/lib/dialogs/collaboration/dialog.dart
@@ -1,4 +1,4 @@
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly/cubits/current_index.dart';
 import 'package:butterfly/services/network.dart';
diff --git a/app/lib/dialogs/export/image.dart b/app/lib/dialogs/export/image.dart
index 8e75d3b3a86e..72f797afb68d 100644
--- a/app/lib/dialogs/export/image.dart
+++ b/app/lib/dialogs/export/image.dart
@@ -1,6 +1,6 @@
 import 'dart:ui' as ui;
 
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly_api/butterfly_api.dart';
 import 'package:flutter/foundation.dart';
diff --git a/app/lib/dialogs/export/svg.dart b/app/lib/dialogs/export/svg.dart
index 85c34e0c2576..89170b3a83a3 100644
--- a/app/lib/dialogs/export/svg.dart
+++ b/app/lib/dialogs/export/svg.dart
@@ -9,7 +9,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:material_leap/material_leap.dart';
 import 'package:phosphor_flutter/phosphor_flutter.dart';
 
-import '../../api/save_data.dart';
+import '../../api/save.dart';
 
 class SvgExportDialog extends StatefulWidget {
   final double x, y;
diff --git a/app/lib/dialogs/packs/color_pick.dart b/app/lib/dialogs/packs/color_pick.dart
index c7b6ff8167f0..6744a3295212 100644
--- a/app/lib/dialogs/packs/color_pick.dart
+++ b/app/lib/dialogs/packs/color_pick.dart
@@ -1,4 +1,4 @@
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly_api/butterfly_api.dart';
 import 'package:collection/collection.dart';
diff --git a/app/lib/dialogs/packs/dialog.dart b/app/lib/dialogs/packs/dialog.dart
index b4c63c23001e..d424ccc72ed5 100644
--- a/app/lib/dialogs/packs/dialog.dart
+++ b/app/lib/dialogs/packs/dialog.dart
@@ -10,7 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:material_leap/material_leap.dart';
 import 'package:phosphor_flutter/phosphor_flutter.dart';
 
-import '../../api/save_data.dart';
+import '../../api/save.dart';
 import '../../widgets/remote_button.dart';
 import 'pack.dart';
 
@@ -337,7 +337,8 @@ class _PacksDialogState extends State<PacksDialog>
                                   PhosphorIconsLight.arrowSquareIn),
                               onTap: () async {
                                 Navigator.of(ctx).pop();
-                                final (data, _) = await openSupported(['bfly']);
+                                final (data, _) = await importFile(
+                                    context, [AssetFileType.note]);
                                 if (data == null) return;
                                 final pack = NoteData.fromData(data);
                                 final metadata = pack.getMetadata();
diff --git a/app/lib/handlers/asset.dart b/app/lib/handlers/asset.dart
index cd0341b49ca0..00e37dbb3f78 100644
--- a/app/lib/handlers/asset.dart
+++ b/app/lib/handlers/asset.dart
@@ -28,34 +28,17 @@ Future<void> showImportAssetWizard(ImportType type, BuildContext context,
         position: position, advanced: advanced);
   }
 
-  Future<void> importWithDialog(
-    AssetFileType assetType, {
-    FileType type = FileType.any,
-    List<String>? allowedExtensions,
-  }) async {
-    final files = await FilePicker.platform.pickFiles(
-      type: type,
-      allowedExtensions: allowedExtensions,
-      allowMultiple: false,
-      withData: true,
-    );
-    if (files?.files.isEmpty ?? true) return;
-    final e = files!.files.first;
-    var content = e.bytes ?? Uint8List(0);
-    if (!kIsWeb) {
-      content = await File(e.path ?? '').readAsBytes();
-    }
-    return importAsset(assetType, content);
+  Future<void> importWithDialog(AssetFileType type) async {
+    final (result, _) = await importFile(context, [type]);
+    if (result == null) return;
+    return importAsset(type, result);
   }
 
   if (!type.isAvailable()) return;
 
   switch (type) {
     case ImportType.image:
-      return importWithDialog(
-        AssetFileType.image,
-        type: FileType.image,
-      );
+      return importWithDialog(AssetFileType.image);
     case ImportType.camera:
       final content = await showDialog<Uint8List>(
         context: context,
@@ -64,34 +47,14 @@ Future<void> showImportAssetWizard(ImportType type, BuildContext context,
       if (content == null) return;
       return importAsset(AssetFileType.image, content);
     case ImportType.svg:
-      return importWithDialog(
-        AssetFileType.svg,
-        type: FileType.custom,
-        allowedExtensions: ['svg'],
-      );
+      return importWithDialog(AssetFileType.svg);
     case ImportType.pdf:
-      return importWithDialog(
-        AssetFileType.pdf,
-        type: FileType.custom,
-        allowedExtensions: ['pdf'],
-      );
+      return importWithDialog(AssetFileType.pdf);
     case ImportType.document:
-      return importWithDialog(
-        AssetFileType.note,
-        type: FileType.custom,
-        allowedExtensions: ['bfly'],
-      );
+      return importWithDialog(AssetFileType.note);
     case ImportType.markdown:
-      return importWithDialog(
-        AssetFileType.markdown,
-        type: FileType.custom,
-        allowedExtensions: ['md', 'markdown'],
-      );
+      return importWithDialog(AssetFileType.markdown);
     case ImportType.xopp:
-      return importWithDialog(
-        AssetFileType.xopp,
-        type: FileType.custom,
-        allowedExtensions: ['xopp'],
-      );
+      return importWithDialog(AssetFileType.xopp);
   }
 }
diff --git a/app/lib/handlers/handler.dart b/app/lib/handlers/handler.dart
index 0da48b4b5ee6..1c6b7364e8ce 100644
--- a/app/lib/handlers/handler.dart
+++ b/app/lib/handlers/handler.dart
@@ -1,9 +1,9 @@
 import 'dart:async';
 import 'dart:convert';
-import 'dart:io';
 import 'dart:math';
 
 import 'package:animations/animations.dart';
+import 'package:butterfly/api/open.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/cubits/transform.dart';
@@ -19,7 +19,6 @@ import 'package:butterfly/visualizer/tool.dart';
 import 'package:butterfly_api/butterfly_api.dart';
 import 'package:butterfly_api/butterfly_text.dart' as text;
 import 'package:collection/collection.dart';
-import 'package:file_picker/file_picker.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
@@ -34,7 +33,7 @@ import 'package:share_plus/share_plus.dart';
 
 import '../actions/paste.dart';
 import '../actions/select.dart';
-import '../api/save_data.dart';
+import '../api/save.dart';
 import '../cubits/current_index.dart';
 import '../dialogs/import/camera.dart';
 import '../dialogs/name.dart';
diff --git a/app/lib/services/export.dart b/app/lib/services/export.dart
index 5d4787bb32e9..eebfc7ab79f7 100644
--- a/app/lib/services/export.dart
+++ b/app/lib/services/export.dart
@@ -1,4 +1,4 @@
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly/cubits/current_index.dart';
 import 'package:butterfly/helpers/element.dart';
diff --git a/app/lib/services/import.dart b/app/lib/services/import.dart
index a86b3d7b9e97..d0fb6aeb3bc2 100644
--- a/app/lib/services/import.dart
+++ b/app/lib/services/import.dart
@@ -21,7 +21,7 @@ import 'package:pdf/pdf.dart';
 import 'package:printing/printing.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
-import '../api/save_data.dart';
+import '../api/save.dart';
 import '../cubits/current_index.dart';
 import '../cubits/settings.dart';
 import '../dialogs/error.dart';
diff --git a/app/lib/settings/connections.dart b/app/lib/settings/connections.dart
index 710e056cbb11..b10dc3b8eb0f 100644
--- a/app/lib/settings/connections.dart
+++ b/app/lib/settings/connections.dart
@@ -5,7 +5,7 @@ import 'dart:ui';
 import 'package:butterfly/api/open.dart';
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/widgets/window.dart';
-import 'package:file_picker/file_picker.dart';
+import 'package:file_selector/file_selector.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -441,8 +441,7 @@ class __AddRemoteDialogState extends State<_AddRemoteDialog> {
                         icon: const PhosphorIcon(PhosphorIconsLight.folder),
                         onPick: shouldShowPicker
                             ? () async {
-                                final result = await FilePicker.platform
-                                    .getDirectoryPath();
+                                final result = await getDirectoryPath();
                                 if (result != null) {
                                   _directoryController.text = result;
                                 }
@@ -504,9 +503,8 @@ class __AddRemoteDialogState extends State<_AddRemoteDialog> {
                                         PhosphorIconsLight.file),
                                     onPick: _directoryController.text.isEmpty
                                         ? () async {
-                                            final result = await FilePicker
-                                                .platform
-                                                .getDirectoryPath();
+                                            final result =
+                                                await getDirectoryPath();
                                             if (result != null) {
                                               _documentsDirectoryController
                                                   .text = result;
@@ -523,9 +521,8 @@ class __AddRemoteDialogState extends State<_AddRemoteDialog> {
                                         PhosphorIconsLight.fileDashed),
                                     onPick: _directoryController.text.isEmpty
                                         ? () async {
-                                            final result = await FilePicker
-                                                .platform
-                                                .getDirectoryPath();
+                                            final result =
+                                                await getDirectoryPath();
                                             if (result != null) {
                                               _templatesDirectoryController
                                                   .text = result;
@@ -542,9 +539,8 @@ class __AddRemoteDialogState extends State<_AddRemoteDialog> {
                                         PhosphorIconsLight.package),
                                     onPick: _directoryController.text.isEmpty
                                         ? () async {
-                                            final result = await FilePicker
-                                                .platform
-                                                .getDirectoryPath();
+                                            final result =
+                                                await getDirectoryPath();
                                             if (result != null) {
                                               _documentsDirectoryController
                                                   .text = result;
diff --git a/app/lib/settings/data.dart b/app/lib/settings/data.dart
index 7443cc690192..f644bba43967 100644
--- a/app/lib/settings/data.dart
+++ b/app/lib/settings/data.dart
@@ -1,12 +1,12 @@
 import 'package:archive/archive.dart';
 import 'package:butterfly/api/file_system/file_system_io.dart';
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/bloc/document_bloc.dart';
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/dialogs/template.dart';
 import 'package:butterfly/visualizer/sync.dart';
 import 'package:butterfly/widgets/window.dart';
-import 'package:file_picker/file_picker.dart';
+import 'package:file_selector/file_selector.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -78,8 +78,7 @@ class _DataSettingsPageState extends State<DataSettingsPage> {
                             onTap: () async {
                               final settingsCubit =
                                   context.read<SettingsCubit>();
-                              final selectedDir =
-                                  await FilePicker.platform.getDirectoryPath();
+                              final selectedDir = await getDirectoryPath();
                               if (selectedDir != null) {
                                 _changePath(settingsCubit, selectedDir);
                               }
diff --git a/app/lib/settings/experiments.dart b/app/lib/settings/experiments.dart
index 356ec06fbf35..74a2af637794 100644
--- a/app/lib/settings/experiments.dart
+++ b/app/lib/settings/experiments.dart
@@ -3,7 +3,7 @@ import 'dart:ui';
 
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/widgets/window.dart';
-import 'package:file_picker/file_picker.dart';
+import 'package:file_selector/file_selector.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -311,8 +311,7 @@ class __AddRemoteDialogState extends State<_AddRemoteDialog> {
                     onTap: _isRemote
                         ? null
                         : () async {
-                            final result =
-                                await FilePicker.platform.getDirectoryPath();
+                            final result = await getDirectoryPath();
                             if (result != null) {
                               _directoryController.text = result;
                             }
diff --git a/app/lib/settings/general.dart b/app/lib/settings/general.dart
index 38e1345574c9..a1922f0f3718 100644
--- a/app/lib/settings/general.dart
+++ b/app/lib/settings/general.dart
@@ -1,6 +1,7 @@
 import 'dart:convert';
 
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/open.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:package_info_plus/package_info_plus.dart';
@@ -9,7 +10,6 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:url_launcher/url_launcher.dart';
 import 'package:http/http.dart' as http;
 
-import '../api/open_release_notes.dart';
 import '../widgets/window.dart';
 
 @immutable
diff --git a/app/lib/views/files/grid.dart b/app/lib/views/files/grid.dart
index 0d8257bc4005..aee95de9f34e 100644
--- a/app/lib/views/files/grid.dart
+++ b/app/lib/views/files/grid.dart
@@ -2,7 +2,7 @@ import 'dart:typed_data';
 
 import 'package:butterfly/api/file_system/file_system.dart';
 import 'package:butterfly/api/file_system/file_system_remote.dart';
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/services/sync.dart';
 import 'package:butterfly/visualizer/sync.dart';
diff --git a/app/lib/views/files/list.dart b/app/lib/views/files/list.dart
index c942ccde7e38..6a9d3e459c56 100644
--- a/app/lib/views/files/list.dart
+++ b/app/lib/views/files/list.dart
@@ -2,7 +2,7 @@ import 'dart:typed_data';
 
 import 'package:butterfly/api/file_system/file_system.dart';
 import 'package:butterfly/api/file_system/file_system_remote.dart';
-import 'package:butterfly/api/save_data.dart';
+import 'package:butterfly/api/save.dart';
 import 'package:butterfly/cubits/settings.dart';
 import 'package:butterfly/dialogs/file_system/move.dart';
 import 'package:butterfly/services/sync.dart';
diff --git a/app/lib/views/files/view.dart b/app/lib/views/files/view.dart
index 6aff5e07064f..acf54242022a 100644
--- a/app/lib/views/files/view.dart
+++ b/app/lib/views/files/view.dart
@@ -307,7 +307,7 @@ class FilesViewState extends State<FilesView> {
                     onPressed: () async {
                       final router = GoRouter.of(context);
                       final importService = context.read<ImportService>();
-                      final (result, extension) = await openSupported();
+                      final (result, extension) = await importFile(context);
                       if (result == null) return;
                       final model = await importService.import(
                           AssetFileTypeHelper.fromFileExtension(extension) ??
diff --git a/app/lib/views/home.dart b/app/lib/views/home.dart
index a9510b0f14f1..c59d9d02cf6a 100644
--- a/app/lib/views/home.dart
+++ b/app/lib/views/home.dart
@@ -11,7 +11,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:phosphor_flutter/phosphor_flutter.dart';
 
-import '../api/open_release_notes.dart';
 import '../main.dart';
 import 'files/view.dart';
 
diff --git a/app/lib/visualizer/asset.dart b/app/lib/visualizer/asset.dart
index 99dcdb04e520..5f70fe9f9abe 100644
--- a/app/lib/visualizer/asset.dart
+++ b/app/lib/visualizer/asset.dart
@@ -8,16 +8,22 @@ extension AssetFileTypeVisualizer on AssetFileType? {
   String getLocalizedName(BuildContext context) => switch (this) {
         AssetFileType.note => AppLocalizations.of(context).note,
         AssetFileType.image => AppLocalizations.of(context).image,
+        AssetFileType.markdown => AppLocalizations.of(context).markdown,
         AssetFileType.pdf => AppLocalizations.of(context).pdf,
         AssetFileType.svg => AppLocalizations.of(context).svg,
-        _ => ''
+        AssetFileType.xopp => 'Xopp',
+        AssetFileType.page => AppLocalizations.of(context).page,
+        null => AppLocalizations.of(context).unknownImportType,
       };
 
   IconGetter get icon => switch (this) {
         AssetFileType.note => PhosphorIcons.fileText,
         AssetFileType.image => PhosphorIcons.image,
+        AssetFileType.markdown => PhosphorIcons.textbox,
         AssetFileType.pdf => PhosphorIcons.filePdf,
         AssetFileType.svg => PhosphorIcons.fileSvg,
+        AssetFileType.xopp => PhosphorIcons.notebook,
+        AssetFileType.page => PhosphorIcons.book,
         _ => PhosphorIcons.file,
       };
 }
diff --git a/app/linux/flutter/generated_plugin_registrant.cc b/app/linux/flutter/generated_plugin_registrant.cc
index e80c636eafc0..dae3affd1dcf 100644
--- a/app/linux/flutter/generated_plugin_registrant.cc
+++ b/app/linux/flutter/generated_plugin_registrant.cc
@@ -7,6 +7,7 @@
 #include "generated_plugin_registrant.h"
 
 #include <dynamic_color/dynamic_color_plugin.h>
+#include <file_selector_linux/file_selector_plugin.h>
 #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
 #include <printing/printing_plugin.h>
 #include <screen_retriever/screen_retriever_plugin.h>
@@ -17,6 +18,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
   g_autoptr(FlPluginRegistrar) dynamic_color_registrar =
       fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin");
   dynamic_color_plugin_register_with_registrar(dynamic_color_registrar);
+  g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
+      fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
+  file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
   g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
       fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
   flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);
diff --git a/app/linux/flutter/generated_plugins.cmake b/app/linux/flutter/generated_plugins.cmake
index 9925abdf5358..084207c21755 100644
--- a/app/linux/flutter/generated_plugins.cmake
+++ b/app/linux/flutter/generated_plugins.cmake
@@ -4,6 +4,7 @@
 
 list(APPEND FLUTTER_PLUGIN_LIST
   dynamic_color
+  file_selector_linux
   flutter_secure_storage_linux
   printing
   screen_retriever
diff --git a/app/macos/Flutter/GeneratedPluginRegistrant.swift b/app/macos/Flutter/GeneratedPluginRegistrant.swift
index 529e9b201682..fd6284a3ad1d 100644
--- a/app/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/app/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -8,6 +8,7 @@ import Foundation
 import connectivity_plus
 import device_info_plus
 import dynamic_color
+import file_selector_macos
 import flutter_secure_storage_macos
 import package_info_plus
 import path_provider_foundation
@@ -22,6 +23,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
   ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
   DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
   DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
+  FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
   FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
   FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
diff --git a/app/macos/Runner/DebugProfile.entitlements b/app/macos/Runner/DebugProfile.entitlements
index dddb8a30c851..cff5a4b38187 100644
--- a/app/macos/Runner/DebugProfile.entitlements
+++ b/app/macos/Runner/DebugProfile.entitlements
@@ -8,5 +8,9 @@
 	<true/>
 	<key>com.apple.security.network.server</key>
 	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+	<key>com.apple.security.files.user-selected.read-write</key>
+	<true/>
 </dict>
 </plist>
diff --git a/app/macos/Runner/Release.entitlements b/app/macos/Runner/Release.entitlements
index 852fa1a4728a..f8228442ee09 100644
--- a/app/macos/Runner/Release.entitlements
+++ b/app/macos/Runner/Release.entitlements
@@ -4,5 +4,11 @@
 <dict>
 	<key>com.apple.security.app-sandbox</key>
 	<true/>
+	<key>com.apple.security.network.server</key>
+	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+	<key>com.apple.security.files.user-selected.read-write</key>
+	<true/>
 </dict>
 </plist>
diff --git a/app/pubspec.lock b/app/pubspec.lock
index 443d63a2c248..a4a19b362e2a 100644
--- a/app/pubspec.lock
+++ b/app/pubspec.lock
@@ -349,10 +349,10 @@ packages:
     dependency: "direct main"
     description:
       name: dynamic_color
-      sha256: "8b8bd1d798bd393e11eddeaa8ae95b12ff028bf7d5998fc5d003488cd5f4ce2f"
+      sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b
       url: "https://pub.dev"
     source: hosted
-    version: "1.6.8"
+    version: "1.6.9"
   equatable:
     dependency: "direct main"
     description:
@@ -393,14 +393,70 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "6.1.4"
-  file_picker:
+  file_selector:
     dependency: "direct main"
     description:
-      name: file_picker
-      sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6"
+      name: file_selector
+      sha256: "84eaf3e034d647859167d1f01cfe7b6352488f34c1b4932635012b202014c25b"
       url: "https://pub.dev"
     source: hosted
-    version: "6.1.1"
+    version: "1.0.1"
+  file_selector_android:
+    dependency: transitive
+    description:
+      name: file_selector_android
+      sha256: b7556052dbcc25ef88f6eba45ab98aa5600382af8dfdabc9d644a93d97b7be7f
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.5.0+4"
+  file_selector_ios:
+    dependency: transitive
+    description:
+      name: file_selector_ios
+      sha256: "2f48db7e338b2255101c35c604b7ca5ab588dce032db7fc418a2fe5f28da63f8"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.5.1+7"
+  file_selector_linux:
+    dependency: transitive
+    description:
+      name: file_selector_linux
+      sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.2+1"
+  file_selector_macos:
+    dependency: transitive
+    description:
+      name: file_selector_macos
+      sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.3+3"
+  file_selector_platform_interface:
+    dependency: transitive
+    description:
+      name: file_selector_platform_interface
+      sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.6.1"
+  file_selector_web:
+    dependency: transitive
+    description:
+      name: file_selector_web
+      sha256: c0f025d460de3301b7bbbf837fc8d0759df85f182c635f1dd94934b4cdc92352
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.3"
+  file_selector_windows:
+    dependency: transitive
+    description:
+      name: file_selector_windows
+      sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.9.3+1"
   fixnum:
     dependency: transitive
     description:
diff --git a/app/pubspec.yaml b/app/pubspec.yaml
index e4b618224698..1a396b77b824 100644
--- a/app/pubspec.yaml
+++ b/app/pubspec.yaml
@@ -31,7 +31,7 @@ dependencies:
   path_provider: ^2.1.1
   shared_preferences: ^2.2.2
   url_launcher: ^6.2.2
-  file_picker: ^6.1.1
+  file_selector: ^1.0.1
   phosphor_flutter:
     git:
       url: https://github.com/CodeDoctorDE/phosphor-flutter
@@ -88,7 +88,7 @@ dependencies:
       ref: 75b5ec0e51096ae169df3cd4f02c9f6affe22a81
       path: packages/networker/networker_socket
   flutter_localized_locales: ^2.0.5
-  dynamic_color: ^1.6.8
+  dynamic_color: ^1.6.9
   popover: ^0.2.9
   markdown: ^7.1.1
   device_info_plus: ^9.1.1
diff --git a/app/windows/flutter/generated_plugin_registrant.cc b/app/windows/flutter/generated_plugin_registrant.cc
index e157118c86c4..d840abff33b4 100644
--- a/app/windows/flutter/generated_plugin_registrant.cc
+++ b/app/windows/flutter/generated_plugin_registrant.cc
@@ -9,6 +9,7 @@
 #include <camera_windows/camera_windows.h>
 #include <connectivity_plus/connectivity_plus_windows_plugin.h>
 #include <dynamic_color/dynamic_color_plugin_c_api.h>
+#include <file_selector_windows/file_selector_windows.h>
 #include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
 #include <printing/printing_plugin.h>
 #include <screen_retriever/screen_retriever_plugin.h>
@@ -23,6 +24,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
       registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
   DynamicColorPluginCApiRegisterWithRegistrar(
       registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
+  FileSelectorWindowsRegisterWithRegistrar(
+      registry->GetRegistrarForPlugin("FileSelectorWindows"));
   FlutterSecureStorageWindowsPluginRegisterWithRegistrar(
       registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
   PrintingPluginRegisterWithRegistrar(
diff --git a/app/windows/flutter/generated_plugins.cmake b/app/windows/flutter/generated_plugins.cmake
index 3912d8492798..b7e739e743d4 100644
--- a/app/windows/flutter/generated_plugins.cmake
+++ b/app/windows/flutter/generated_plugins.cmake
@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
   camera_windows
   connectivity_plus
   dynamic_color
+  file_selector_windows
   flutter_secure_storage_windows
   printing
   screen_retriever
diff --git a/docs/package.json b/docs/package.json
index a007264ec163..3c5f14d3c651 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -24,11 +24,11 @@
     "@docusaurus/preset-classic": "3.0.1",
     "@docusaurus/theme-common": "3.0.1",
     "@mdx-js/react": "^3.0.0",
-    "@swc/core": "^1.3.100",
+    "@swc/core": "^1.3.101",
     "animate.css": "^4.1.1",
     "clsx": "^2.0.0",
     "node-fetch": "^3.3.2",
-    "prism-react-renderer": "^2.3.0",
+    "prism-react-renderer": "^2.3.1",
     "react": "^18.2.0",
     "react-animation-on-scroll": "^5.1.0",
     "react-dom": "^18.2.0",
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
index a2054930eab3..80e1cde17655 100644
--- a/docs/pnpm-lock.yaml
+++ b/docs/pnpm-lock.yaml
@@ -7,28 +7,28 @@ settings:
 dependencies:
   '@docusaurus/core':
     specifier: 3.0.1
-    version: 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+    version: 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
   '@docusaurus/plugin-client-redirects':
     specifier: 3.0.1
-    version: 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+    version: 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
   '@docusaurus/plugin-content-docs':
     specifier: 3.0.1
-    version: 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+    version: 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
   '@docusaurus/plugin-pwa':
     specifier: 3.0.1
-    version: 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+    version: 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
   '@docusaurus/preset-classic':
     specifier: 3.0.1
-    version: 3.0.1(@algolia/client-search@4.22.0)(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3)
+    version: 3.0.1(@algolia/client-search@4.22.0)(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3)
   '@docusaurus/theme-common':
     specifier: 3.0.1
-    version: 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+    version: 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
   '@mdx-js/react':
     specifier: ^3.0.0
     version: 3.0.0(@types/react@18.2.45)(react@18.2.0)
   '@swc/core':
-    specifier: ^1.3.100
-    version: 1.3.100
+    specifier: ^1.3.101
+    version: 1.3.101
   animate.css:
     specifier: ^4.1.1
     version: 4.1.1
@@ -39,8 +39,8 @@ dependencies:
     specifier: ^3.3.2
     version: 3.3.2
   prism-react-renderer:
-    specifier: ^2.3.0
-    version: 2.3.0(react@18.2.0)
+    specifier: ^2.3.1
+    version: 2.3.1(react@18.2.0)
   react:
     specifier: ^18.2.0
     version: 18.2.0
@@ -52,7 +52,7 @@ dependencies:
     version: 18.2.0(react@18.2.0)
   swc-loader:
     specifier: ^0.2.3
-    version: 0.2.3(@swc/core@1.3.100)(webpack@5.89.0)
+    version: 0.2.3(@swc/core@1.3.101)(webpack@5.89.0)
   ua-parser-js:
     specifier: ^1.0.37
     version: 1.0.37
@@ -60,7 +60,7 @@ dependencies:
 devDependencies:
   '@docusaurus/module-type-aliases':
     specifier: 3.0.1
-    version: 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+    version: 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
   '@docusaurus/tsconfig':
     specifier: 3.0.1
     version: 3.0.1
@@ -72,7 +72,7 @@ devDependencies:
     version: 5.3.3
   webpack:
     specifier: ^5.89.0
-    version: 5.89.0(@swc/core@1.3.100)
+    version: 5.89.0(@swc/core@1.3.101)
 
 packages:
 
@@ -1496,14 +1496,14 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       core-js-pure: 3.34.0
-      regenerator-runtime: 0.14.0
+      regenerator-runtime: 0.14.1
     dev: false
 
   /@babel/runtime@7.23.6:
     resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      regenerator-runtime: 0.14.0
+      regenerator-runtime: 0.14.1
 
   /@babel/template@7.22.15:
     resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
@@ -1586,7 +1586,7 @@ packages:
       - '@algolia/client-search'
     dev: false
 
-  /@docusaurus/core@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/core@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-CXrLpOnW+dJdSv8M5FAJ3JBwXtL6mhUWxFA8aS0ozK6jBG/wgxERk5uvH28fCeFxOGbAT9v1e9dOMo1X2IEVhQ==}
     engines: {node: '>=18.0'}
     hasBin: true
@@ -1606,11 +1606,11 @@ packages:
       '@babel/traverse': 7.23.6
       '@docusaurus/cssnano-preset': 3.0.1
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
       '@docusaurus/react-loadable': 5.5.2(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@slorber/static-site-generator-webpack-plugin': 4.0.7
       '@svgr/webpack': 6.5.1
       autoprefixer: 10.4.16(postcss@8.4.32)
@@ -1636,7 +1636,7 @@ packages:
       fs-extra: 11.2.0
       html-minifier-terser: 7.2.0
       html-tags: 3.3.1
-      html-webpack-plugin: 5.5.4(webpack@5.89.0)
+      html-webpack-plugin: 5.6.0(webpack@5.89.0)
       leven: 3.1.0
       lodash: 4.17.21
       mini-css-extract-plugin: 2.7.6(webpack@5.89.0)
@@ -1656,11 +1656,11 @@ packages:
       semver: 7.5.4
       serve-handler: 6.1.5
       shelljs: 0.8.5
-      terser-webpack-plugin: 5.3.9(@swc/core@1.3.100)(webpack@5.89.0)
+      terser-webpack-plugin: 5.3.9(@swc/core@1.3.101)(webpack@5.89.0)
       tslib: 2.6.2
       update-notifier: 6.0.2
       url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0)
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
       webpack-bundle-analyzer: 4.10.1
       webpack-dev-server: 4.15.1(webpack@5.89.0)
       webpack-merge: 5.10.0
@@ -1668,6 +1668,7 @@ packages:
     transitivePeerDependencies:
       - '@docusaurus/types'
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1702,7 +1703,7 @@ packages:
       tslib: 2.6.2
     dev: false
 
-  /@docusaurus/mdx-loader@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0):
+  /@docusaurus/mdx-loader@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-ldnTmvnvlrONUq45oKESrpy+lXtbnTcTsFkOTIDswe5xx5iWJjt6eSa0f99ZaWlnm24mlojcIGoUWNCS53qVlQ==}
     engines: {node: '>=18.0'}
     peerDependencies:
@@ -1712,8 +1713,8 @@ packages:
       '@babel/parser': 7.23.6
       '@babel/traverse': 7.23.6
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@mdx-js/mdx': 3.0.0
       '@slorber/remark-comment': 1.0.0
       escape-html: 1.0.3
@@ -1736,7 +1737,7 @@ packages:
       unist-util-visit: 5.0.0
       url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0)
       vfile: 6.0.1
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - '@docusaurus/types'
       - '@swc/core'
@@ -1746,21 +1747,21 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/module-type-aliases@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0):
+  /@docusaurus/module-type-aliases@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-DEHpeqUDsLynl3AhQQiO7AbC7/z/lBra34jTcdYuvp9eGm01pfH1wTVq8YqWZq6Jyx0BgcVl/VJqtE9StRd9Ag==}
     peerDependencies:
       react: '*'
       react-dom: '*'
     dependencies:
       '@docusaurus/react-loadable': 5.5.2(react@18.2.0)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
       '@types/history': 4.7.11
       '@types/react': 18.2.45
       '@types/react-router-config': 5.0.11
       '@types/react-router-dom': 5.3.3
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
-      react-helmet-async: 2.0.3(react-dom@18.2.0)(react@18.2.0)
+      react-helmet-async: 2.0.4(react-dom@18.2.0)(react@18.2.0)
       react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0)
     transitivePeerDependencies:
       - '@swc/core'
@@ -1768,18 +1769,18 @@ packages:
       - uglify-js
       - webpack-cli
 
-  /@docusaurus/plugin-client-redirects@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-client-redirects@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-CoZapnHbV3j5jsHCa/zmKaa8+H+oagHBgg91dN5I8/3kFit/xtZPfRaznvDX49cHg2nSoV74B3VMAT+bvCmzFQ==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       eta: 2.2.0
       fs-extra: 11.2.0
       lodash: 4.17.21
@@ -1789,6 +1790,7 @@ packages:
     transitivePeerDependencies:
       - '@docusaurus/types'
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1805,20 +1807,20 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-content-blog@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-content-blog@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-cLOvtvAyaMQFLI8vm4j26svg3ktxMPSXpuUJ7EERKoGbfpJSsgtowNHcRsaBVmfuCsRSk1HZ/yHBsUkTmHFEsg==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       cheerio: 1.0.0-rc.12
       feed: 4.2.2
       fs-extra: 11.2.0
@@ -1830,9 +1832,10 @@ packages:
       tslib: 2.6.2
       unist-util-visit: 5.0.0
       utility-types: 3.10.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1849,20 +1852,20 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-content-docs@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-content-docs@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-dRfAOA5Ivo+sdzzJGXEu33yAtvGg8dlZkvt/NEJ7nwi1F2j4LEdsxtfX2GKeETB2fP6XoGNSQnFXqa2NYGrHFg==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@types/react-router-config': 5.0.11
       combine-promises: 1.2.0
       fs-extra: 11.2.0
@@ -1872,9 +1875,10 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
       utility-types: 3.10.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1891,25 +1895,26 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-content-pages@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-content-pages@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-oP7PoYizKAXyEttcvVzfX3OoBIXEmXTMzCdfmC4oSwjG4SPcJsRge3mmI6O8jcZBgUPjIzXD21bVGWEE1iu8gg==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       fs-extra: 11.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1926,16 +1931,16 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-debug@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-debug@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-09dxZMdATky4qdsZGzhzlUvvC+ilQ2hKbYF+wez+cM2mGo4qHbv8+qKXqxq0CQZyimwlAOWQLoSozIXU0g0i7g==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       fs-extra: 11.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -1943,6 +1948,7 @@ packages:
       tslib: 2.6.2
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1959,21 +1965,22 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-google-analytics@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-google-analytics@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-jwseSz1E+g9rXQwDdr0ZdYNjn8leZBnKPjjQhMBEiwDoenL3JYFcNW0+p0sWoVF/f2z5t7HkKA+cYObrUh18gg==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -1990,22 +1997,23 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-google-gtag@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-google-gtag@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-UFTDvXniAWrajsulKUJ1DB6qplui1BlKLQZjX4F7qS/qfJ+qkKqSkhJ/F4VuGQ2JYeZstYb+KaUzUzvaPK1aRQ==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@types/gtag.js': 0.0.12
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -2022,21 +2030,22 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-google-tag-manager@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-google-tag-manager@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-IPFvuz83aFuheZcWpTlAdiiX1RqWIHM+OH8wS66JgwAKOiQMR3+nLywGjkLV4bp52x7nCnwhNk1rE85Cpy/CIw==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -2053,7 +2062,7 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-pwa@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-pwa@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-KC9Axpw7NOB2RiW/28jq56Q8o6CLXo2pqo/b513g9WTqYkSCadm43inIEo7bSiyXaOTWvhW1f5H5jUEU4wM8LA==}
     engines: {node: '>=18.0'}
     peerDependencies:
@@ -2062,20 +2071,20 @@ packages:
     dependencies:
       '@babel/core': 7.23.6
       '@babel/preset-env': 7.23.6(@babel/core@7.23.6)
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/theme-translations': 3.0.1
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       babel-loader: 9.1.3(@babel/core@7.23.6)(webpack@5.89.0)
       clsx: 2.0.0
       core-js: 3.34.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
-      terser-webpack-plugin: 5.3.9(@swc/core@1.3.100)(webpack@5.89.0)
+      terser-webpack-plugin: 5.3.9(@swc/core@1.3.101)(webpack@5.89.0)
       tslib: 2.6.2
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
       webpack-merge: 5.10.0
       webpackbar: 5.0.2(webpack@5.89.0)
       workbox-build: 6.6.1
@@ -2083,6 +2092,7 @@ packages:
       workbox-window: 6.6.1
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - '@types/babel__core'
@@ -2100,19 +2110,19 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/plugin-sitemap@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/plugin-sitemap@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-xARiWnjtVvoEniZudlCq5T9ifnhCu/GAZ5nA7XgyLfPcNpHQa241HZdsTlLtVcecEVVdllevBKOp7qknBBaMGw==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       fs-extra: 11.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -2120,6 +2130,7 @@ packages:
       tslib: 2.6.2
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -2136,31 +2147,32 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/preset-classic@3.0.1(@algolia/client-search@4.22.0)(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3):
+  /@docusaurus/preset-classic@3.0.1(@algolia/client-search@4.22.0)(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3):
     resolution: {integrity: sha512-il9m9xZKKjoXn6h0cRcdnt6wce0Pv1y5t4xk2Wx7zBGhKG1idu4IFHtikHlD0QPuZ9fizpXspXcTzjL5FXc1Gw==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-debug': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-google-analytics': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-google-gtag': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-google-tag-manager': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-sitemap': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-classic': 3.0.1(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-search-algolia': 3.0.1(@algolia/client-search@4.22.0)(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3)
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-debug': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-google-analytics': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-google-gtag': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-google-tag-manager': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-sitemap': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-classic': 3.0.1(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-search-algolia': 3.0.1(@algolia/client-search@4.22.0)(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
     transitivePeerDependencies:
       - '@algolia/client-search'
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - '@types/react'
@@ -2188,25 +2200,25 @@ packages:
       prop-types: 15.8.1
       react: 18.2.0
 
-  /@docusaurus/theme-classic@3.0.1(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/theme-classic@3.0.1(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-XD1FRXaJiDlmYaiHHdm27PNhhPboUah9rqIH0lMpBt5kYtsGjJzhqa27KuZvHLzOP2OEpqd2+GZ5b6YPq7Q05Q==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/theme-translations': 3.0.1
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@mdx-js/react': 3.0.0(@types/react@18.2.45)(react@18.2.0)
       clsx: 2.0.0
       copy-text-to-clipboard: 3.2.0
@@ -2214,7 +2226,7 @@ packages:
       lodash: 4.17.21
       nprogress: 0.2.0
       postcss: 8.4.32
-      prism-react-renderer: 2.3.0(react@18.2.0)
+      prism-react-renderer: 2.3.1(react@18.2.0)
       prismjs: 1.29.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -2224,6 +2236,7 @@ packages:
       utility-types: 3.10.0
     transitivePeerDependencies:
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - '@types/react'
@@ -2241,26 +2254,26 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/theme-common@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
+  /@docusaurus/theme-common@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
     resolution: {integrity: sha512-cr9TOWXuIOL0PUfuXv6L5lPlTgaphKP+22NdVBOYah5jSq5XAAulJTjfe+IfLsEG4L7lJttLbhW7LXDFSAI7Ag==}
     engines: {node: '>=18.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
     dependencies:
-      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
-      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/mdx-loader': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/module-type-aliases': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/plugin-content-blog': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-pages': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       '@docusaurus/utils-common': 3.0.1(@docusaurus/types@3.0.1)
       '@types/history': 4.7.11
       '@types/react': 18.2.45
       '@types/react-router-config': 5.0.11
       clsx: 2.0.0
       parse-numeric-range: 1.3.0
-      prism-react-renderer: 2.3.0(react@18.2.0)
+      prism-react-renderer: 2.3.1(react@18.2.0)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
@@ -2268,6 +2281,7 @@ packages:
     transitivePeerDependencies:
       - '@docusaurus/types'
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - bufferutil
@@ -2284,7 +2298,7 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/theme-search-algolia@3.0.1(@algolia/client-search@4.22.0)(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3):
+  /@docusaurus/theme-search-algolia@3.0.1(@algolia/client-search@4.22.0)(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)(typescript@5.3.3):
     resolution: {integrity: sha512-DDiPc0/xmKSEdwFkXNf1/vH1SzJPzuJBar8kMcBbDAZk/SAmo/4lf6GU2drou4Ae60lN2waix+jYWTWcJRahSA==}
     engines: {node: '>=18.0'}
     peerDependencies:
@@ -2292,15 +2306,15 @@ packages:
       react-dom: ^18.0.0
     dependencies:
       '@docsearch/react': 3.5.2(@algolia/client-search@4.22.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)
-      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/core': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
-      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/plugin-content-docs': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
+      '@docusaurus/theme-common': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
       '@docusaurus/theme-translations': 3.0.1
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
-      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
+      '@docusaurus/utils-validation': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       algoliasearch: 4.22.0
-      algoliasearch-helper: 3.16.0(algoliasearch@4.22.0)
+      algoliasearch-helper: 3.16.1(algoliasearch@4.22.0)
       clsx: 2.0.0
       eta: 2.2.0
       fs-extra: 11.2.0
@@ -2313,6 +2327,7 @@ packages:
       - '@algolia/client-search'
       - '@docusaurus/types'
       - '@parcel/css'
+      - '@rspack/core'
       - '@swc/core'
       - '@swc/css'
       - '@types/react'
@@ -2343,7 +2358,7 @@ packages:
     resolution: {integrity: sha512-hT2HCdNE3pWTzXV/7cSsowfmaOxXVOTFOXmkqaYjBWjaxjJ3FO0nHbdJ8rF6Da7PvWmIPbUekdP5gep1XCJ7Vg==}
     dev: true
 
-  /@docusaurus/types@3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0):
+  /@docusaurus/types@3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0):
     resolution: {integrity: sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==}
     peerDependencies:
       react: ^18.0.0
@@ -2357,7 +2372,7 @@ packages:
       react-dom: 18.2.0(react@18.2.0)
       react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0)
       utility-types: 3.10.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
       webpack-merge: 5.10.0
     transitivePeerDependencies:
       - '@swc/core'
@@ -2374,16 +2389,16 @@ packages:
       '@docusaurus/types':
         optional: true
     dependencies:
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
       tslib: 2.6.2
     dev: false
 
-  /@docusaurus/utils-validation@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100):
+  /@docusaurus/utils-validation@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101):
     resolution: {integrity: sha512-ujTnqSfyGQ7/4iZdB4RRuHKY/Nwm58IIb+41s5tCXOv/MBU2wGAjOHq3U+AEyJ8aKQcHbxvTKJaRchNHYUVUQg==}
     engines: {node: '>=18.0'}
     dependencies:
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100)
+      '@docusaurus/utils': 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101)
       joi: 17.11.0
       js-yaml: 4.1.0
       tslib: 2.6.2
@@ -2396,7 +2411,7 @@ packages:
       - webpack-cli
     dev: false
 
-  /@docusaurus/utils@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.100):
+  /@docusaurus/utils@3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.101):
     resolution: {integrity: sha512-TwZ33Am0q4IIbvjhUOs+zpjtD/mXNmLmEgeTGuRq01QzulLHuPhaBTTAC/DHu6kFx3wDgmgpAlaRuCHfTcXv8g==}
     engines: {node: '>=18.0'}
     peerDependencies:
@@ -2406,7 +2421,7 @@ packages:
         optional: true
     dependencies:
       '@docusaurus/logger': 3.0.1
-      '@docusaurus/types': 3.0.1(@swc/core@1.3.100)(react-dom@18.2.0)(react@18.2.0)
+      '@docusaurus/types': 3.0.1(@swc/core@1.3.101)(react-dom@18.2.0)(react@18.2.0)
       '@svgr/webpack': 6.5.1
       escape-string-regexp: 4.0.0
       file-loader: 6.2.0(webpack@5.89.0)
@@ -2422,7 +2437,7 @@ packages:
       shelljs: 0.8.5
       tslib: 2.6.2
       url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0)
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - '@swc/core'
       - esbuild
@@ -2453,7 +2468,7 @@ packages:
       '@jest/schemas': 29.6.3
       '@types/istanbul-lib-coverage': 2.0.6
       '@types/istanbul-reports': 3.0.4
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       '@types/yargs': 17.0.32
       chalk: 4.1.2
     dev: false
@@ -2550,7 +2565,7 @@ packages:
     engines: {node: '>= 8'}
     dependencies:
       '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.15.0
+      fastq: 1.16.0
 
   /@pnpm/config.env-replace@1.1.0:
     resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
@@ -2840,80 +2855,88 @@ packages:
       - supports-color
     dev: false
 
-  /@swc/core-darwin-arm64@1.3.100:
-    resolution: {integrity: sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==}
+  /@swc/core-darwin-arm64@1.3.101:
+    resolution: {integrity: sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     optional: true
 
-  /@swc/core-darwin-x64@1.3.100:
-    resolution: {integrity: sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==}
+  /@swc/core-darwin-x64@1.3.101:
+    resolution: {integrity: sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-arm64-gnu@1.3.100:
-    resolution: {integrity: sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==}
+  /@swc/core-linux-arm-gnueabihf@1.3.101:
+    resolution: {integrity: sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw==}
+    engines: {node: '>=10'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    optional: true
+
+  /@swc/core-linux-arm64-gnu@1.3.101:
+    resolution: {integrity: sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-arm64-musl@1.3.100:
-    resolution: {integrity: sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==}
+  /@swc/core-linux-arm64-musl@1.3.101:
+    resolution: {integrity: sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-x64-gnu@1.3.100:
-    resolution: {integrity: sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==}
+  /@swc/core-linux-x64-gnu@1.3.101:
+    resolution: {integrity: sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@swc/core-linux-x64-musl@1.3.100:
-    resolution: {integrity: sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==}
+  /@swc/core-linux-x64-musl@1.3.101:
+    resolution: {integrity: sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-arm64-msvc@1.3.100:
-    resolution: {integrity: sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==}
+  /@swc/core-win32-arm64-msvc@1.3.101:
+    resolution: {integrity: sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-ia32-msvc@1.3.100:
-    resolution: {integrity: sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==}
+  /@swc/core-win32-ia32-msvc@1.3.101:
+    resolution: {integrity: sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA==}
     engines: {node: '>=10'}
     cpu: [ia32]
     os: [win32]
     requiresBuild: true
     optional: true
 
-  /@swc/core-win32-x64-msvc@1.3.100:
-    resolution: {integrity: sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ==}
+  /@swc/core-win32-x64-msvc@1.3.101:
+    resolution: {integrity: sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
     optional: true
 
-  /@swc/core@1.3.100:
-    resolution: {integrity: sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw==}
+  /@swc/core@1.3.101:
+    resolution: {integrity: sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A==}
     engines: {node: '>=10'}
     requiresBuild: true
     peerDependencies:
@@ -2925,15 +2948,16 @@ packages:
       '@swc/counter': 0.1.2
       '@swc/types': 0.1.5
     optionalDependencies:
-      '@swc/core-darwin-arm64': 1.3.100
-      '@swc/core-darwin-x64': 1.3.100
-      '@swc/core-linux-arm64-gnu': 1.3.100
-      '@swc/core-linux-arm64-musl': 1.3.100
-      '@swc/core-linux-x64-gnu': 1.3.100
-      '@swc/core-linux-x64-musl': 1.3.100
-      '@swc/core-win32-arm64-msvc': 1.3.100
-      '@swc/core-win32-ia32-msvc': 1.3.100
-      '@swc/core-win32-x64-msvc': 1.3.100
+      '@swc/core-darwin-arm64': 1.3.101
+      '@swc/core-darwin-x64': 1.3.101
+      '@swc/core-linux-arm-gnueabihf': 1.3.101
+      '@swc/core-linux-arm64-gnu': 1.3.101
+      '@swc/core-linux-arm64-musl': 1.3.101
+      '@swc/core-linux-x64-gnu': 1.3.101
+      '@swc/core-linux-x64-musl': 1.3.101
+      '@swc/core-win32-arm64-msvc': 1.3.101
+      '@swc/core-win32-ia32-msvc': 1.3.101
+      '@swc/core-win32-x64-msvc': 1.3.101
 
   /@swc/counter@0.1.2:
     resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==}
@@ -2963,26 +2987,26 @@ packages:
     resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
     dependencies:
       '@types/connect': 3.4.38
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/bonjour@3.5.13:
     resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/connect-history-api-fallback@1.5.4:
     resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
     dependencies:
       '@types/express-serve-static-core': 4.17.41
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/connect@3.4.38:
     resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/debug@4.1.12:
@@ -2994,11 +3018,11 @@ packages:
   /@types/eslint-scope@3.7.7:
     resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
     dependencies:
-      '@types/eslint': 8.44.9
+      '@types/eslint': 8.56.0
       '@types/estree': 1.0.5
 
-  /@types/eslint@8.44.9:
-    resolution: {integrity: sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==}
+  /@types/eslint@8.56.0:
+    resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==}
     dependencies:
       '@types/estree': 1.0.5
       '@types/json-schema': 7.0.15
@@ -3019,7 +3043,7 @@ packages:
   /@types/express-serve-static-core@4.17.41:
     resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       '@types/qs': 6.9.10
       '@types/range-parser': 1.2.7
       '@types/send': 0.17.4
@@ -3062,7 +3086,7 @@ packages:
   /@types/http-proxy@1.17.14:
     resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/istanbul-lib-coverage@2.0.6:
@@ -3109,15 +3133,15 @@ packages:
   /@types/node-forge@1.3.10:
     resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/node@17.0.45:
     resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
     dev: false
 
-  /@types/node@20.10.4:
-    resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==}
+  /@types/node@20.10.5:
+    resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==}
     dependencies:
       undici-types: 5.26.5
 
@@ -3170,7 +3194,7 @@ packages:
   /@types/resolve@1.17.1:
     resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/retry@0.12.0:
@@ -3190,7 +3214,7 @@ packages:
     resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
     dependencies:
       '@types/mime': 1.3.5
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/serve-index@1.9.4:
@@ -3204,13 +3228,13 @@ packages:
     dependencies:
       '@types/http-errors': 2.0.4
       '@types/mime': 3.0.4
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/sockjs@0.3.36:
     resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/trusted-types@2.0.7:
@@ -3228,7 +3252,7 @@ packages:
   /@types/ws@8.5.10:
     resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
     dev: false
 
   /@types/yargs-parser@21.0.3:
@@ -3432,8 +3456,8 @@ packages:
       uri-js: 4.4.1
     dev: false
 
-  /algoliasearch-helper@3.16.0(algoliasearch@4.22.0):
-    resolution: {integrity: sha512-RxOtBafSQwyqD5BLO/q9VsVw/zuNz8kjb51OZhCIWLr33uvKB+vrRis+QK+JFlNQXbXf+w28fsTWiBupc1pHew==}
+  /algoliasearch-helper@3.16.1(algoliasearch@4.22.0):
+    resolution: {integrity: sha512-qxAHVjjmT7USVvrM8q6gZGaJlCK1fl4APfdAA7o8O6iXEc68G0xMNrzRkxoB/HmhhvyHnoteS/iMTiHiTcQQcg==}
     peerDependencies:
       algoliasearch: '>= 3.1 < 6'
     dependencies:
@@ -3604,7 +3628,7 @@ packages:
       '@babel/core': 7.23.6
       find-cache-dir: 4.0.0
       schema-utils: 4.2.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /babel-plugin-dynamic-import-node@2.3.3:
@@ -3756,7 +3780,7 @@ packages:
     hasBin: true
     dependencies:
       caniuse-lite: 1.0.30001570
-      electron-to-chromium: 1.4.613
+      electron-to-chromium: 1.4.615
       node-releases: 2.0.14
       update-browserslist-db: 1.0.13(browserslist@4.22.2)
 
@@ -4145,7 +4169,7 @@ packages:
       normalize-path: 3.0.0
       schema-utils: 4.2.0
       serialize-javascript: 6.0.1
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /core-js-compat@3.34.0:
@@ -4250,7 +4274,7 @@ packages:
       postcss-modules-values: 4.0.0(postcss@8.4.32)
       postcss-value-parser: 4.2.0
       semver: 7.5.4
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.3)(webpack@5.89.0):
@@ -4285,7 +4309,7 @@ packages:
       schema-utils: 4.2.0
       serialize-javascript: 6.0.1
       source-map: 0.6.1
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /css-select@4.3.0:
@@ -4674,8 +4698,8 @@ packages:
       jake: 10.8.7
     dev: false
 
-  /electron-to-chromium@1.4.613:
-    resolution: {integrity: sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==}
+  /electron-to-chromium@1.4.615:
+    resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==}
 
   /emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -4922,7 +4946,7 @@ packages:
     resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
     engines: {node: '>= 0.8'}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       require-like: 0.1.2
     dev: false
 
@@ -5021,8 +5045,8 @@ packages:
       punycode: 1.4.1
     dev: false
 
-  /fastq@1.15.0:
-    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+  /fastq@1.16.0:
+    resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==}
     dependencies:
       reusify: 1.0.4
 
@@ -5062,7 +5086,7 @@ packages:
     dependencies:
       loader-utils: 2.0.4
       schema-utils: 3.3.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /filelist@1.0.4:
@@ -5176,7 +5200,7 @@ packages:
       semver: 7.5.4
       tapable: 1.1.3
       typescript: 5.3.3
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /form-data-encoder@2.1.4:
@@ -5680,18 +5704,24 @@ packages:
     resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
     dev: false
 
-  /html-webpack-plugin@5.5.4(webpack@5.89.0):
-    resolution: {integrity: sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==}
+  /html-webpack-plugin@5.6.0(webpack@5.89.0):
+    resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==}
     engines: {node: '>=10.13.0'}
     peerDependencies:
+      '@rspack/core': 0.x || 1.x
       webpack: ^5.20.0
+    peerDependenciesMeta:
+      '@rspack/core':
+        optional: true
+      webpack:
+        optional: true
     dependencies:
       '@types/html-minifier-terser': 6.1.0
       html-minifier-terser: 6.1.0
       lodash: 4.17.21
       pretty-error: 4.0.0
       tapable: 2.2.1
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /htmlparser2@6.1.0:
@@ -6204,7 +6234,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       chalk: 4.1.2
       ci-info: 3.9.0
       graceful-fs: 4.2.11
@@ -6215,7 +6245,7 @@ packages:
     resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
     engines: {node: '>= 10.13.0'}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       merge-stream: 2.0.0
       supports-color: 7.2.0
     dev: false
@@ -6224,7 +6254,7 @@ packages:
     resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
     engines: {node: '>= 10.13.0'}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       merge-stream: 2.0.0
       supports-color: 8.1.1
 
@@ -6232,7 +6262,7 @@ packages:
     resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@types/node': 20.10.4
+      '@types/node': 20.10.5
       jest-util: 29.7.0
       merge-stream: 2.0.0
       supports-color: 8.1.1
@@ -7217,7 +7247,7 @@ packages:
       webpack: ^5.0.0
     dependencies:
       schema-utils: 4.2.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /minimalistic-assert@1.0.1:
@@ -7241,8 +7271,8 @@ packages:
     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
     dev: false
 
-  /mrmime@1.0.1:
-    resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+  /mrmime@2.0.0:
+    resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
     engines: {node: '>=10'}
     dev: false
 
@@ -7742,7 +7772,7 @@ packages:
       jiti: 1.21.0
       postcss: 8.4.32
       semver: 7.5.4
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - typescript
     dev: false
@@ -8078,8 +8108,8 @@ packages:
     engines: {node: '>=4'}
     dev: false
 
-  /prism-react-renderer@2.3.0(react@18.2.0):
-    resolution: {integrity: sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==}
+  /prism-react-renderer@2.3.1(react@18.2.0):
+    resolution: {integrity: sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==}
     peerDependencies:
       react: '>=16.0.0'
     dependencies:
@@ -8243,7 +8273,7 @@ packages:
       strip-ansi: 6.0.1
       text-table: 0.2.0
       typescript: 5.3.3
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     transitivePeerDependencies:
       - eslint
       - supports-color
@@ -8280,8 +8310,8 @@ packages:
       react-fast-compare: 3.2.2
       shallowequal: 1.1.0
 
-  /react-helmet-async@2.0.3(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-7/X3ehSCbjCaIljWa39Bb7F1Y2JWM23FN80kLozx2TdgzUmxKDSLN6qu06NG0Srzm8ljGOjgk7r7CXeEOx4MPw==}
+  /react-helmet-async@2.0.4(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==}
     peerDependencies:
       react: ^16.6.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0
@@ -8313,7 +8343,7 @@ packages:
     dependencies:
       '@babel/runtime': 7.23.6
       react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0)
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /react-router-config@5.1.1(react-router@5.3.4)(react@18.2.0):
@@ -8422,8 +8452,8 @@ packages:
     resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
     dev: false
 
-  /regenerator-runtime@0.14.0:
-    resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+  /regenerator-runtime@0.14.1:
+    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
 
   /regenerator-transform@0.15.2:
     resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
@@ -8934,12 +8964,12 @@ packages:
     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
     dev: false
 
-  /sirv@2.0.3:
-    resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==}
+  /sirv@2.0.4:
+    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
     engines: {node: '>= 10'}
     dependencies:
       '@polka/url': 1.0.0-next.24
-      mrmime: 1.0.1
+      mrmime: 2.0.0
       totalist: 3.0.1
     dev: false
 
@@ -9278,14 +9308,14 @@ packages:
       stable: 0.1.8
     dev: false
 
-  /swc-loader@0.2.3(@swc/core@1.3.100)(webpack@5.89.0):
+  /swc-loader@0.2.3(@swc/core@1.3.101)(webpack@5.89.0):
     resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==}
     peerDependencies:
       '@swc/core': ^1.2.147
       webpack: '>=2'
     dependencies:
-      '@swc/core': 1.3.100
-      webpack: 5.89.0(@swc/core@1.3.100)
+      '@swc/core': 1.3.101
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /tapable@1.1.3:
@@ -9312,7 +9342,7 @@ packages:
       unique-string: 2.0.0
     dev: false
 
-  /terser-webpack-plugin@5.3.9(@swc/core@1.3.100)(webpack@5.89.0):
+  /terser-webpack-plugin@5.3.9(@swc/core@1.3.101)(webpack@5.89.0):
     resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==}
     engines: {node: '>= 10.13.0'}
     peerDependencies:
@@ -9329,12 +9359,12 @@ packages:
         optional: true
     dependencies:
       '@jridgewell/trace-mapping': 0.3.20
-      '@swc/core': 1.3.100
+      '@swc/core': 1.3.101
       jest-worker: 27.5.1
       schema-utils: 3.3.0
       serialize-javascript: 6.0.1
       terser: 5.26.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
 
   /terser@5.26.0:
     resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==}
@@ -9662,7 +9692,7 @@ packages:
       loader-utils: 2.0.4
       mime-types: 2.1.35
       schema-utils: 3.3.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /util-deprecate@1.0.2:
@@ -9760,7 +9790,7 @@ packages:
       is-plain-object: 5.0.0
       opener: 1.5.2
       picocolors: 1.0.0
-      sirv: 2.0.3
+      sirv: 2.0.4
       ws: 7.5.9
     transitivePeerDependencies:
       - bufferutil
@@ -9778,7 +9808,7 @@ packages:
       mime-types: 2.1.35
       range-parser: 1.2.1
       schema-utils: 4.2.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /webpack-dev-server@4.15.1(webpack@5.89.0):
@@ -9822,7 +9852,7 @@ packages:
       serve-index: 1.9.1
       sockjs: 0.3.24
       spdy: 4.0.2
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
       webpack-dev-middleware: 5.3.3(webpack@5.89.0)
       ws: 8.15.1
     transitivePeerDependencies:
@@ -9844,7 +9874,7 @@ packages:
     resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
     engines: {node: '>=10.13.0'}
 
-  /webpack@5.89.0(@swc/core@1.3.100):
+  /webpack@5.89.0(@swc/core@1.3.101):
     resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==}
     engines: {node: '>=10.13.0'}
     hasBin: true
@@ -9875,7 +9905,7 @@ packages:
       neo-async: 2.6.2
       schema-utils: 3.3.0
       tapable: 2.2.1
-      terser-webpack-plugin: 5.3.9(@swc/core@1.3.100)(webpack@5.89.0)
+      terser-webpack-plugin: 5.3.9(@swc/core@1.3.101)(webpack@5.89.0)
       watchpack: 2.4.0
       webpack-sources: 3.2.3
     transitivePeerDependencies:
@@ -9893,7 +9923,7 @@ packages:
       consola: 2.15.3
       pretty-time: 1.1.0
       std-env: 3.6.0
-      webpack: 5.89.0(@swc/core@1.3.100)
+      webpack: 5.89.0(@swc/core@1.3.101)
     dev: false
 
   /websocket-driver@0.7.4:
diff --git a/fastlane/metadata/android/en-US/changelogs/84.txt b/fastlane/metadata/android/en-US/changelogs/84.txt
index 4d2f534f5208..7fbd18d48c04 100644
--- a/fastlane/metadata/android/en-US/changelogs/84.txt
+++ b/fastlane/metadata/android/en-US/changelogs/84.txt
@@ -3,6 +3,7 @@
 * Change dropdown to modal bottom sheet for density personalisation setting
 * Improve responsiveness of dialogs on mobile devices ([#550](https://github.com/LinwoodDev/Butterfly/issues/550))
 * Improve add dialog trailing icon ([#550](https://github.com/LinwoodDev/Butterfly/issues/550))
+* Replace file picker package
 * Fix back button closes app on mobile ([#551](https://github.com/LinwoodDev/Butterfly/issues/551))
 * Fix default color when adding tools
 * Fix elements selection will be cleared after unfocusing