diff --git a/FLUTTER_VERSION b/FLUTTER_VERSION index e06d07a..e4fe76e 100644 --- a/FLUTTER_VERSION +++ b/FLUTTER_VERSION @@ -1 +1 @@ -3.10.0 \ No newline at end of file +3.10.3 \ No newline at end of file diff --git a/app/lib/api/open_release_notes.dart b/app/lib/api/open_release_notes.dart new file mode 100644 index 0000000..117f24b --- /dev/null +++ b/app/lib/api/open_release_notes.dart @@ -0,0 +1,10 @@ +import 'package:url_launcher/url_launcher.dart'; + +Future openReleaseNotes() { + return launchUrl( + Uri( + scheme: 'https', + host: 'go.linwood.dev', + pathSegments: ['qeck', '1.0']), + mode: LaunchMode.externalApplication); +} diff --git a/app/lib/api/settings.dart b/app/lib/api/settings.dart new file mode 100644 index 0000000..f38af01 --- /dev/null +++ b/app/lib/api/settings.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; + +import '../pages/settings/page.dart'; + +Future openSettings(BuildContext context) => showDialog( + context: context, + builder: (context) => Dialog( + clipBehavior: Clip.antiAlias, + child: ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 600, maxWidth: 800), + child: const SettingsPage(isDialog: true)))); diff --git a/app/lib/cubits/settings.dart b/app/lib/cubits/settings.dart index 5055ac0..dac3253 100644 --- a/app/lib/cubits/settings.dart +++ b/app/lib/cubits/settings.dart @@ -10,49 +10,60 @@ class QeckSettings with _$QeckSettings { const QeckSettings._(); const factory QeckSettings({ - @Default('') String locale, - @Default(ThemeMode.system) ThemeMode themeMode, - @Default(false) bool nativeTitleBar, + @Default('') String localeTag, + @Default(ThemeMode.system) ThemeMode theme, @Default('') String design, + @Default(false) bool nativeTitleBar, }) = _FlowSettings; + Locale? get locale { + if (localeTag.isEmpty) { + return null; + } + if (localeTag.contains('-')) { + return Locale(localeTag.split('-')[0], localeTag.split('-')[1]); + } + return Locale(localeTag); + } + factory QeckSettings.fromPrefs(SharedPreferences prefs) => QeckSettings( - themeMode: - ThemeMode.values.byName(prefs.getString('themeMode') ?? 'system'), + theme: ThemeMode.values.byName(prefs.getString('theme') ?? 'system'), design: prefs.getString('design') ?? '', nativeTitleBar: prefs.getBool('nativeTitleBar') ?? false, - locale: prefs.getString('locale') ?? '', + localeTag: prefs.getString('locale') ?? '', ); Future save() async { final prefs = await SharedPreferences.getInstance(); - prefs.setString('themeMode', themeMode.name); + prefs.setString('theme', theme.name); prefs.setString('design', design); prefs.setBool('nativeTitleBar', nativeTitleBar); - prefs.setString('locale', locale); + prefs.setString('locale', localeTag); } } class SettingsCubit extends Cubit { SettingsCubit(SharedPreferences prefs) : super(QeckSettings.fromPrefs(prefs)); - Future setThemeMode(ThemeMode mode) { - emit(state.copyWith(themeMode: mode)); - return state.save(); + Future changeTheme(ThemeMode theme) { + emit(state.copyWith(theme: theme)); + return save(); } - Future setDesign(String design) { + Future changeDesign(String design) { emit(state.copyWith(design: design)); - return state.save(); + return save(); } - Future setNativeTitleBar(bool nativeTitleBar) { + Future changeNativeTitleBar(bool nativeTitleBar) { emit(state.copyWith(nativeTitleBar: nativeTitleBar)); - return state.save(); + return save(); } - Future setLocale(String locale) { - emit(state.copyWith(locale: locale)); - return state.save(); + Future changeLocale(Locale? locale) { + emit(state.copyWith(localeTag: locale?.toLanguageTag() ?? '')); + return save(); } + + Future save() => state.save(); } diff --git a/app/lib/cubits/settings.freezed.dart b/app/lib/cubits/settings.freezed.dart index 69116b0..ece211c 100644 --- a/app/lib/cubits/settings.freezed.dart +++ b/app/lib/cubits/settings.freezed.dart @@ -16,10 +16,10 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$QeckSettings { - String get locale => throw _privateConstructorUsedError; - ThemeMode get themeMode => throw _privateConstructorUsedError; - bool get nativeTitleBar => throw _privateConstructorUsedError; + String get localeTag => throw _privateConstructorUsedError; + ThemeMode get theme => throw _privateConstructorUsedError; String get design => throw _privateConstructorUsedError; + bool get nativeTitleBar => throw _privateConstructorUsedError; @JsonKey(ignore: true) $QeckSettingsCopyWith get copyWith => @@ -33,7 +33,7 @@ abstract class $QeckSettingsCopyWith<$Res> { _$QeckSettingsCopyWithImpl<$Res, QeckSettings>; @useResult $Res call( - {String locale, ThemeMode themeMode, bool nativeTitleBar, String design}); + {String localeTag, ThemeMode theme, String design, bool nativeTitleBar}); } /// @nodoc @@ -49,28 +49,28 @@ class _$QeckSettingsCopyWithImpl<$Res, $Val extends QeckSettings> @pragma('vm:prefer-inline') @override $Res call({ - Object? locale = null, - Object? themeMode = null, - Object? nativeTitleBar = null, + Object? localeTag = null, + Object? theme = null, Object? design = null, + Object? nativeTitleBar = null, }) { return _then(_value.copyWith( - locale: null == locale - ? _value.locale - : locale // ignore: cast_nullable_to_non_nullable + localeTag: null == localeTag + ? _value.localeTag + : localeTag // ignore: cast_nullable_to_non_nullable as String, - themeMode: null == themeMode - ? _value.themeMode - : themeMode // ignore: cast_nullable_to_non_nullable + theme: null == theme + ? _value.theme + : theme // ignore: cast_nullable_to_non_nullable as ThemeMode, - nativeTitleBar: null == nativeTitleBar - ? _value.nativeTitleBar - : nativeTitleBar // ignore: cast_nullable_to_non_nullable - as bool, design: null == design ? _value.design : design // ignore: cast_nullable_to_non_nullable as String, + nativeTitleBar: null == nativeTitleBar + ? _value.nativeTitleBar + : nativeTitleBar // ignore: cast_nullable_to_non_nullable + as bool, ) as $Val); } } @@ -84,7 +84,7 @@ abstract class _$$_FlowSettingsCopyWith<$Res> @override @useResult $Res call( - {String locale, ThemeMode themeMode, bool nativeTitleBar, String design}); + {String localeTag, ThemeMode theme, String design, bool nativeTitleBar}); } /// @nodoc @@ -98,28 +98,28 @@ class __$$_FlowSettingsCopyWithImpl<$Res> @pragma('vm:prefer-inline') @override $Res call({ - Object? locale = null, - Object? themeMode = null, - Object? nativeTitleBar = null, + Object? localeTag = null, + Object? theme = null, Object? design = null, + Object? nativeTitleBar = null, }) { return _then(_$_FlowSettings( - locale: null == locale - ? _value.locale - : locale // ignore: cast_nullable_to_non_nullable + localeTag: null == localeTag + ? _value.localeTag + : localeTag // ignore: cast_nullable_to_non_nullable as String, - themeMode: null == themeMode - ? _value.themeMode - : themeMode // ignore: cast_nullable_to_non_nullable + theme: null == theme + ? _value.theme + : theme // ignore: cast_nullable_to_non_nullable as ThemeMode, - nativeTitleBar: null == nativeTitleBar - ? _value.nativeTitleBar - : nativeTitleBar // ignore: cast_nullable_to_non_nullable - as bool, design: null == design ? _value.design : design // ignore: cast_nullable_to_non_nullable as String, + nativeTitleBar: null == nativeTitleBar + ? _value.nativeTitleBar + : nativeTitleBar // ignore: cast_nullable_to_non_nullable + as bool, )); } } @@ -128,28 +128,28 @@ class __$$_FlowSettingsCopyWithImpl<$Res> class _$_FlowSettings extends _FlowSettings { const _$_FlowSettings( - {this.locale = '', - this.themeMode = ThemeMode.system, - this.nativeTitleBar = false, - this.design = ''}) + {this.localeTag = '', + this.theme = ThemeMode.system, + this.design = '', + this.nativeTitleBar = false}) : super._(); @override @JsonKey() - final String locale; + final String localeTag; @override @JsonKey() - final ThemeMode themeMode; + final ThemeMode theme; @override @JsonKey() - final bool nativeTitleBar; + final String design; @override @JsonKey() - final String design; + final bool nativeTitleBar; @override String toString() { - return 'QeckSettings(locale: $locale, themeMode: $themeMode, nativeTitleBar: $nativeTitleBar, design: $design)'; + return 'QeckSettings(localeTag: $localeTag, theme: $theme, design: $design, nativeTitleBar: $nativeTitleBar)'; } @override @@ -157,17 +157,17 @@ class _$_FlowSettings extends _FlowSettings { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_FlowSettings && - (identical(other.locale, locale) || other.locale == locale) && - (identical(other.themeMode, themeMode) || - other.themeMode == themeMode) && + (identical(other.localeTag, localeTag) || + other.localeTag == localeTag) && + (identical(other.theme, theme) || other.theme == theme) && + (identical(other.design, design) || other.design == design) && (identical(other.nativeTitleBar, nativeTitleBar) || - other.nativeTitleBar == nativeTitleBar) && - (identical(other.design, design) || other.design == design)); + other.nativeTitleBar == nativeTitleBar)); } @override int get hashCode => - Object.hash(runtimeType, locale, themeMode, nativeTitleBar, design); + Object.hash(runtimeType, localeTag, theme, design, nativeTitleBar); @JsonKey(ignore: true) @override @@ -178,21 +178,21 @@ class _$_FlowSettings extends _FlowSettings { abstract class _FlowSettings extends QeckSettings { const factory _FlowSettings( - {final String locale, - final ThemeMode themeMode, - final bool nativeTitleBar, - final String design}) = _$_FlowSettings; + {final String localeTag, + final ThemeMode theme, + final String design, + final bool nativeTitleBar}) = _$_FlowSettings; const _FlowSettings._() : super._(); @override - String get locale; + String get localeTag; @override - ThemeMode get themeMode; - @override - bool get nativeTitleBar; + ThemeMode get theme; @override String get design; @override + bool get nativeTitleBar; + @override @JsonKey(ignore: true) _$$_FlowSettingsCopyWith<_$_FlowSettings> get copyWith => throw _privateConstructorUsedError; diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index 2b8ccc4..7a6c1e0 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -40,5 +40,35 @@ "change": "Change", "secure": "Secure", "port": "Port", - "otherSeats": "Other seats" + "otherSeats": "Other seats", + "general": "General", + "settings": "Settings", + "connections": "Connections", + "personalization": "Personalization", + "lightTheme": "Light theme", + "darkTheme": "Dark theme", + "systemTheme": "System theme", + "defaultLocale": "Default locale", + "update": "Update", + "stable": "Stable", + "nightly": "Nightly", + "checkForUpdates": "Check for updates", + "usingLatestStable": "You are using the latest stable version", + "usingLatestNightly": "You are using the latest nightly version", + "currentVersion": "Current version", + "updateNow": "Update now", + "updateAvailable": "Update available", + "error": "Error", + "documentation": "Documentation", + "releaseNotes": "Release notes", + "imprint": "Imprint", + "source": "Source", + "changelog": "Changelog", + "license": "License", + "privacypolicy": "Privacy policy", + "thirdPartyLicenses": "Third party licenses", + "theme": "Theme", + "design": "Design", + "locale": "Locale", + "nativeTitleBar": "Native window title bar" } diff --git a/app/lib/main.dart b/app/lib/main.dart index 0d7f577..ba43a1a 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -20,6 +20,7 @@ import 'setup.dart' if (dart.library.html) 'setup_web.dart' if (dart.library.io) 'setup_io.dart'; import 'theme.dart'; +import 'widgets/window.dart'; String? dataPath; @@ -60,6 +61,13 @@ Page Function(BuildContext, GoRouterState) _fadeTransitionBuilder( ); } +const kUnsupportedLanguages = []; + +List getLocales() => + List.from(AppLocalizations.supportedLocales) + .where((l) => !kUnsupportedLanguages.contains(l.toString())) + .toList(); + class FlowApp extends StatelessWidget { FlowApp({super.key}); @@ -68,33 +76,68 @@ class FlowApp extends StatelessWidget { if (kIsWeb) return _buildApp(null, null); return DynamicColorBuilder( builder: (lightDynamic, darkDynamic) => - _buildApp(lightDynamic, darkDynamic), + BlocBuilder( + buildWhen: (previous, current) => + previous.nativeTitleBar != current.nativeTitleBar || + previous.design != current.design, + builder: (context, settings) { + if (!kIsWeb && isWindow) { + windowManager.waitUntilReadyToShow().then((_) async { + await windowManager.setTitleBarStyle(settings.nativeTitleBar + ? TitleBarStyle.normal + : TitleBarStyle.hidden); + windowManager.show(); + }); + } + return _buildApp(lightDynamic, darkDynamic); + }, + ), ); } Widget _buildApp(ColorScheme? lightDynamic, ColorScheme? darkDynamic) { final virtualWindowFrameBuilder = VirtualWindowFrameInit(); return BlocBuilder( - buildWhen: (previous, current) => - previous.design != current.design || - previous.themeMode != current.themeMode || - previous.locale != current.locale, - builder: (context, state) => MaterialApp.router( - debugShowCheckedModeBanner: false, - routerConfig: _router, - title: applicationName, - theme: getThemeData(state.design, false, lightDynamic), - darkTheme: getThemeData(state.design, true, darkDynamic), - themeMode: state.themeMode, - locale: state.locale.isEmpty ? null : Locale(state.locale), - localizationsDelegates: const [ - ...AppLocalizations.localizationsDelegates, - LeapLocalizations.delegate, - LocaleNamesLocalizationsDelegate(), - ], - builder: virtualWindowFrameBuilder, - supportedLocales: AppLocalizations.supportedLocales, - )); + buildWhen: (previous, current) => + previous.design != current.design || + previous.theme != current.theme || + previous.localeTag != current.localeTag, + builder: (context, state) { + if (!kIsWeb && isWindow) { + windowManager.waitUntilReadyToShow().then((_) async { + Brightness brightness; + switch (state.theme) { + case ThemeMode.light: + brightness = Brightness.light; + break; + case ThemeMode.dark: + brightness = Brightness.dark; + break; + default: + brightness = MediaQuery.of(context).platformBrightness; + break; + } + await windowManager.setBrightness(brightness); + }); + } + return MaterialApp.router( + debugShowCheckedModeBanner: false, + routerConfig: _router, + title: applicationName, + theme: getThemeData(state.design, false, lightDynamic), + darkTheme: getThemeData(state.design, true, darkDynamic), + themeMode: state.theme, + locale: state.locale, + localizationsDelegates: const [ + ...AppLocalizations.localizationsDelegates, + LeapLocalizations.delegate, + LocaleNamesLocalizationsDelegate(), + ], + builder: virtualWindowFrameBuilder, + supportedLocales: AppLocalizations.supportedLocales, + ); + }, + ); } final GoRouter _router = GoRouter( diff --git a/app/lib/pages/home/page.dart b/app/lib/pages/home/page.dart index b97fb03..fc98ca0 100644 --- a/app/lib/pages/home/page.dart +++ b/app/lib/pages/home/page.dart @@ -10,6 +10,7 @@ import 'package:qeck/models/server.dart'; import 'package:qeck/services/connection.dart'; import 'package:qeck/widgets/window.dart'; +import '../../api/settings.dart'; import '../../logic/connection/client.dart'; import '../../logic/connection/server.dart'; import 'connect.dart'; @@ -26,7 +27,7 @@ class HomePage extends StatelessWidget { actions: [ IconButton( icon: const PhosphorIcon(PhosphorIconsLight.gear), - onPressed: () => context.push('/settings'), + onPressed: () => openSettings(context), ) ], ), diff --git a/app/lib/pages/settings/general.dart b/app/lib/pages/settings/general.dart new file mode 100644 index 0000000..852dbc1 --- /dev/null +++ b/app/lib/pages/settings/general.dart @@ -0,0 +1,250 @@ +import 'dart:convert'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; +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 +class Meta { + final String stableVersion, + nightlyVersion, + developVersion, + mainVersion, + currentVersion; + + const Meta( + {required this.stableVersion, + required this.nightlyVersion, + required this.developVersion, + required this.mainVersion, + required this.currentVersion}); + Meta.fromJson(Map json) + : stableVersion = json['version']?['stable'] ?? '?', + nightlyVersion = json['version']?['nightly'] ?? '?', + developVersion = json['version']?['develop'] ?? '?', + mainVersion = json['version']?['main'] ?? '?', + currentVersion = json['currentVersion']; +} + +class GeneralSettingsPage extends StatelessWidget { + final bool inView; + const GeneralSettingsPage({super.key, this.inView = false}); + + Future _fetchMeta() async { + final packageInfo = await PackageInfo.fromPlatform(); + final currentVersion = packageInfo.version; + String responseBody = '{}'; + try { + final response = + await http.get(Uri.parse('https://docs.qeck.linwood.dev/meta.json')); + responseBody = response.body; + } catch (e) { + if (kDebugMode) { + print(e); + } + } + + return Meta.fromJson( + {...json.decode(responseBody), 'currentVersion': currentVersion}); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: inView ? Colors.transparent : null, + appBar: WindowTitleBar( + title: Text(AppLocalizations.of(context).general), + backgroundColor: inView ? Colors.transparent : null, + inView: inView, + ), + body: ListView(children: [ + if (!kIsWeb) ...[ + Card( + margin: const EdgeInsets.all(8), + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + AppLocalizations.of(context).update, + style: Theme.of(context).textTheme.headlineSmall, + ), + const SizedBox(height: 16), + FutureBuilder( + future: _fetchMeta(), + builder: (context, snapshot) { + if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } + if (!snapshot.hasData) { + return const Center( + child: CircularProgressIndicator()); + } + final meta = snapshot.data!; + final currentVersion = meta.currentVersion; + final stableVersion = meta.stableVersion; + final nightlyVersion = meta.nightlyVersion; + final developVersion = meta.developVersion; + final mainVersion = meta.mainVersion; + final isStable = currentVersion == stableVersion; + final isNightly = currentVersion == nightlyVersion; + final isDevelop = currentVersion == developVersion; + final isMain = currentVersion == mainVersion; + final isError = meta.nightlyVersion == '?' || + meta.stableVersion == '?'; + final isUpdateAvailable = !isError && + !isStable && + !isNightly && + !isDevelop && + !isMain; + return Column(children: [ + ListTile( + title: + Text(AppLocalizations.of(context).stable), + subtitle: Text(stableVersion), + ), + ListTile( + title: + Text(AppLocalizations.of(context).nightly), + subtitle: Text(nightlyVersion), + ), + ListTile( + title: Text(AppLocalizations.of(context) + .currentVersion), + subtitle: Text(currentVersion), + ), + const Divider(), + if (isStable) ...[ + ListTile( + title: Text(AppLocalizations.of(context) + .usingLatestStable), + ), + ] else if (isNightly || isDevelop || isMain) ...[ + ListTile( + title: Text(AppLocalizations.of(context) + .usingLatestNightly), + ) + ] else if (isError) ...[ + ListTile( + title: + Text(AppLocalizations.of(context).error), + ), + ] else if (isUpdateAvailable) + ListTile( + title: Text(AppLocalizations.of(context) + .updateAvailable), + subtitle: Text( + AppLocalizations.of(context).updateNow), + leading: const PhosphorIcon( + PhosphorIconsLight.arrowRight), + onTap: () async { + await launchUrl( + Uri.parse( + 'https://docs.qeck.linwood.dev/downloads'), + mode: LaunchMode.externalApplication); + }, + ), + ]); + }), + ]), + ), + ), + ], + Card( + margin: const EdgeInsets.all(8), + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.article), + title: Text(AppLocalizations.of(context).documentation), + onTap: () => launchUrl( + Uri.https('docs.qeck.linwood.dev', ''), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.flag), + title: Text(AppLocalizations.of(context).releaseNotes), + onTap: () => openReleaseNotes()), + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.users), + title: const Text('Matrix'), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'matrix'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.users), + title: const Text('Discord'), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'discord'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: + const PhosphorIcon(PhosphorIconsLight.translate), + title: const Text('Crowdin'), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'qeck/crowdin'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.code), + title: Text(AppLocalizations.of(context).source), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'qeck/source'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon( + PhosphorIconsLight.arrowCounterClockwise), + title: Text(AppLocalizations.of(context).changelog), + onTap: () => launchUrl( + Uri.https('docs.qeck.linwood.dev', 'changelog'), + mode: LaunchMode.externalApplication)), + ]), + ), + ), + Card( + margin: const EdgeInsets.all(8), + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.stack), + title: Text(AppLocalizations.of(context).license), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'qeck/license'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon( + PhosphorIconsLight.identificationCard), + title: Text(AppLocalizations.of(context).imprint), + onTap: () => launchUrl( + Uri.https('go.linwood.dev', 'impress'), + mode: LaunchMode.externalApplication)), + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.shield), + title: Text(AppLocalizations.of(context).privacypolicy), + onTap: () => launchUrl( + Uri.https('docs.qeck.linwood.dev', 'privacypolicy'), + mode: LaunchMode.externalApplication)), + ListTile( + title: + Text(AppLocalizations.of(context).thirdPartyLicenses), + leading: const PhosphorIcon(PhosphorIconsLight.file), + onTap: () => showLicensePage(context: context), + ) + ]), + ), + ), + ])); + } +} diff --git a/app/lib/pages/settings/page.dart b/app/lib/pages/settings/page.dart index b56a8ab..6fd85a5 100644 --- a/app/lib/pages/settings/page.dart +++ b/app/lib/pages/settings/page.dart @@ -1,14 +1,141 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:qeck/widgets/window.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:go_router/go_router.dart'; +import 'package:material_leap/material_leap.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; +import 'package:url_launcher/url_launcher.dart'; -class SettingsPage extends StatelessWidget { - const SettingsPage({super.key}); +import 'general.dart'; +import 'personalization.dart'; + +enum SettingsView { general, personalization } + +class SettingsPage extends StatefulWidget { + final bool isDialog; + const SettingsPage({super.key, this.isDialog = false}); + + @override + State createState() => _SettingsPageState(); +} + +class _SettingsPageState extends State { + SettingsView _view = SettingsView.general; + final ScrollController _scrollController = ScrollController(); + + @override + void dispose() { + super.dispose(); + + _scrollController.dispose(); + } @override Widget build(BuildContext context) { - return const Scaffold( - appBar: WindowTitleBar( - title: Text('Settings'), + return SafeArea( + child: Material( + color: widget.isDialog ? Colors.transparent : null, + child: LayoutBuilder(builder: (context, constraints) { + final isMobile = constraints.maxWidth < 600; + var navigation = Column(children: [ + Header( + title: Text(AppLocalizations.of(context).settings), + leading: IconButton( + icon: const PhosphorIcon(PhosphorIconsLight.x), + onPressed: () => Navigator.of(context).pop(), + ), + ), + Flexible( + child: Material( + color: widget.isDialog ? Colors.transparent : null, + child: ListView( + controller: _scrollController, + shrinkWrap: true, + children: [ + ListTile( + title: Text(AppLocalizations.of(context).general), + leading: const PhosphorIcon(PhosphorIconsLight.gear), + selected: + !isMobile ? _view == SettingsView.general : false, + onTap: () { + if (isMobile) { + Navigator.of(context).pop(); + GoRouter.of(context).go('/settings/general'); + } else { + setState(() { + _view = SettingsView.general; + }); + } + }, + ), + ListTile( + leading: + const PhosphorIcon(PhosphorIconsLight.monitor), + title: Text( + AppLocalizations.of(context).personalization), + selected: !isMobile + ? _view == SettingsView.personalization + : false, + onTap: () { + if (isMobile) { + Navigator.of(context).pop(); + GoRouter.of(context) + .go('/settings/personalization'); + } else { + setState(() { + _view = SettingsView.personalization; + }); + } + }), + if (kIsWeb) ...[ + const Divider(), + Padding( + padding: const EdgeInsets.all(5), + child: InkWell( + onTap: () => launchUrl( + Uri.https('vercel.com', '', { + 'utm_source': 'Linwood', + 'utm_campaign': 'oss' + }), + mode: LaunchMode.externalApplication), + child: Material( + color: Colors.transparent, + child: SizedBox( + height: 50, + child: SvgPicture.asset( + 'images/powered-by-vercel.svg', + placeholderBuilder: (BuildContext + context) => + Container( + padding: const EdgeInsets.all( + 30.0), + child: + const CircularProgressIndicator()), + semanticsLabel: 'Powered by Vercel')), + ))) + ], + ]), + ), + ) + ]); + if (isMobile) { + return navigation; + } + Widget content; + switch (_view) { + case SettingsView.general: + content = const GeneralSettingsPage(inView: true); + break; + case SettingsView.personalization: + content = const PersonalizationSettingsPage(inView: true); + break; + } + return Row(crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + SizedBox(width: 300, child: navigation), + Expanded(child: content), + ]); + }), ), ); } diff --git a/app/lib/pages/settings/personalization.dart b/app/lib/pages/settings/personalization.dart new file mode 100644 index 0000000..3fb7e35 --- /dev/null +++ b/app/lib/pages/settings/personalization.dart @@ -0,0 +1,211 @@ +import 'dart:io'; + +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'; +import 'package:flutter_localized_locales/flutter_localized_locales.dart'; +import 'package:material_leap/material_leap.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; + +import '../../cubits/settings.dart'; +import '../../main.dart'; +import '../../theme.dart'; +import '../../widgets/window.dart'; + +class PersonalizationSettingsPage extends StatelessWidget { + final bool inView; + const PersonalizationSettingsPage({super.key, this.inView = false}); + + String _getThemeName(BuildContext context, ThemeMode mode) { + switch (mode) { + case ThemeMode.system: + return AppLocalizations.of(context).systemTheme; + case ThemeMode.light: + return AppLocalizations.of(context).lightTheme; + case ThemeMode.dark: + return AppLocalizations.of(context).darkTheme; + default: + return AppLocalizations.of(context).systemTheme; + } + } + + String _getLocaleName(BuildContext context, String locale) { + return LocaleNames.of(context)?.nameOf(locale) ?? + AppLocalizations.of(context).defaultLocale; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: inView ? Colors.transparent : null, + appBar: WindowTitleBar( + inView: inView, + backgroundColor: inView ? Colors.transparent : null, + title: Text(AppLocalizations.of(context).personalization), + ), + body: BlocBuilder( + builder: (context, state) { + final design = state.design; + return ListView(children: [ + Card( + margin: const EdgeInsets.all(8), + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ListTile( + leading: const PhosphorIcon(PhosphorIconsLight.eye), + title: Text(AppLocalizations.of(context).theme), + subtitle: Text(_getThemeName(context, state.theme)), + onTap: () => _openThemeModal(context)), + ListTile( + leading: + const PhosphorIcon(PhosphorIconsLight.palette), + title: Text(AppLocalizations.of(context).design), + subtitle: Text( + design.isEmpty + ? AppLocalizations.of(context).systemTheme + : design.toDisplayString(), + ), + trailing: ThemeBox( + theme: getThemeData(state.design, false), + ), + onTap: () => _openDesignModal(context), + ), + ListTile( + leading: const PhosphorIcon( + PhosphorIconsLight.translate), + title: Text(AppLocalizations.of(context).locale), + subtitle: + Text(_getLocaleName(context, state.localeTag)), + onTap: () => _openLocaleModal(context)), + ]), + ), + ), + Card( + margin: const EdgeInsets.all(8), + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) + SwitchListTile( + value: state.nativeTitleBar, + title: Text( + AppLocalizations.of(context).nativeTitleBar), + secondary: const PhosphorIcon( + PhosphorIconsLight.appWindow), + onChanged: (value) => context + .read() + .changeNativeTitleBar(value), + ), + ]), + ), + ), + ]); + }, + )); + } + + void _openDesignModal(BuildContext context) { + final cubit = context.read(); + final design = cubit.state.design; + + showLeapBottomSheet( + context: context, + title: AppLocalizations.of(context).theme, + childrenBuilder: (context) { + void changeDesign(String design) { + cubit.changeDesign(design); + Navigator.of(context).pop(); + } + + return [ + ListTile( + title: Text(AppLocalizations.of(context).systemTheme), + selected: design.isEmpty, + onTap: () => changeDesign(''), + leading: ThemeBox( + theme: getThemeData('', false), + ), + ), + ...getThemes().map( + (e) { + final theme = getThemeData(e, false); + return ListTile( + title: Text(e.toDisplayString()), + selected: e == design, + onTap: () => changeDesign(e), + leading: ThemeBox( + theme: theme, + )); + }, + ), + ]; + }); + } + + void _openThemeModal(BuildContext context) { + final cubit = context.read(); + final currentTheme = cubit.state.theme; + + showLeapBottomSheet( + context: context, + title: AppLocalizations.of(context).theme, + childrenBuilder: (context) { + void changeTheme(ThemeMode themeMode) { + cubit.changeTheme(themeMode); + Navigator.of(context).pop(); + } + + return [ + ListTile( + title: Text(AppLocalizations.of(context).systemTheme), + selected: currentTheme == ThemeMode.system, + leading: const PhosphorIcon(PhosphorIconsLight.power), + onTap: () => changeTheme(ThemeMode.system)), + ListTile( + title: Text(AppLocalizations.of(context).lightTheme), + selected: currentTheme == ThemeMode.light, + leading: const PhosphorIcon(PhosphorIconsLight.sun), + onTap: () => changeTheme(ThemeMode.light)), + ListTile( + title: Text(AppLocalizations.of(context).darkTheme), + selected: currentTheme == ThemeMode.dark, + leading: const PhosphorIcon(PhosphorIconsLight.moon), + onTap: () => changeTheme(ThemeMode.dark)), + ]; + }); + } + + void _openLocaleModal(BuildContext context) { + final cubit = context.read(); + var currentLocale = cubit.state.localeTag; + var locales = getLocales(); + showLeapBottomSheet( + context: context, + childrenBuilder: (context) { + void changeLocale(Locale? locale) { + cubit.changeLocale(locale); + Navigator.of(context).pop(); + } + + return [ + ListTile( + title: Text(AppLocalizations.of(context).defaultLocale), + selected: currentLocale.isEmpty, + onTap: () => changeLocale(null)), + ...locales + .map((e) => ListTile( + title: Text(_getLocaleName(context, e.toLanguageTag())), + selected: currentLocale == e.toLanguageTag(), + onTap: () => changeLocale(e))) + .toList(), + const SizedBox(height: 32), + ]; + }); + } +} diff --git a/app/pubspec.lock b/app/pubspec.lock index 7d29dec..78ccd72 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: "direct main" description: name: barcode - sha256: "52570564684bbb0240a9f1fdb6bad12adc5e0540103c1c96d6dd550bd928b1c9" + sha256: "789f898eef0bd88312470bdb2cc996f895ad7dd5f89e9adde84b204546a90b45" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.2.4" bloc: dependency: transitive description: @@ -93,10 +93,10 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "87e06c939450b9b94e3e1bb2d46e0e9780adbff5500d3969f2ba2de6bbb860cb" + sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.4" build_runner_core: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: "direct main" description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" convert: dependency: transitive description: @@ -189,10 +189,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: bbebb1b7ebed819e0ec83d4abdc2a8482d934f6a85289ffc1c6acf7589fa2aad + sha256: "74dff1435a695887ca64899b8990004f8d1232b0e84bfc4faa1fdda7c6f57cc1" url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "1.6.5" fake_async: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: "direct main" description: name: flex_color_scheme - sha256: "92e55a32cb0cbcde333c2169612785ed236a7b136534de983b3037b39d06e96c" + sha256: "5be124fa61821a684c0628ca5f687a8512db06738f784516278688eb727a3ef1" url: "https://pub.dev" source: hosted - version: "7.0.5" + version: "7.1.2" flex_seed_scheme: dependency: transitive description: @@ -250,10 +250,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: "434951eea948dbe87f737b674281465f610b8259c16c097b8163ce138749a775" + sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae url: "https://pub.dev" source: hosted - version: "8.1.2" + version: "8.1.3" flutter_lints: dependency: "direct dev" description: @@ -275,6 +275,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.4" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "6ff8c902c8056af9736de2689f63f81c42e2d642b9f4c79dbf8790ae48b63012" + url: "https://pub.dev" + source: hosted + version: "2.0.6" flutter_test: dependency: "direct dev" description: flutter @@ -289,10 +297,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: "73b58fe836dc05594451d8f740d97d5167886962d628b9f60a1fe945aa0a891f" + sha256: "2edb9ef971d0f803860ecd9084afd48c717d002141ad77b69be3e976bee7190e" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.4" freezed_annotation: dependency: "direct main" description: @@ -321,10 +329,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: "73a50070c125c90f9960aad4da9e4a95d94558230727f145ac634528da1e75e3" + sha256: "00d1b67d6e9fa443331da229084dd3eb04407f5a2dff22940bd7bba6af5722c3" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.1.1" graphs: dependency: transitive description: @@ -393,10 +401,10 @@ packages: dependency: "direct dev" description: name: json_serializable - sha256: "43793352f90efa5d8b251893a63d767b2f7c833120e3cc02adad55eefec04dc7" + sha256: "61a60716544392a82726dd0fa1dd6f5f1fd32aec66422b6e229e7b90d52325c4" url: "https://pub.dev" source: hosted - version: "6.6.2" + version: "6.7.0" lints: dependency: transitive description: @@ -433,8 +441,8 @@ packages: dependency: "direct main" description: path: "packages/material_leap" - ref: "0d321c994b6876016bb2a2044247510d8886bd3f" - resolved-ref: "0d321c994b6876016bb2a2044247510d8886bd3f" + ref: "6a23b269d59aab0d84e60f0308f0730c2632a2d4" + resolved-ref: "6a23b269d59aab0d84e60f0308f0730c2632a2d4" url: "https://github.com/LinwoodDev/dart_pkgs.git" source: git version: "0.0.1" @@ -474,10 +482,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: d39e8fbff4c5aef4592737e25ad6ac500df006ce7a7a8e1f838ce1256e167542 + sha256: "28386bbe89ab5a7919a47cea99cdd1128e5a6e0bbd7eaafe20440ead84a15de3" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" package_info_plus_platform_interface: dependency: transitive description: @@ -494,6 +502,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_provider: dependency: "direct main" description: @@ -542,6 +558,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.6" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + url: "https://pub.dev" + source: hosted + version: "5.4.0" phosphor_flutter: dependency: "direct main" description: @@ -712,10 +736,10 @@ packages: dependency: transitive description: name: source_gen - sha256: "378a173055cd1fcd2a36e94bf254786d6812688b5f53b6038a2fd180a5a5e210" + sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" source_helper: dependency: transitive description: @@ -860,6 +884,30 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: b96f10cbdfcbd03a65758633a43e7d04574438f059b1043104b5d61b23d38a4f + url: "https://pub.dev" + source: hosted + version: "1.1.6" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "57a8e6e24662a3bdfe3b3d61257db91768700c0b8f844e235877b56480f31c69" + url: "https://pub.dev" + source: hosted + version: "1.1.6" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "7430f5d834d0db4560d7b19863362cd892f1e52b43838553a3c5cdfc9ab28e5b" + url: "https://pub.dev" + source: hosted + version: "1.1.6" vector_math: dependency: transitive description: @@ -896,10 +944,10 @@ packages: dependency: "direct main" description: name: window_manager - sha256: "2b2572442b2a5178642730442dc625ac088244f5827b1f0811371b1b7485eb62" + sha256: "95096fede562cbb65f30d38b62d819a458f59ba9fe4a317f6cee669710f6676b" url: "https://pub.dev" source: hosted - version: "0.3.2" + version: "0.3.4" xdg_directories: dependency: transitive description: @@ -908,6 +956,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + xml: + dependency: transitive + description: + name: xml + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + url: "https://pub.dev" + source: hosted + version: "6.3.0" yaml: dependency: transitive description: @@ -917,5 +973,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.0.0-417 <4.0.0" - flutter: ">=3.7.0" + dart: ">=3.0.0 <4.0.0" + flutter: ">=3.10.0" diff --git a/app/pubspec.yaml b/app/pubspec.yaml index aebb411..82e04cd 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -36,38 +36,39 @@ dependencies: material_leap: git: url: https://github.com/LinwoodDev/dart_pkgs.git - ref: 0d321c994b6876016bb2a2044247510d8886bd3f + ref: 6a23b269d59aab0d84e60f0308f0730c2632a2d4 path: packages/material_leap - flex_color_scheme: ^7.0.5 - window_manager: ^0.3.2 + flex_color_scheme: ^7.1.2 + flutter_svg: ^2.0.6 + window_manager: ^0.3.4 # Database shared_preferences: ^2.1.1 # Generation - barcode: ^2.2.3 + barcode: ^2.2.4 # Internal - flutter_bloc: ^8.1.2 + flutter_bloc: ^8.1.3 url_launcher: ^6.1.11 freezed_annotation: ^2.2.0 # Information http: ^0.13.6 - package_info_plus: ^4.0.0 + package_info_plus: ^4.0.1 path_provider: ^2.0.15 - go_router: ^7.0.0 + go_router: ^7.1.1 json_annotation: ^4.8.1 - dynamic_color: ^1.6.3 + dynamic_color: ^1.6.5 web_socket_channel: ^2.4.0 rxdart: ^0.27.7 - collection: ^1.17.1 + collection: ^1.17.2 dev_dependencies: flutter_test: sdk: flutter - build_runner: ^2.4.2 + build_runner: ^2.4.4 flutter_lints: ^2.0.1 - freezed: ^2.3.3 - json_serializable: ^6.6.2 + freezed: ^2.3.4 + json_serializable: ^6.7.0 dependency_overrides: - collection: 1.17.1 + collection: 1.17.2 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. diff --git a/docs/package.json b/docs/package.json index c10da1b..9d4a57c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,18 +17,18 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-client-redirects": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-pwa": "2.4.0", - "@docusaurus/preset-classic": "2.4.0", - "@docusaurus/theme-common": "2.4.0", + "@docusaurus/core": "2.4.1", + "@docusaurus/plugin-client-redirects": "2.4.1", + "@docusaurus/plugin-content-docs": "2.4.1", + "@docusaurus/plugin-pwa": "2.4.1", + "@docusaurus/preset-classic": "2.4.1", + "@docusaurus/theme-common": "2.4.1", "@mdx-js/react": "^1", - "@swc/core": "^1.3.56", + "@swc/core": "^1.3.59", "animate.css": "^4.1.1", "clsx": "^1.2.1", "node-fetch": "^3.3.1", - "prism-react-renderer": "^2.0.3", + "prism-react-renderer": "^2.0.4", "react": "^18.2.0", "react-animation-on-scroll": "^5.1.0", "react-dom": "^18.2.0", @@ -49,10 +49,10 @@ }, "packageManager": "yarn@3.5.1", "devDependencies": { - "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.1", "@tsconfig/docusaurus": "^1.0.7", "markdownlint-cli2": "^0.7.1", "typescript": "^5.0.4", - "webpack": "^5.82.0" + "webpack": "^5.83.1" } } diff --git a/docs/yarn.lock b/docs/yarn.lock index c4f3c88..04d3bad 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -1699,9 +1699,9 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/core@npm:2.4.0" +"@docusaurus/core@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/core@npm:2.4.1" dependencies: "@babel/core": ^7.18.6 "@babel/generator": ^7.18.7 @@ -1713,13 +1713,13 @@ __metadata: "@babel/runtime": ^7.18.6 "@babel/runtime-corejs3": ^7.18.6 "@babel/traverse": ^7.18.8 - "@docusaurus/cssnano-preset": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/cssnano-preset": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/mdx-loader": 2.4.1 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.2.1 autoprefixer: ^10.4.7 @@ -1779,40 +1779,40 @@ __metadata: react-dom: ^16.8.4 || ^17.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 04d30e31e9c4198ce3f4a47c4f59943f357ef96a5cfa10674fd3049d4cf067c15fa0ae184383ba3e420f59a9b3077ed1cf1f373626399f0e46cea6fcf0897d7b + checksum: 40c887ef662f7679d803695d4193268c2c177c6d4e13b43b56cc519322522a1608b4bfc4999f6355be778ca7a0256f0d27ab18a19b352a9da1aed66e2644dc82 languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/cssnano-preset@npm:2.4.0" +"@docusaurus/cssnano-preset@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/cssnano-preset@npm:2.4.1" dependencies: cssnano-preset-advanced: ^5.3.8 postcss: ^8.4.14 postcss-sort-media-queries: ^4.2.1 tslib: ^2.4.0 - checksum: b8982230ec014378a5453453df400a328a6ecdeecffb666ead5cfbeb5dc689610f0e62ee818ffcc8adc270c7c47cb818ad730c769eb8fa689dd79d4f9d448b6d + checksum: d498345981288af2dcb8650bed3c3361cfe336541a8bda65743fbe8ee5746e81e723ba086e2e6249c3b283f4bc50b5c81cff15b0406969cd610bed345b3804ac languageName: node linkType: hard -"@docusaurus/logger@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/logger@npm:2.4.0" +"@docusaurus/logger@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/logger@npm:2.4.1" dependencies: chalk: ^4.1.2 tslib: ^2.4.0 - checksum: 0424b77e2abaa50f20d6042ededf831157852656d1242ae9b0829b897e6f5b1e1e5ea30df599839e0ec51c72e42a5a867b136387dd5359032c735f431eddd078 + checksum: be81840f2df477ab633d8ced6fd3a512582e764a48d66b1c12bb20b5d4c717f349e254e33b00b9b53381dbdb24a3e3d0ca9b19511366244b3620fa19cc4c69dc languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/mdx-loader@npm:2.4.0" +"@docusaurus/mdx-loader@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/mdx-loader@npm:2.4.1" dependencies: "@babel/parser": ^7.18.8 "@babel/traverse": ^7.18.8 - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 + "@docusaurus/logger": 2.4.1 + "@docusaurus/utils": 2.4.1 "@mdx-js/mdx": ^1.6.22 escape-html: ^1.0.3 file-loader: ^6.2.0 @@ -1829,16 +1829,16 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 3d4e7bf6840fa7dcf4250aa5ea019f80dac6cc38e9f8b9a0515b81b6c0f6d6f4ed4103f521784e70db856aec06cff4be176ef281e1cac53afc82bc1182bbf9ad + checksum: cf36bbde228a058869dfd770a85f130035a54e563b957a3cfc3191d06efdcfc272bb51b51e6225a0246b233e5d7d0ca1cb4df4b700b837aa72bbb0c9f6f6f5bd languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/module-type-aliases@npm:2.4.0" +"@docusaurus/module-type-aliases@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/module-type-aliases@npm:2.4.1" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 2.4.0 + "@docusaurus/types": 2.4.1 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1848,19 +1848,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: fc655d9dc77d88ba9d10abe602c9fd5533992b14de495e4f3e4caea368693a7b7e5a805fb2938287bed949900e7e3d7f94bea3c1a8727b45e19c85996965d0c7 + checksum: 9e328c7bc5cd40b399550995edbeeea5ce88be7eb75f4c49499e8fd05a8bbabf180dce4d1cae0185721629fc6e0f2e8fc513e3ce846080f9771f7a9bc1c45ba8 languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-client-redirects@npm:2.4.0" +"@docusaurus/plugin-client-redirects@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-client-redirects@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 eta: ^2.0.0 fs-extra: ^10.1.0 lodash: ^4.17.21 @@ -1868,21 +1868,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e0a82b71521752fb338b928fd0e04c78f01a1b8f240ffde12631a25711cdf63b0bf1a56d1ee19e479ea11d33ef9aabf337071f2eb5dcd55b4f17228374ceae26 + checksum: 0b6d30dd8afebc116fd88505e36fbe6b3b64aa49ef7d247a92bb793676a93f3b998abef3229117cb03162cdb94ed1f874977db8423cb8188e35e11514d8a1e0f languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-blog@npm:2.4.0" - dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 +"@docusaurus/plugin-content-blog@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-content-blog@npm:2.4.1" + dependencies: + "@docusaurus/core": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/mdx-loader": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^10.1.0 @@ -1895,21 +1895,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e912ea1a01c1769b374aecf1af72cef96dbed5faa01b74cc12d951dd5dccc089994ff649f0a18f994e39730338f99c0aa12f3b2a1eefc40888f1fb7956cece29 + checksum: 9d4e543b70d032d7edf0c986c45f36a088db76dc737a24374dcb877177b889fb0a5ed7b0a9c9ebb912523ef23ba26787d0fff59d9032b3e8075bdde9c072956a languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-docs@npm:2.4.0" - dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 +"@docusaurus/plugin-content-docs@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-content-docs@npm:2.4.1" + dependencies: + "@docusaurus/core": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/mdx-loader": 2.4.1 + "@docusaurus/module-type-aliases": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 "@types/react-router-config": ^5.0.6 combine-promises: ^1.1.0 fs-extra: ^10.1.0 @@ -1922,103 +1922,103 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 5a273e80f2c28e4a33ab994e8702b3afaff04eb73f156a0a3e42cd9d182f8e1ed2b794348b090ec170cc1e4aba2e997d1fb6e8684f73ac6698bf66d96114c57b + checksum: 028eda178dc81a74c25fd2efddb47e44451af2b268b13d99ef2b60cf13da1443f3bce884fd4a8a7ae92fed8ef747308309074f9524753fd80a40b5252a237e37 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-pages@npm:2.4.0" +"@docusaurus/plugin-content-pages@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-content-pages@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/mdx-loader": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 fs-extra: ^10.1.0 tslib: ^2.4.0 webpack: ^5.73.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 5381e913101f271476cbdc264e6058a0cbe0835ed4a823e430540da545253c1dc56578c66a6d978ee2f1aca114110aba529443ae835f26ef0eaf7de1ed6a5001 + checksum: 6af4eb7c064ed90158ad584eb64593473940b1880034a65fbcfde36116d6702b882bb9b0340141a5a48e67b0f84c03b8202b94171f5924d9f0c279cb68959a47 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-debug@npm:2.4.0" +"@docusaurus/plugin-debug@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-debug@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 fs-extra: ^10.1.0 react-json-view: ^1.21.3 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 921614843453ef189dfa2ada31e7abed8f976b0c314f7486fde35f976911de2ab307863608326e96bea67468e98dc648aeea82dbad04d0701c3c48c92bd40c6c + checksum: 0be51e9a881383ed76b6e8f369ca6f7754a4f6bd59093c6d28d955b9422a25e868f24b534eb08ba84a5524ae742edd4a052813767b2ea1e8767914dceffc19b8 languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-analytics@npm:2.4.0" +"@docusaurus/plugin-google-analytics@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-google-analytics@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 2d8c7e5689675ced9acffe1e2187144d6ebeea471a5992139c3eea87094e315e272263da5499591e85bc3501b7583f693d33c660507b36a835fc9eb75584c706 + checksum: 9e754c0bc7779867af07cd77de36f5b491671a96fba5e3517458803465c24773357eb2f1400c41c80e69524cb2c7e9e353262335051aa54192eeae9d9eb055cb languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-gtag@npm:2.4.0" +"@docusaurus/plugin-google-gtag@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-google-gtag@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 6aa0bb6ac5e410ea438db2de20c95a4a34d7056855b2e0baa7685e31bd9b3f48ef55f8135ca496688ccbfaba88945219acae146a244141bfb7e2372ba54c0ce2 + checksum: ed529f2100599401e1c2aa772dca7c60fdb1990e44af3a9e476e1922f1370ef0dd0b5e6442f846bd942b74af63f3163ac85f1eefe1e85660b61ee60f2044c463 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.0" +"@docusaurus/plugin-google-tag-manager@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.1" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 2df57cd95808ed7cf58ade342dcc3382e167ecebaedc7184588c214f6b64eab60fa0145ab0ce7e25803acfe3952412c1134d52ad0ea636cef652a73ccd79a5cb + checksum: c5c6fce9c9eeae7cbeb277b9765a67d5c4403a3e04f634aadac6d4ba9901739a547d4ea023c83a76cfece2fdb2d175851acaa69abb2f190401b612adeab5524d languageName: node linkType: hard -"@docusaurus/plugin-pwa@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-pwa@npm:2.4.0" +"@docusaurus/plugin-pwa@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-pwa@npm:2.4.1" dependencies: "@babel/core": ^7.18.6 "@babel/preset-env": ^7.18.6 - "@docusaurus/core": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-translations": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/theme-common": 2.4.1 + "@docusaurus/theme-translations": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 babel-loader: ^8.2.5 clsx: ^1.2.1 core-js: ^3.23.3 @@ -2032,51 +2032,51 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 2d75cee6f5dda55bcdeba9bef75383288b7d04ed9ae01389a2ce533d80bedab9d8a0401f3958431523ecc1c37c98bfb7bb736d84ed5e3b7428d881fac727d7b8 + checksum: 5884a089d914668391cd068a49d3af40bbf220797bd8a90390a890e1757c2501419d9ed9e0539554dec87066718802e4ae22419cf8496c4473c9951b0b6cdd22 languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-sitemap@npm:2.4.0" - dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 +"@docusaurus/plugin-sitemap@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/plugin-sitemap@npm:2.4.1" + dependencies: + "@docusaurus/core": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 fs-extra: ^10.1.0 sitemap: ^7.1.1 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e96fcc84352880da6a3e566cdc249e44ad825b400f2d798746201c3a4a255b196b999f5bf5d0a5b52c752acf9e9eb1169111b463914502a6cae9c114800fa09e + checksum: aa6728278017c047b4ed1456e349b1a267d85b4bb0c422bb63e59fc28ccb0e286dc66918f44f6ade660e550b047e2b14796c54c96fde6eb69395770cf39cf306 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/preset-classic@npm:2.4.0" - dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/plugin-debug": 2.4.0 - "@docusaurus/plugin-google-analytics": 2.4.0 - "@docusaurus/plugin-google-gtag": 2.4.0 - "@docusaurus/plugin-google-tag-manager": 2.4.0 - "@docusaurus/plugin-sitemap": 2.4.0 - "@docusaurus/theme-classic": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-search-algolia": 2.4.0 - "@docusaurus/types": 2.4.0 +"@docusaurus/preset-classic@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/preset-classic@npm:2.4.1" + dependencies: + "@docusaurus/core": 2.4.1 + "@docusaurus/plugin-content-blog": 2.4.1 + "@docusaurus/plugin-content-docs": 2.4.1 + "@docusaurus/plugin-content-pages": 2.4.1 + "@docusaurus/plugin-debug": 2.4.1 + "@docusaurus/plugin-google-analytics": 2.4.1 + "@docusaurus/plugin-google-gtag": 2.4.1 + "@docusaurus/plugin-google-tag-manager": 2.4.1 + "@docusaurus/plugin-sitemap": 2.4.1 + "@docusaurus/theme-classic": 2.4.1 + "@docusaurus/theme-common": 2.4.1 + "@docusaurus/theme-search-algolia": 2.4.1 + "@docusaurus/types": 2.4.1 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 33961a1edd445f13971e640db9445a0fae418babf0fe5f4078f21e605f9d945f7a3a4b7ad53ac7b578a7302f093c708429f462a76a3f297b3439d8e23b3990aa + checksum: bad7f237ac03a9bc6206cb7a5d077d85d5a6316d34ff089c487ce92b8f6103ef22b04f35d637bdc31dddabd97d5babb1817852b9b97db7c33f3d4c7f33cb149d languageName: node linkType: hard @@ -2092,22 +2092,22 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-classic@npm:2.4.0" - dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-translations": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 +"@docusaurus/theme-classic@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/theme-classic@npm:2.4.1" + dependencies: + "@docusaurus/core": 2.4.1 + "@docusaurus/mdx-loader": 2.4.1 + "@docusaurus/module-type-aliases": 2.4.1 + "@docusaurus/plugin-content-blog": 2.4.1 + "@docusaurus/plugin-content-docs": 2.4.1 + "@docusaurus/plugin-content-pages": 2.4.1 + "@docusaurus/theme-common": 2.4.1 + "@docusaurus/theme-translations": 2.4.1 + "@docusaurus/types": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 "@mdx-js/react": ^1.6.22 clsx: ^1.2.1 copy-text-to-clipboard: ^3.0.1 @@ -2124,21 +2124,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 7f3161d7be653b6a86ffd58d8a6c6d62f464db919c32b7b9ab2ec9ca1b79136e2278fdc908e90cfa31cf21385d87cd7496d5bf9c80d30c2279ef95e7f7be28aa + checksum: 058875d4c60f77f86b5d679b1ef99ed06101411f003d2d65fa4fe5ae6fbe5e5e6a291616268a18a29fdd84f0853cc4219a2c1801663b75f27c664b3ace7d009e languageName: node linkType: hard -"@docusaurus/theme-common@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-common@npm:2.4.0" - dependencies: - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 +"@docusaurus/theme-common@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/theme-common@npm:2.4.1" + dependencies: + "@docusaurus/mdx-loader": 2.4.1 + "@docusaurus/module-type-aliases": 2.4.1 + "@docusaurus/plugin-content-blog": 2.4.1 + "@docusaurus/plugin-content-docs": 2.4.1 + "@docusaurus/plugin-content-pages": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-common": 2.4.1 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -2151,22 +2151,22 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 0790c6e5ad14bc8518173314a058e01837321d5992364d1ae4f9907f1d055f5852f883512d7a64e5add95dcfe362a009b374220de6493b32624a406d8ce74750 + checksum: 206db83caab59eadc5b8e5394d46b64ec8695bd20d4a3defe111c28094faf6de92481c3bb4e54c159a519bc782759031b121e17d7e0175d873a843f36630c539 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-search-algolia@npm:2.4.0" +"@docusaurus/theme-search-algolia@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/theme-search-algolia@npm:2.4.1" dependencies: "@docsearch/react": ^3.1.1 - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-translations": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/logger": 2.4.1 + "@docusaurus/plugin-content-docs": 2.4.1 + "@docusaurus/theme-common": 2.4.1 + "@docusaurus/theme-translations": 2.4.1 + "@docusaurus/utils": 2.4.1 + "@docusaurus/utils-validation": 2.4.1 algoliasearch: ^4.13.1 algoliasearch-helper: ^3.10.0 clsx: ^1.2.1 @@ -2178,23 +2178,23 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: a74a199faf6bab1d663cd41f9477c65c17f8dd2080664d5c00f998eb7c57345f1c30ff4f2c3bc88863f2e606c6f7475300747480dc145e61dd42798ca4fd435e + checksum: 00016804462e3ca961de96f477c397bf68bbfa7c641cfb95e76492ec00f2e0f8f5b19623cd6ad0fda31ad08aa29fa1a74185d9bd34f61437e7f36f711064f3ba languageName: node linkType: hard -"@docusaurus/theme-translations@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-translations@npm:2.4.0" +"@docusaurus/theme-translations@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/theme-translations@npm:2.4.1" dependencies: fs-extra: ^10.1.0 tslib: ^2.4.0 - checksum: 37f329eb74fcb16c14bd370038d8bd1e18017fb1f78564d960c53fd4e110eb166f6f1c03f323dea28ede95873ebe28a659554d02cc26d1c3e748a772f9d2313a + checksum: cf21cd01db6426ccc29360fe9caca39e61ee5efde3796539e8292e212c25727227970f935050f294f0ab475f201720e32a1d09a7e40f2b08f56f69282f660da8 languageName: node linkType: hard -"@docusaurus/types@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/types@npm:2.4.0" +"@docusaurus/types@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/types@npm:2.4.1" dependencies: "@types/history": ^4.7.11 "@types/react": "*" @@ -2207,13 +2207,13 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 54b0cd8992269ab0508d94ce19a7fcc2b3e7c9700eb112c9b859ddac8228dcc64282c414b602ba44894be87be79eeeef730fb8e569be68b6e26453e18addcf21 + checksum: d44e91c9153802a5c63a0bd91e56654f901df837ac7b380dff8f165991728e88d29efa7c64c6522d0afdf8ec845613aff5867badb717d29b691392712f655936 languageName: node linkType: hard -"@docusaurus/utils-common@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils-common@npm:2.4.0" +"@docusaurus/utils-common@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/utils-common@npm:2.4.1" dependencies: tslib: ^2.4.0 peerDependencies: @@ -2221,28 +2221,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 711e61e899b133fc7cd755e6de75fd79a712eeabbd9853b9122e3929c8390e015bb9e4bca2284028e40e7a0fb2b89ef1c184f7e4149097ffd7b64821b38c11da + checksum: 475f05b94a879d9078564dbb081d91a953356f54d0a4384a8711281a62851b58d99df9b45664a30e40ac37733772cedd53a253d34a07fbd5b36bcce46ab200c8 languageName: node linkType: hard -"@docusaurus/utils-validation@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils-validation@npm:2.4.0" +"@docusaurus/utils-validation@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/utils-validation@npm:2.4.1" dependencies: - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 + "@docusaurus/logger": 2.4.1 + "@docusaurus/utils": 2.4.1 joi: ^17.6.0 js-yaml: ^4.1.0 tslib: ^2.4.0 - checksum: 21a229858ed9254830b68dd08de6456dc19b68adead581f86e854ea3e55b64b9616a3bbca521e74f754c9c7bc835ca348dfe9f0949d9a8d189db5b39bcdb9f6b + checksum: 44dc482770ea3932e68e58c0bb9503e1b3c73ce28565c438b0d68a7427ee91760ca84a5e150dfc4e04497e072fe4394050dd2af4c4ff43a227b1464e89d705a0 languageName: node linkType: hard -"@docusaurus/utils@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils@npm:2.4.0" +"@docusaurus/utils@npm:2.4.1": + version: 2.4.1 + resolution: "@docusaurus/utils@npm:2.4.1" dependencies: - "@docusaurus/logger": 2.4.0 + "@docusaurus/logger": 2.4.1 "@svgr/webpack": ^6.2.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2263,7 +2263,7 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 7ba6634b6ff71bb7cc64b0eb3c6d2892a21873bce8559bcd460693a80ca0229828c04da751277cdb17c6f18e80e061322bbcd84e9b743adc96c594b43e8a2165 + checksum: 4c7e49cabe6650b027c0f698344532fb81c8aaf912f17a287fad986e008ce7c6d34d372b44974488ce160ae43ef6aad4ac7b2790bc3fe2ab05ef5fa7b9506ce9 languageName: node linkType: hard @@ -2750,90 +2750,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-darwin-arm64@npm:1.3.57" +"@swc/core-darwin-arm64@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-darwin-arm64@npm:1.3.59" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-darwin-x64@npm:1.3.57" +"@swc/core-darwin-x64@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-darwin-x64@npm:1.3.59" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.57" +"@swc/core-linux-arm-gnueabihf@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.59" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.57" +"@swc/core-linux-arm64-gnu@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.59" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.57" +"@swc/core-linux-arm64-musl@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.59" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.57" +"@swc/core-linux-x64-gnu@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.59" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-linux-x64-musl@npm:1.3.57" +"@swc/core-linux-x64-musl@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-linux-x64-musl@npm:1.3.59" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.57" +"@swc/core-win32-arm64-msvc@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.59" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.57" +"@swc/core-win32-ia32-msvc@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.59" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.57": - version: 1.3.57 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.57" +"@swc/core-win32-x64-msvc@npm:1.3.59": + version: 1.3.59 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.59" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.3.56": - version: 1.3.57 - resolution: "@swc/core@npm:1.3.57" +"@swc/core@npm:^1.3.59": + version: 1.3.59 + resolution: "@swc/core@npm:1.3.59" dependencies: - "@swc/core-darwin-arm64": 1.3.57 - "@swc/core-darwin-x64": 1.3.57 - "@swc/core-linux-arm-gnueabihf": 1.3.57 - "@swc/core-linux-arm64-gnu": 1.3.57 - "@swc/core-linux-arm64-musl": 1.3.57 - "@swc/core-linux-x64-gnu": 1.3.57 - "@swc/core-linux-x64-musl": 1.3.57 - "@swc/core-win32-arm64-msvc": 1.3.57 - "@swc/core-win32-ia32-msvc": 1.3.57 - "@swc/core-win32-x64-msvc": 1.3.57 + "@swc/core-darwin-arm64": 1.3.59 + "@swc/core-darwin-x64": 1.3.59 + "@swc/core-linux-arm-gnueabihf": 1.3.59 + "@swc/core-linux-arm64-gnu": 1.3.59 + "@swc/core-linux-arm64-musl": 1.3.59 + "@swc/core-linux-x64-gnu": 1.3.59 + "@swc/core-linux-x64-musl": 1.3.59 + "@swc/core-win32-arm64-msvc": 1.3.59 + "@swc/core-win32-ia32-msvc": 1.3.59 + "@swc/core-win32-x64-msvc": 1.3.59 peerDependencies: "@swc/helpers": ^0.5.0 dependenciesMeta: @@ -2860,7 +2860,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 4e900d05f8ea8fe7051d06b90bcedf13edd1305f9f2d50d0cbe3b28256a0f1512488c0f3fece6e9b5413e3bc8dc9c7e559c2bb384676aaf80971661e89d39241 + checksum: 0283f39cf49cd12a6dc7062ef9ea4fa93e1a4f622ce46903a09605219f4f47ed5ad03925c6146d09ffe6ee02a89bb14e3c82eb86b4c60ecce4985ea6e078ffcf languageName: node linkType: hard @@ -5346,6 +5346,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.14.0": + version: 5.14.0 + resolution: "enhanced-resolve@npm:5.14.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fff1aaebbf376371e5df4502e111967f6247c37611ad3550e4e7fca657f6dcb29ef7ffe88bf14e5010b78997f1ddd984a8db97af87ee0a5477771398fd326f5b + languageName: node + linkType: hard + "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -9244,7 +9254,7 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^2.0.3": +"prism-react-renderer@npm:^2.0.4": version: 2.0.4 resolution: "prism-react-renderer@npm:2.0.4" dependencies: @@ -9380,28 +9390,28 @@ __metadata: version: 0.0.0-use.local resolution: "qeck-docs@workspace:." dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-client-redirects": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-pwa": 2.4.0 - "@docusaurus/preset-classic": 2.4.0 - "@docusaurus/theme-common": 2.4.0 + "@docusaurus/core": 2.4.1 + "@docusaurus/module-type-aliases": 2.4.1 + "@docusaurus/plugin-client-redirects": 2.4.1 + "@docusaurus/plugin-content-docs": 2.4.1 + "@docusaurus/plugin-pwa": 2.4.1 + "@docusaurus/preset-classic": 2.4.1 + "@docusaurus/theme-common": 2.4.1 "@mdx-js/react": ^1 - "@swc/core": ^1.3.56 + "@swc/core": ^1.3.59 "@tsconfig/docusaurus": ^1.0.7 animate.css: ^4.1.1 clsx: ^1.2.1 markdownlint-cli2: ^0.7.1 node-fetch: ^3.3.1 - prism-react-renderer: ^2.0.3 + prism-react-renderer: ^2.0.4 react: ^18.2.0 react-animation-on-scroll: ^5.1.0 react-dom: ^18.2.0 swc-loader: ^0.2.3 typescript: ^5.0.4 ua-parser-js: ^1.0.35 - webpack: ^5.82.0 + webpack: ^5.83.1 languageName: unknown linkType: soft @@ -11765,7 +11775,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.73.0, webpack@npm:^5.82.0": +"webpack@npm:^5.73.0": version: 5.82.0 resolution: "webpack@npm:5.82.0" dependencies: @@ -11802,6 +11812,43 @@ __metadata: languageName: node linkType: hard +"webpack@npm:^5.83.1": + version: 5.83.1 + resolution: "webpack@npm:5.83.1" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.7.6 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.14.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.1.2 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 219d5ef50380bc0fd3702ed17feddf13819d8173b78f7a5b857dc74ac177e63d1f79c050792754411cc088bbc02e0971b989efddadbb8e393cf27d64c0ad9ff8 + languageName: node + linkType: hard + "webpackbar@npm:^5.0.2": version: 5.0.2 resolution: "webpackbar@npm:5.0.2" diff --git a/tools/pubspec.lock b/tools/pubspec.lock index 9d0ee94..e9ab835 100644 --- a/tools/pubspec.lock +++ b/tools/pubspec.lock @@ -202,4 +202,4 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=2.19.0 <3.0.0" + dart: ">=2.19.0 <4.0.0"