diff --git a/api/lib/src/protocol/event.dart b/api/lib/src/protocol/event.dart index 1d3fae8c84d7..21244e8b9350 100644 --- a/api/lib/src/protocol/event.dart +++ b/api/lib/src/protocol/event.dart @@ -140,6 +140,10 @@ class DocumentEvent extends ReplayEvent with _$DocumentEvent { String id, ) = LayerRemoved; + const factory DocumentEvent.layersMerged( + List layers, + ) = LayersMerged; + const factory DocumentEvent.layerOrderChanged( String id, int index, diff --git a/api/lib/src/protocol/event.freezed.dart b/api/lib/src/protocol/event.freezed.dart index 5abddd19cdca..1558151cb2ea 100644 --- a/api/lib/src/protocol/event.freezed.dart +++ b/api/lib/src/protocol/event.freezed.dart @@ -76,6 +76,8 @@ DocumentEvent _$DocumentEventFromJson(Map json) { return LayerChanged.fromJson(json); case 'layerRemoved': return LayerRemoved.fromJson(json); + case 'layersMerged': + return LayersMerged.fromJson(json); case 'layerOrderChanged': return LayerOrderChanged.fromJson(json); case 'layerVisibilityChanged': @@ -3391,6 +3393,111 @@ abstract class LayerRemoved extends DocumentEvent { throw _privateConstructorUsedError; } +/// @nodoc +abstract class _$$LayersMergedImplCopyWith<$Res> { + factory _$$LayersMergedImplCopyWith( + _$LayersMergedImpl value, $Res Function(_$LayersMergedImpl) then) = + __$$LayersMergedImplCopyWithImpl<$Res>; + @useResult + $Res call({List layers}); +} + +/// @nodoc +class __$$LayersMergedImplCopyWithImpl<$Res> + extends _$DocumentEventCopyWithImpl<$Res, _$LayersMergedImpl> + implements _$$LayersMergedImplCopyWith<$Res> { + __$$LayersMergedImplCopyWithImpl( + _$LayersMergedImpl _value, $Res Function(_$LayersMergedImpl) _then) + : super(_value, _then); + + /// Create a copy of DocumentEvent + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? layers = null, + }) { + return _then(_$LayersMergedImpl( + null == layers + ? _value._layers + : layers // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$LayersMergedImpl extends LayersMerged { + const _$LayersMergedImpl(final List layers, {final String? $type}) + : _layers = layers, + $type = $type ?? 'layersMerged', + super._(); + + factory _$LayersMergedImpl.fromJson(Map json) => + _$$LayersMergedImplFromJson(json); + + final List _layers; + @override + List get layers { + if (_layers is EqualUnmodifiableListView) return _layers; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_layers); + } + + @JsonKey(name: 'type') + final String $type; + + @override + String toString() { + return 'DocumentEvent.layersMerged(layers: $layers)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$LayersMergedImpl && + const DeepCollectionEquality().equals(other._layers, _layers)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => + Object.hash(runtimeType, const DeepCollectionEquality().hash(_layers)); + + /// Create a copy of DocumentEvent + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$LayersMergedImplCopyWith<_$LayersMergedImpl> get copyWith => + __$$LayersMergedImplCopyWithImpl<_$LayersMergedImpl>(this, _$identity); + + @override + Map toJson() { + return _$$LayersMergedImplToJson( + this, + ); + } +} + +abstract class LayersMerged extends DocumentEvent { + const factory LayersMerged(final List layers) = _$LayersMergedImpl; + const LayersMerged._() : super._(); + + factory LayersMerged.fromJson(Map json) = + _$LayersMergedImpl.fromJson; + + List get layers; + + /// Create a copy of DocumentEvent + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + _$$LayersMergedImplCopyWith<_$LayersMergedImpl> get copyWith => + throw _privateConstructorUsedError; +} + /// @nodoc abstract class _$$LayerOrderChangedImplCopyWith<$Res> { factory _$$LayerOrderChangedImplCopyWith(_$LayerOrderChangedImpl value, diff --git a/api/lib/src/protocol/event.g.dart b/api/lib/src/protocol/event.g.dart index bcea7d0dd7e1..29106242fc6b 100644 --- a/api/lib/src/protocol/event.g.dart +++ b/api/lib/src/protocol/event.g.dart @@ -420,6 +420,17 @@ Map _$$LayerRemovedImplToJson(_$LayerRemovedImpl instance) => 'type': instance.$type, }; +_$LayersMergedImpl _$$LayersMergedImplFromJson(Map json) => _$LayersMergedImpl( + (json['layers'] as List).map((e) => e as String).toList(), + $type: json['type'] as String?, + ); + +Map _$$LayersMergedImplToJson(_$LayersMergedImpl instance) => + { + 'layers': instance.layers, + 'type': instance.$type, + }; + _$LayerOrderChangedImpl _$$LayerOrderChangedImplFromJson(Map json) => _$LayerOrderChangedImpl( json['id'] as String, diff --git a/api/pubspec.lock b/api/pubspec.lock index 3cc6a18f2901..330beaeeffdb 100644 --- a/api/pubspec.lock +++ b/api/pubspec.lock @@ -58,10 +58,10 @@ packages: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: @@ -146,10 +146,10 @@ packages: dependency: "direct main" description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" convert: dependency: transitive description: @@ -178,10 +178,10 @@ packages: dependency: transitive description: name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.3.0" dart_style: dependency: transitive description: @@ -258,10 +258,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" + sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.1.1" io: dependency: transitive description: @@ -603,10 +603,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" watcher: dependency: transitive description: diff --git a/app/lib/bloc/document_bloc.dart b/app/lib/bloc/document_bloc.dart index 061fff28be53..df94cd2b3797 100644 --- a/app/lib/bloc/document_bloc.dart +++ b/app/lib/bloc/document_bloc.dart @@ -661,6 +661,30 @@ class DocumentBloc extends ReplayBloc { ); }); + on((event, emit) { + final current = state; + if (current is! DocumentLoadSuccess) return; + if (!(current.embedding?.editable ?? true)) return; + if (event.layers.length < 2) return; + final mainLayer = event.layers.first; + final mergedLayers = event.layers.skip(1).toList(); + var layer = current.page.getLayer(mainLayer); + layer = layer.copyWith(content: [ + ...layer.content, + ...mergedLayers.expand((e) => current.page.getLayer(e).content) + ]); + final newLayers = current.page.layers + .where((e) => !mergedLayers.contains(e.id)) + .map((e) => e.id == mainLayer ? layer : e) + .toList(); + return _saveState( + emit, + state: current.copyWith( + page: current.page.copyWith(layers: newLayers), + ), + ); + }); + on((event, emit) { final current = state; if (current is! DocumentLoadSuccess) return; diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index fc52d09641e0..602782b55efd 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -620,5 +620,18 @@ "homeScreen": "Home screen", "lastNote": "Last note", "newNote": "New note", - "convertToLayer": "Convert to layer" + "convertToLayer": "Convert to layer", + "merge": "Merge", + "up": "Up", + "down": "Down", + "other": "Other", + "countElements": "{count,plural, =0{No elements} =1{1 element} other{{count} elements}}", + "@countElements": { + "placeholders": { + "count": { + "type": "int", + "example": "1" + } + } + } } diff --git a/app/lib/settings/general.dart b/app/lib/settings/general.dart index ab2ece239182..298478f31283 100644 --- a/app/lib/settings/general.dart +++ b/app/lib/settings/general.dart @@ -246,7 +246,7 @@ class _GeneralSettingsPageState extends State { PhosphorIconsLight.identificationCard), title: Text(AppLocalizations.of(context).imprint), onTap: () => launchUrl( - Uri.https('go.linwood.dev', 'impress'), + Uri.https('go.linwood.dev', 'imprint'), mode: LaunchMode.externalApplication)), ListTile( leading: diff --git a/app/lib/views/navigator/layers.dart b/app/lib/views/navigator/layers.dart index 280f3adb96a6..34c12b7b6a43 100644 --- a/app/lib/views/navigator/layers.dart +++ b/app/lib/views/navigator/layers.dart @@ -61,6 +61,56 @@ class LayersView extends StatelessWidget { .add(LayerChanged(id, name: value)), key: ValueKey(id), actions: [ + if (layers.length > 1) + SubmenuButton( + leadingIcon: + const PhosphorIcon(PhosphorIconsLight.stack), + menuChildren: [ + MenuItemButton( + leadingIcon: + const PhosphorIcon(PhosphorIconsLight.arrowUp), + onPressed: index <= 0 + ? null + : () => context + .read() + .add(LayersMerged([ + id, + layers[index - 1].id, + ].nonNulls.toList())), + child: Text(AppLocalizations.of(context).up), + ), + MenuItemButton( + leadingIcon: const PhosphorIcon( + PhosphorIconsLight.arrowDown), + onPressed: index >= layers.length - 1 + ? null + : () => context + .read() + .add(LayersMerged([ + id, + layers[index + 1].id, + ].nonNulls.toList())), + child: Text(AppLocalizations.of(context).down), + ), + MenuItemButton( + leadingIcon: + const PhosphorIcon(PhosphorIconsLight.dotsNine), + onPressed: () { + final bloc = context.read(); + showDialog( + context: context, + builder: (context) => BlocProvider.value( + value: bloc, + child: _LayerMergeDialog( + main: id, + ), + )); + }, + child: Text(AppLocalizations.of(context).other), + ), + ], + child: Text(AppLocalizations.of(context).merge), + ), MenuItemButton( leadingIcon: const PhosphorIcon(PhosphorIconsLight.trash), onPressed: currentLayer == layer @@ -116,3 +166,80 @@ class LayersView extends StatelessWidget { ); } } + +class _LayerMergeDialog extends StatefulWidget { + final String? main; + + const _LayerMergeDialog({ + this.main, + }); + + @override + State<_LayerMergeDialog> createState() => _LayerMergeDialogState(); +} + +class _LayerMergeDialogState extends State<_LayerMergeDialog> { + final List _selected = []; + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text(AppLocalizations.of(context).merge), + content: + BlocBuilder(builder: (context, state) { + if (state is! DocumentLoadSuccess) return const SizedBox.shrink(); + final layers = state.page.layers; + final mainLayer = + widget.main == null ? null : state.page.getLayer(widget.main!); + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (mainLayer != null) ...[ + ListTile( + title: Text(mainLayer.name.isEmpty + ? AppLocalizations.of(context).layer + : mainLayer.name), + subtitle: Text(AppLocalizations.of(context) + .countElements(mainLayer.content.length)), + ), + const Divider(), + ], + ...layers + .where((e) => e.id != widget.main) + .map((e) => CheckboxListTile( + value: _selected.contains(e.id), + onChanged: (value) { + setState(() { + if (value == true) { + _selected.add(e.id ?? ''); + } else { + _selected.remove(e.id); + } + }); + }, + title: Text(e.name.isEmpty + ? AppLocalizations.of(context).layer + : e.name), + subtitle: Text(AppLocalizations.of(context) + .countElements(e.content.length)), + )) + ], + ); + }), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text(AppLocalizations.of(context).cancel), + ), + ElevatedButton( + onPressed: () { + context.read().add(LayersMerged( + [if (widget.main != null) widget.main!, ..._selected])); + Navigator.of(context).pop(); + }, + child: Text(AppLocalizations.of(context).merge), + ) + ], + ); + } +} diff --git a/app/pubspec.lock b/app/pubspec.lock index 9e1ab86d6d8b..c5e225ab62d2 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -322,10 +322,10 @@ packages: dependency: transitive description: name: dart_mappable - sha256: "47269caf2060533c29b823ff7fa9706502355ffcb61e7f2a374e3a0fb2f2c3f0" + sha256: f69a961ae8589724ebb542e588f228ae844c5f78028899cbe2cc718977c1b382 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.3.0" dart_style: dependency: transitive description: @@ -537,10 +537,10 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: aa06fec78de2190f3db4319dd60fdc8d12b2626e93ef9828633928c2dcaea840 + sha256: ee5c9bd2b74ea8676442fd4ab876b5d41681df49276488854d6c81a5377c0ef1 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -1205,10 +1205,10 @@ packages: dependency: "direct main" description: name: share_plus - sha256: "334fcdf0ef9c0df0e3b428faebcac9568f35c747d59831474b2fc56e156d244e" + sha256: "3af2cda1752e5c24f2fc04b6083b40f013ffe84fb90472f30c6499a9213d5442" url: "https://pub.dev" source: hosted - version: "10.1.0" + version: "10.1.1" share_plus_platform_interface: dependency: transitive description: @@ -1594,10 +1594,10 @@ packages: dependency: transitive description: name: win32 - sha256: e5c39a90447e7c81cfec14b041cdbd0d0916bd9ebbc7fe02ab69568be703b9bd + sha256: e1d0cc62e65dc2561f5071fcbccecf58ff20c344f8f3dc7d4922df372a11df1f url: "https://pub.dev" source: hosted - version: "5.6.0" + version: "5.7.1" win32_registry: dependency: transitive description: diff --git a/docs/package.json b/docs/package.json index e6eca13ed37e..c27fa5e5d13c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,9 +14,9 @@ "@astrojs/react": "^3.6.2", "@astrojs/starlight": "^0.28.3", "@phosphor-icons/react": "^2.1.7", - "@types/react": "^18.3.11", + "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "astro": "^4.16.6", + "astro": "^4.16.7", "react": "^18.3.1", "react-dom": "^18.3.1", "remark-gemoji": "^8.0.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index a4d11c8d394f..106c4d258a26 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -13,22 +13,22 @@ importers: version: 0.9.4(typescript@5.6.3) '@astrojs/react': specifier: ^3.6.2 - version: 3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.9(sass@1.80.3)(terser@5.34.1)) + version: 3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.10(sass@1.80.3)(terser@5.36.0)) '@astrojs/starlight': specifier: ^0.28.3 - version: 0.28.3(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3)) + version: 0.28.3(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3)) '@phosphor-icons/react': specifier: ^2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': - specifier: ^18.3.11 - version: 18.3.11 + specifier: ^18.3.12 + version: 18.3.12 '@types/react-dom': specifier: ^18.3.1 version: 18.3.1 astro: - specifier: ^4.16.6 - version: 4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3) + specifier: ^4.16.7 + version: 4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -119,111 +119,111 @@ packages: '@astrojs/yaml2ts@0.2.1': resolution: {integrity: sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==} - '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + '@babel/code-frame@7.25.9': + resolution: {integrity: sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.8': - resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} + '@babel/compat-data@7.25.9': + resolution: {integrity: sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.8': - resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} + '@babel/core@7.25.9': + resolution: {integrity: sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + '@babel/generator@7.25.9': + resolution: {integrity: sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.7': - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + '@babel/helper-module-transforms@7.25.9': + resolution: {integrity: sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + '@babel/helpers@7.25.9': + resolution: {integrity: sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.25.7': - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + '@babel/highlight@7.25.9': + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.8': - resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + '@babel/parser@7.25.9': + resolution: {integrity: sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.25.7': - resolution: {integrity: sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.7': - resolution: {integrity: sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.7': - resolution: {integrity: sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==} + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.7': - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.25.9': + resolution: {integrity: sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.8': - resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + '@babel/types@7.25.9': + resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} engines: {node: '>=6.9.0'} '@ctrl/tinycolor@4.1.0': @@ -814,8 +814,8 @@ packages: '@types/react-dom@18.3.1': resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} - '@types/react@18.3.11': - resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -829,8 +829,8 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitejs/plugin-react@4.3.2': - resolution: {integrity: sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==} + '@vitejs/plugin-react@4.3.3': + resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 @@ -922,8 +922,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^3.3.0 - astro@4.16.6: - resolution: {integrity: sha512-LMMbjr+4aN26MOyJzTdjM+Y+srpAIkx7IX9IcdF3eHQLGr8PgkioZp+VQExRfioDIyA2HY6ottVg3QccTzJqYA==} + astro@4.16.7: + resolution: {integrity: sha512-nON+8MUEkWTFwXbS4zsQIq4t0Fs42eulM4x236AL+qNnWfqNAOOqAnFxO1dxfJ1q+XopIBbbT9Mtev+0zH47PQ==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -954,8 +954,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1120,8 +1120,8 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - electron-to-chromium@1.5.41: - resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} + electron-to-chromium@1.5.43: + resolution: {integrity: sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==} emmet@2.4.11: resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} @@ -1353,8 +1353,8 @@ packages: http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - i18next@23.16.0: - resolution: {integrity: sha512-Ni3CG6c14teOogY19YNRl+kYaE/Rb59khy0VyHVn4uOZ97E2E/Yziyi6r3C3s9+wacjdLZiq/LLYyx+Cgd+FCw==} + i18next@23.16.2: + resolution: {integrity: sha512-dFyxwLXxEQK32f6tITBMaRht25mZPJhQ0WbC0p3bO2mWBal9lABTMqSka5k+GLSRWLzeJBKDpH7BeIA9TZI7Jg==} immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} @@ -1510,8 +1510,8 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} mdast-util-definitions@6.0.0: resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} @@ -2063,18 +2063,14 @@ packages: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - terser@5.34.1: - resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true tinyexec@0.3.1: resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2176,8 +2172,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.4.9: - resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} + vite@5.4.10: + resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2467,12 +2463,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@3.1.8(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3))': + '@astrojs/mdx@3.1.8(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3))': dependencies: '@astrojs/markdown-remark': 5.3.0 '@mdx-js/mdx': 3.1.0(acorn@8.13.0) acorn: 8.13.0 - astro: 4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3) + astro: 4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3) es-module-lexer: 1.5.4 estree-util-visit: 2.0.0 gray-matter: 4.0.3 @@ -2491,11 +2487,11 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/react@3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.9(sass@1.80.3)(terser@5.34.1))': + '@astrojs/react@3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.10(sass@1.80.3)(terser@5.36.0))': dependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 '@types/react-dom': 18.3.1 - '@vitejs/plugin-react': 4.3.2(vite@5.4.9(sass@1.80.3)(terser@5.34.1)) + '@vitejs/plugin-react': 4.3.3(vite@5.4.10(sass@1.80.3)(terser@5.36.0)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.5.3 @@ -2509,21 +2505,21 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.23.8 - '@astrojs/starlight@0.28.3(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3))': + '@astrojs/starlight@0.28.3(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3))': dependencies: - '@astrojs/mdx': 3.1.8(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3)) + '@astrojs/mdx': 3.1.8(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3)) '@astrojs/sitemap': 3.2.1 '@pagefind/default-ui': 1.1.1 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - astro: 4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3) - astro-expressive-code: 0.35.6(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3)) + astro: 4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3) + astro-expressive-code: 0.35.6(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.3 hast-util-to-string: 3.0.1 hastscript: 9.0.0 - i18next: 23.16.0 + i18next: 23.16.2 mdast-util-directive: 3.0.0 mdast-util-to-markdown: 2.1.0 mdast-util-to-string: 4.0.0 @@ -2553,25 +2549,25 @@ snapshots: dependencies: yaml: 2.6.0 - '@babel/code-frame@7.25.7': + '@babel/code-frame@7.25.9': dependencies: - '@babel/highlight': 7.25.7 + '@babel/highlight': 7.25.9 picocolors: 1.1.1 - '@babel/compat-data@7.25.8': {} + '@babel/compat-data@7.25.9': {} - '@babel/core@7.25.8': + '@babel/core@7.25.9': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) - '@babel/helpers': 7.25.7 - '@babel/parser': 7.25.8 - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.8 + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helpers': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -2580,126 +2576,125 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.7': + '@babel/generator@7.25.9': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.25.9 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.25.7': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.25.9 - '@babel/helper-compilation-targets@7.25.7': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.25.8 - '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + '@babel/compat-data': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.25.7': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.8 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': + '@babel/helper-module-transforms@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.8 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.7': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-simple-access@7.25.7': + '@babel/helper-simple-access@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.8 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.7': {} + '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.25.7': {} + '@babel/helper-validator-option@7.25.9': {} - '@babel/helpers@7.25.7': + '@babel/helpers@7.25.9': dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.8 + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 - '@babel/highlight@7.25.7': + '@babel/highlight@7.25.9': dependencies: - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.25.8': + '@babel/parser@7.25.9': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.25.9 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.8 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.8)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.8 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.8)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.8 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.8)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.25.9)': dependencies: - '@babel/core': 7.25.8 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8) - '@babel/types': 7.25.8 + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.9) + '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/runtime@7.25.7': + '@babel/runtime@7.25.9': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.7': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.8 - '@babel/types': 7.25.8 + '@babel/code-frame': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 - '@babel/traverse@7.25.7': + '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/parser': 7.25.8 - '@babel/template': 7.25.7 - '@babel/types': 7.25.8 + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.8': + '@babel/types@7.25.9': dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@ctrl/tinycolor@4.1.0': {} @@ -3134,24 +3129,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.8 - '@babel/types': 7.25.8 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.25.9 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.8 - '@babel/types': 7.25.8 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.8 + '@babel/types': 7.25.9 '@types/cookie@0.6.0': {} @@ -3187,9 +3182,9 @@ snapshots: '@types/react-dom@18.3.1': dependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 - '@types/react@18.3.11': + '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 @@ -3204,14 +3199,14 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.2(vite@5.4.9(sass@1.80.3)(terser@5.34.1))': + '@vitejs/plugin-react@4.3.3(vite@5.4.10(sass@1.80.3)(terser@5.36.0))': dependencies: - '@babel/core': 7.25.8 - '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.8) - '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.8) + '@babel/core': 7.25.9 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.25.9) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.9(sass@1.80.3)(terser@5.34.1) + vite: 5.4.10(sass@1.80.3)(terser@5.36.0) transitivePeerDependencies: - supports-color @@ -3310,20 +3305,20 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.35.6(astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3)): + astro-expressive-code@0.35.6(astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3)): dependencies: - astro: 4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3) + astro: 4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3) rehype-expressive-code: 0.35.6 - astro@4.16.6(rollup@4.24.0)(sass@1.80.3)(terser@5.34.1)(typescript@5.6.3): + astro@4.16.7(rollup@4.24.0)(sass@1.80.3)(terser@5.36.0)(typescript@5.6.3): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 '@astrojs/markdown-remark': 5.3.0 '@astrojs/telemetry': 3.1.0 - '@babel/core': 7.25.8 - '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.25.8) - '@babel/types': 7.25.8 + '@babel/core': 7.25.9 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.25.9) + '@babel/types': 7.25.9 '@oslojs/encoding': 1.1.0 '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/babel__core': 7.20.5 @@ -3371,8 +3366,8 @@ snapshots: tsconfck: 3.1.4(typescript@5.6.3) unist-util-visit: 5.0.0 vfile: 6.0.3 - vite: 5.4.9(sass@1.80.3)(terser@5.34.1) - vitefu: 1.0.3(vite@5.4.9(sass@1.80.3)(terser@5.34.1)) + vite: 5.4.10(sass@1.80.3)(terser@5.36.0) + vitefu: 1.0.3(vite@5.4.10(sass@1.80.3)(terser@5.36.0)) which-pm: 3.0.0 xxhash-wasm: 1.0.2 yargs-parser: 21.1.1 @@ -3425,12 +3420,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.0: + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001669 - electron-to-chromium: 1.5.41 + electron-to-chromium: 1.5.43 node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) + update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-from@1.1.2: optional: true @@ -3552,7 +3547,7 @@ snapshots: dset@3.1.4: {} - electron-to-chromium@1.5.41: {} + electron-to-chromium@1.5.43: {} emmet@2.4.11: dependencies: @@ -3934,9 +3929,9 @@ snapshots: http-cache-semantics@4.1.1: {} - i18next@23.16.0: + i18next@23.16.2: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.25.9 immutable@4.3.7: {} @@ -4050,13 +4045,13 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.25.8 - '@babel/types': 7.25.8 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 source-map-js: 1.2.1 markdown-extensions@2.0.0: {} - markdown-table@3.0.3: {} + markdown-table@3.0.4: {} mdast-util-definitions@6.0.0: dependencies: @@ -4131,7 +4126,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - markdown-table: 3.0.3 + markdown-table: 3.0.4 mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: @@ -5027,7 +5022,7 @@ snapshots: dependencies: has-flag: 3.0.0 - terser@5.34.1: + terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.13.0 @@ -5037,8 +5032,6 @@ snapshots: tinyexec@0.3.1: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -5132,9 +5125,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - update-browserslist-db@1.1.1(browserslist@4.24.0): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -5155,7 +5148,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.9(sass@1.80.3)(terser@5.34.1): + vite@5.4.10(sass@1.80.3)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -5163,11 +5156,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 sass: 1.80.3 - terser: 5.34.1 + terser: 5.36.0 - vitefu@1.0.3(vite@5.4.9(sass@1.80.3)(terser@5.34.1)): + vitefu@1.0.3(vite@5.4.10(sass@1.80.3)(terser@5.36.0)): optionalDependencies: - vite: 5.4.9(sass@1.80.3)(terser@5.34.1) + vite: 5.4.10(sass@1.80.3)(terser@5.36.0) volar-service-css@0.0.61(@volar/language-service@2.4.6): dependencies: diff --git a/metadata/en-US/changelogs/120.txt b/metadata/en-US/changelogs/120.txt new file mode 100644 index 000000000000..779cf0c72931 --- /dev/null +++ b/metadata/en-US/changelogs/120.txt @@ -0,0 +1,3 @@ +* Add layer merging + +Read more here: https://linwood.dev/butterfly/2.3.0-beta.0 \ No newline at end of file diff --git a/tools/pubspec.lock b/tools/pubspec.lock index caeb8de661ed..ab3cedcc454e 100644 --- a/tools/pubspec.lock +++ b/tools/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" http: dependency: "direct main" description: @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" + sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.1.1" intl: dependency: "direct main" description: