From c0368f1fbcd53d8a8dbf35f137258d470512278b Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Fri, 3 Jan 2025 17:53:38 +0100 Subject: [PATCH] Add more figure editing fields in dialog --- api/lib/src/models/background.dart | 15 +- api/lib/src/models/background.mapper.dart | 6 +- api/lib/src/models/data.dart | 14 +- api/lib/src/models/definition.dart | 45 ++--- api/lib/src/models/definition.mapper.dart | 18 +- api/lib/src/models/translation.dart | 10 +- api/lib/src/models/visual.dart | 18 +- api/lib/src/models/visual.mapper.dart | 71 ++++++++ api/pubspec.lock | 12 +- api/pubspec.yaml | 4 +- app/lib/bloc/editor.dart | 11 +- app/lib/helpers/vector.dart | 7 + app/lib/l10n/app_en.arb | 6 +- app/lib/main.dart | 1 - app/lib/pages/editor/figures.dart | 174 ++++++++++++++---- app/lib/pages/editor/texture.dart | 54 ++++++ app/lib/pages/packs/editor.dart | 5 + app/lib/widgets/offset.dart | 100 +++++++++++ app/pubspec.lock | 64 +++---- app/pubspec.yaml | 8 +- docs/package.json | 2 +- docs/pnpm-lock.yaml | 210 +++++++++++----------- tools/pubspec.lock | 32 +++- tools/pubspec.yaml | 6 +- 24 files changed, 644 insertions(+), 249 deletions(-) create mode 100644 api/lib/src/models/visual.mapper.dart create mode 100644 app/lib/pages/editor/texture.dart create mode 100644 app/lib/widgets/offset.dart diff --git a/api/lib/src/models/background.dart b/api/lib/src/models/background.dart index 3607a575..3d097f98 100644 --- a/api/lib/src/models/background.dart +++ b/api/lib/src/models/background.dart @@ -5,19 +5,14 @@ import 'visual.dart'; part 'background.mapper.dart'; @MappableClass() -class BackgroundDefinition with BackgroundDefinitionMappable, VisualDefinition { - @override - final VectorDefinition offset; - @override - final VectorDefinition? size; - @override - final String texture; +class BackgroundDefinition extends VisualDefinition + with BackgroundDefinitionMappable { final int priority; BackgroundDefinition({ - this.offset = VectorDefinition.zero, - this.size, - required this.texture, + super.offset, + super.size, + required super.texture, this.priority = 0, }); } diff --git a/api/lib/src/models/background.mapper.dart b/api/lib/src/models/background.mapper.dart index 8049743a..0d5c6519 100644 --- a/api/lib/src/models/background.mapper.dart +++ b/api/lib/src/models/background.mapper.dart @@ -13,6 +13,7 @@ class BackgroundDefinitionMapper extends ClassMapperBase { static BackgroundDefinitionMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = BackgroundDefinitionMapper._()); + VisualDefinitionMapper.ensureInitialized(); VectorDefinitionMapper.ensureInitialized(); } return _instance!; @@ -106,9 +107,12 @@ extension BackgroundDefinitionValueCopy<$R, $Out> abstract class BackgroundDefinitionCopyWith< $R, $In extends BackgroundDefinition, - $Out> implements ClassCopyWith<$R, $In, $Out> { + $Out> implements VisualDefinitionCopyWith<$R, $In, $Out> { + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get offset; + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition>? get size; + @override $R call( {VectorDefinition? offset, VectorDefinition? size, diff --git a/api/lib/src/models/data.dart b/api/lib/src/models/data.dart index ad3c4962..545fd69e 100644 --- a/api/lib/src/models/data.dart +++ b/api/lib/src/models/data.dart @@ -192,13 +192,16 @@ class SetonixData extends ArchiveData { return MapEntry(e, translation); }).nonNulls; - PackTranslation? getTranslation(String id) { + PackTranslation? getTranslation([String id = kFallbackLocale]) { final data = getAsset('$kPackTranslationsPath/$id.json'); if (data == null) return null; final content = utf8.decode(data); return PackTranslationMapper.fromJson(content); } + PackTranslation getTranslationOrDefault([String id = kFallbackLocale]) => + getTranslation(id) ?? PackTranslation(); + SetonixData setMetadata(FileMetadata metadata) => setAsset( kPackMetadataPath, utf8.encode(metadata.toJson()), @@ -209,7 +212,7 @@ class SetonixData extends ArchiveData { SetonixData(archive, state: state); TranslationsStore getTranslationsStore( - {required String Function() getLocale}) => + {String? Function() getLocale = getDefaultLocale}) => TranslationsStore( translations: getAllTranslations(), getLocale: getLocale, @@ -233,6 +236,13 @@ class SetonixData extends ArchiveData { String background, BackgroundDefinition definition) => setAsset('$kPackBackgroundsPath/$background.json', utf8.encode(definition.toJson())); + + SetonixData setTranslation(PackTranslation translation, + [String locale = kFallbackLocale]) => + setAsset( + '$kPackTranslationsPath/$locale.json', + utf8.encode(translation.toJson()), + ); } class SetonixFile { diff --git a/api/lib/src/models/definition.dart b/api/lib/src/models/definition.dart index dce8ec54..9e36e4a1 100644 --- a/api/lib/src/models/definition.dart +++ b/api/lib/src/models/definition.dart @@ -21,53 +21,36 @@ class FigureDefinition extends GameObjectDefinition } @MappableClass() -class BoardDefinition with BoardDefinitionMappable, VisualDefinition { - @override - final VectorDefinition offset; - @override - final VectorDefinition? size; - @override - final String texture; +class BoardDefinition extends VisualDefinition with BoardDefinitionMappable { final VectorDefinition tiles; BoardDefinition({ - this.offset = VectorDefinition.zero, - this.size, - required this.texture, + super.offset, + super.size, + required super.texture, this.tiles = VectorDefinition.one, }); } @MappableClass() -class VariationDefinition with VariationDefinitionMappable, VisualDefinition { +class VariationDefinition extends VisualDefinition + with VariationDefinitionMappable { final String? category; - @override - final String texture; - @override - final VectorDefinition offset; - @override - final VectorDefinition? size; VariationDefinition({ this.category, - required this.texture, - this.offset = VectorDefinition.zero, - this.size, + required super.texture, + super.offset, + super.size, }); } @MappableClass() -class FigureBackDefinition with FigureBackDefinitionMappable, VisualDefinition { - @override - final String texture; - @override - final VectorDefinition offset; - @override - final VectorDefinition? size; - +class FigureBackDefinition extends VisualDefinition + with FigureBackDefinitionMappable { FigureBackDefinition({ - required this.texture, - this.offset = VectorDefinition.zero, - this.size, + required super.texture, + super.offset, + super.size, }); } diff --git a/api/lib/src/models/definition.mapper.dart b/api/lib/src/models/definition.mapper.dart index 3debd9b1..1754168d 100644 --- a/api/lib/src/models/definition.mapper.dart +++ b/api/lib/src/models/definition.mapper.dart @@ -166,6 +166,7 @@ class VariationDefinitionMapper extends ClassMapperBase { static VariationDefinitionMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = VariationDefinitionMapper._()); + VisualDefinitionMapper.ensureInitialized(); VectorDefinitionMapper.ensureInitialized(); } return _instance!; @@ -257,9 +258,12 @@ extension VariationDefinitionValueCopy<$R, $Out> } abstract class VariationDefinitionCopyWith<$R, $In extends VariationDefinition, - $Out> implements ClassCopyWith<$R, $In, $Out> { + $Out> implements VisualDefinitionCopyWith<$R, $In, $Out> { + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get offset; + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition>? get size; + @override $R call( {String? category, String? texture, @@ -315,6 +319,7 @@ class FigureBackDefinitionMapper extends ClassMapperBase { static FigureBackDefinitionMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = FigureBackDefinitionMapper._()); + VisualDefinitionMapper.ensureInitialized(); VectorDefinitionMapper.ensureInitialized(); } return _instance!; @@ -403,9 +408,12 @@ extension FigureBackDefinitionValueCopy<$R, $Out> abstract class FigureBackDefinitionCopyWith< $R, $In extends FigureBackDefinition, - $Out> implements ClassCopyWith<$R, $In, $Out> { + $Out> implements VisualDefinitionCopyWith<$R, $In, $Out> { + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get offset; + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition>? get size; + @override $R call({String? texture, VectorDefinition? offset, VectorDefinition? size}); FigureBackDefinitionCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( Then<$Out2, $R2> t); @@ -451,6 +459,7 @@ class BoardDefinitionMapper extends ClassMapperBase { static BoardDefinitionMapper ensureInitialized() { if (_instance == null) { MapperContainer.globals.use(_instance = BoardDefinitionMapper._()); + VisualDefinitionMapper.ensureInitialized(); VectorDefinitionMapper.ensureInitialized(); } return _instance!; @@ -540,10 +549,13 @@ extension BoardDefinitionValueCopy<$R, $Out> } abstract class BoardDefinitionCopyWith<$R, $In extends BoardDefinition, $Out> - implements ClassCopyWith<$R, $In, $Out> { + implements VisualDefinitionCopyWith<$R, $In, $Out> { + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get offset; + @override VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition>? get size; VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get tiles; + @override $R call( {VectorDefinition? offset, VectorDefinition? size, diff --git a/api/lib/src/models/translation.dart b/api/lib/src/models/translation.dart index 0cd59048..23179de6 100644 --- a/api/lib/src/models/translation.dart +++ b/api/lib/src/models/translation.dart @@ -2,17 +2,21 @@ import 'package:dart_mappable/dart_mappable.dart'; part 'translation.mapper.dart'; +const kFallbackLocale = 'en'; + +String? getDefaultLocale() => null; + class TranslationsStore { - final String Function() getLocale; + final String? Function() getLocale; final Map translations; TranslationsStore({ Iterable> translations = const [], - required this.getLocale, + this.getLocale = getDefaultLocale, }) : translations = Map.fromEntries(translations); PackTranslation getTranslation([String? locale]) => - (locale == null ? null : translations[locale]) ?? + (locale == null ? translations[kFallbackLocale] : translations[locale]) ?? translations[getLocale()] ?? PackTranslation(); diff --git a/api/lib/src/models/visual.dart b/api/lib/src/models/visual.dart index ca8e40f5..6e8d1217 100644 --- a/api/lib/src/models/visual.dart +++ b/api/lib/src/models/visual.dart @@ -1,7 +1,17 @@ +import 'package:dart_mappable/dart_mappable.dart'; + import 'vector.dart'; -mixin VisualDefinition { - String get texture; - VectorDefinition get offset; - VectorDefinition? get size; +part 'visual.mapper.dart'; + +@MappableClass() +abstract class VisualDefinition with VisualDefinitionMappable { + final String texture; + final VectorDefinition offset; + final VectorDefinition? size; + + VisualDefinition( + {required this.texture, + this.offset = VectorDefinition.zero, + required this.size}); } diff --git a/api/lib/src/models/visual.mapper.dart b/api/lib/src/models/visual.mapper.dart new file mode 100644 index 00000000..8bb1efe9 --- /dev/null +++ b/api/lib/src/models/visual.mapper.dart @@ -0,0 +1,71 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member +// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter + +part of 'visual.dart'; + +class VisualDefinitionMapper extends ClassMapperBase { + VisualDefinitionMapper._(); + + static VisualDefinitionMapper? _instance; + static VisualDefinitionMapper ensureInitialized() { + if (_instance == null) { + MapperContainer.globals.use(_instance = VisualDefinitionMapper._()); + VectorDefinitionMapper.ensureInitialized(); + } + return _instance!; + } + + @override + final String id = 'VisualDefinition'; + + static String _$texture(VisualDefinition v) => v.texture; + static const Field _f$texture = + Field('texture', _$texture); + static VectorDefinition _$offset(VisualDefinition v) => v.offset; + static const Field _f$offset = + Field('offset', _$offset, opt: true, def: VectorDefinition.zero); + static VectorDefinition? _$size(VisualDefinition v) => v.size; + static const Field _f$size = + Field('size', _$size); + + @override + final MappableFields fields = const { + #texture: _f$texture, + #offset: _f$offset, + #size: _f$size, + }; + + static VisualDefinition _instantiate(DecodingData data) { + throw MapperException.missingConstructor('VisualDefinition'); + } + + @override + final Function instantiate = _instantiate; + + static VisualDefinition fromMap(Map map) { + return ensureInitialized().decodeMap(map); + } + + static VisualDefinition fromJson(String json) { + return ensureInitialized().decodeJson(json); + } +} + +mixin VisualDefinitionMappable { + String toJson(); + Map toMap(); + VisualDefinitionCopyWith + get copyWith; +} + +abstract class VisualDefinitionCopyWith<$R, $In extends VisualDefinition, $Out> + implements ClassCopyWith<$R, $In, $Out> { + VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition> get offset; + VectorDefinitionCopyWith<$R, VectorDefinition, VectorDefinition>? get size; + $R call({String? texture, VectorDefinition? offset, VectorDefinition? size}); + VisualDefinitionCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>( + Then<$Out2, $R2> t); +} diff --git a/api/pubspec.lock b/api/pubspec.lock index 3b353a4c..fe767f28 100644 --- a/api/pubspec.lock +++ b/api/pubspec.lock @@ -170,8 +170,8 @@ packages: dependency: "direct main" description: path: "packages/dart_leap" - ref: dfda6c2e3cef2e29511f97e9470fd4deb8e0c573 - resolved-ref: dfda6c2e3cef2e29511f97e9470fd4deb8e0c573 + ref: db69a03082e6811c58dc2d0e5c23d04305e1623f + resolved-ref: db69a03082e6811c58dc2d0e5c23d04305e1623f url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" @@ -259,10 +259,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.2" io: dependency: transitive description: @@ -307,8 +307,8 @@ packages: dependency: "direct main" description: path: "packages/lw_file_system_api" - ref: "2036c923bb93afcefaadd8108c7e789513ae7082" - resolved-ref: "2036c923bb93afcefaadd8108c7e789513ae7082" + ref: "5ab1b96bea6ef0e0c07629ff4e7152b4437cf8ee" + resolved-ref: "5ab1b96bea6ef0e0c07629ff4e7152b4437cf8ee" url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" diff --git a/api/pubspec.yaml b/api/pubspec.yaml index b2dc6e7c..4301b0b2 100644 --- a/api/pubspec.yaml +++ b/api/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: lw_file_system_api: git: url: https://github.com/LinwoodDev/dart_pkgs - ref: 2036c923bb93afcefaadd8108c7e789513ae7082 + ref: 5ab1b96bea6ef0e0c07629ff4e7152b4437cf8ee path: packages/lw_file_system_api networker: git: @@ -25,7 +25,7 @@ dependencies: git: url: https://github.com/LinwoodDev/dart_pkgs path: packages/dart_leap - ref: dfda6c2e3cef2e29511f97e9470fd4deb8e0c573 + ref: db69a03082e6811c58dc2d0e5c23d04305e1623f crypto: ^3.0.5 collection: ^1.18.0 # path: ^1.8.0 diff --git a/app/lib/bloc/editor.dart b/app/lib/bloc/editor.dart index 69fb6f58..b6511369 100644 --- a/app/lib/bloc/editor.dart +++ b/app/lib/bloc/editor.dart @@ -14,13 +14,13 @@ class EditorCubit extends Cubit { void onChange(Change change) { super.onChange(change); - save(); + _save(change.nextState); } bool _needsSave = false; bool _isSaving = false; - Future save() async { + Future _save(SetonixData data) async { _needsSave = true; if (_isSaving) { return; @@ -28,7 +28,7 @@ class EditorCubit extends Cubit { _isSaving = true; while (_needsSave) { _needsSave = false; - await fileSystem.editorSystem.updateFile(path, state); + await fileSystem.editorSystem.updateFile(path, data); } _isSaving = false; } @@ -56,4 +56,9 @@ class EditorCubit extends Cubit { void setBackground(String background, BackgroundDefinition definition) { emit(state.setBackground(background, definition)); } + + void setTranslation(PackTranslation translation, + [String locale = kFallbackLocale]) { + emit(state.setTranslation(translation, locale)); + } } diff --git a/app/lib/helpers/vector.dart b/app/lib/helpers/vector.dart index 9766703f..7488745f 100644 --- a/app/lib/helpers/vector.dart +++ b/app/lib/helpers/vector.dart @@ -1,3 +1,5 @@ +import 'dart:ui'; + import 'package:flame/components.dart'; import 'package:setonix_api/setonix_api.dart'; @@ -5,6 +7,11 @@ extension VectorToDefinition on Vector2 { VectorDefinition toDefinition() => VectorDefinition(x.round(), y.round()); } +extension OffsetToDefinition on Offset { + VectorDefinition toDefinition() => VectorDefinition(dx.round(), dy.round()); +} + extension DefinitionToVector on VectorDefinition { Vector2 toVector() => Vector2(x.toDouble(), y.toDouble()); + Offset toOffset() => Offset(x.toDouble(), y.toDouble()); } diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index 65e5f0b2..c9d91b30 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -214,5 +214,9 @@ "type": "String" } } - } + }, + "variations": "Variations", + "offset": "Offset", + "wholeSizeClickCustomize": "Whole size, click to customize", + "clear": "Clear" } diff --git a/app/lib/main.dart b/app/lib/main.dart index 7bfaec59..6dd9a011 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -6,7 +6,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; -import 'package:material_leap/l10n/leap_localizations.dart'; import 'package:material_leap/material_leap.dart'; import 'package:setonix/pages/editor/shell.dart'; import 'package:setonix/pages/game/page.dart'; diff --git a/app/lib/pages/editor/figures.dart b/app/lib/pages/editor/figures.dart index 20f9d6ab..e62bc1cc 100644 --- a/app/lib/pages/editor/figures.dart +++ b/app/lib/pages/editor/figures.dart @@ -4,6 +4,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:material_leap/material_leap.dart'; import 'package:phosphor_flutter/phosphor_flutter.dart'; import 'package:setonix/bloc/editor.dart'; +import 'package:setonix/pages/editor/texture.dart'; import 'package:setonix_api/setonix_api.dart'; class FiguresEditorPage extends StatelessWidget { @@ -93,11 +94,14 @@ class FigureEditorDialog extends StatefulWidget { class _FigureEditorDialogState extends State { late FigureDefinition? _value; + late PackTranslation _translation; @override void initState() { super.initState(); - _value = context.read().state.getFigure(widget.name); + final editorState = context.read().state; + _value = editorState.getFigure(widget.name); + _translation = editorState.getTranslationOrDefault(); } @override @@ -106,40 +110,148 @@ class _FigureEditorDialogState extends State { if (value == null) { return const SizedBox(); } - return ResponsiveAlertDialog( - title: Text(widget.name), - constraints: const BoxConstraints(maxWidth: LeapBreakpoints.compact), - content: ListView( - shrinkWrap: true, - children: [ - CheckboxListTile( - value: value.rollable, - title: Text(AppLocalizations.of(context).roll), - onChanged: (bool? value) { - if (value != null) { - setState(() { - _value = _value?.copyWith(rollable: value); - }); - } + final variations = value.variations.entries.toList(); + return DefaultTabController( + length: 3, + child: ResponsiveAlertDialog( + title: Text(widget.name), + constraints: const BoxConstraints( + maxWidth: LeapBreakpoints.compact, maxHeight: 600), + content: Column( + children: [ + TabBar( + tabs: [ + HorizontalTab( + icon: const Icon(PhosphorIconsLight.textT), + label: Text(AppLocalizations.of(context).general), + ), + HorizontalTab( + icon: const Icon(PhosphorIconsLight.spade), + label: Text(AppLocalizations.of(context).back), + ), + HorizontalTab( + icon: const Icon(PhosphorIconsLight.stack), + label: Text(AppLocalizations.of(context).variations), + ), + ], + ), + const SizedBox(height: 8), + Expanded( + child: TabBarView( + children: [ + ListView( + shrinkWrap: true, + children: [ + TextFormField( + decoration: InputDecoration( + labelText: AppLocalizations.of(context).name, + filled: true, + icon: const Icon(PhosphorIconsLight.textT), + ), + initialValue: _translation.figures[widget.name]?.name, + onChanged: (value) { + final translation = FigureTranslation(name: value); + _translation = _translation.copyWith.figures + .put(widget.name, translation); + }, + ), + CheckboxListTile( + value: value.rollable, + title: Text(AppLocalizations.of(context).roll), + onChanged: (bool? value) { + if (value != null) { + setState(() { + _value = _value?.copyWith(rollable: value); + }); + } + }, + ), + ], + ), + SingleChildScrollView( + child: VisualEditingView( + value: value.back, + onChanged: (v) { + setState(() { + _value = value.copyWith(back: v); + }); + }), + ), + Stack( + children: [ + variations.isEmpty + ? Center( + child: Text(AppLocalizations.of(context).noData)) + : ListView.builder( + itemCount: variations.length, + itemBuilder: (context, index) { + final variation = variations[index]; + return ListTile( + title: Text(variation.key), + trailing: IconButton( + icon: const Icon(PhosphorIconsLight.trash), + onPressed: () { + setState(() { + _value = value.copyWith.variations + .remove(variation.key); + }); + }, + ), + ); + }, + ), + Align( + alignment: Alignment.bottomCenter, + child: FloatingActionButton.extended( + onPressed: () async { + final result = await showDialog( + context: context, + builder: (context) => NameDialog( + validator: defaultNameValidator( + context, + value.variations.keys.toList(), + ), + ), + ); + if (result == null) return; + setState(() { + _value = value.copyWith.variations.put( + result, + VariationDefinition(texture: ''), + ); + }); + }, + label: Text(AppLocalizations.of(context).create), + icon: Icon(PhosphorIconsLight.plus), + ), + ), + ], + ), + ], + ), + ), + ], + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text(AppLocalizations.of(context).cancel), + ), + ElevatedButton( + onPressed: () { + context.read().setFigure(widget.name, value); + context.read().setTranslation( + _translation, + widget.name, + ); + Navigator.of(context).pop(); }, + child: Text(AppLocalizations.of(context).save), ), ], ), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(); - }, - child: Text(AppLocalizations.of(context).cancel), - ), - ElevatedButton( - onPressed: () { - context.read().setFigure(widget.name, value); - Navigator.of(context).pop(); - }, - child: Text(AppLocalizations.of(context).save), - ), - ], ); } } diff --git a/app/lib/pages/editor/texture.dart b/app/lib/pages/editor/texture.dart new file mode 100644 index 00000000..4c9fcf0e --- /dev/null +++ b/app/lib/pages/editor/texture.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:phosphor_flutter/phosphor_flutter.dart'; +import 'package:setonix/helpers/vector.dart'; +import 'package:setonix/widgets/offset.dart'; +import 'package:setonix_api/setonix_api.dart'; + +class VisualEditingView extends StatelessWidget { + final T value; + final ValueChanged onChanged; + + const VisualEditingView({ + super.key, + required this.value, + required this.onChanged, + }); + + @override + Widget build(BuildContext context) { + final size = value.size; + return Column( + children: [ + OffsetListTile( + value: value.offset.toOffset(), + title: Text(AppLocalizations.of(context).offset), + fractionDigits: 0, + onChanged: (offset) => + onChanged(value.copyWith(offset: offset.toDefinition()) as T), + ), + const SizedBox(height: 4), + size == null + ? ListTile( + title: Text(AppLocalizations.of(context).size), + subtitle: + Text(AppLocalizations.of(context).wholeSizeClickCustomize), + onTap: () => + onChanged(value.copyWith(size: VectorDefinition.one) as T), + ) + : OffsetListTile( + value: size.toOffset(), + title: Text(AppLocalizations.of(context).size), + fractionDigits: 0, + onChanged: (offset) => onChanged( + value.copyWith(offset: offset.toDefinition()) as T), + trailing: IconButton( + tooltip: AppLocalizations.of(context).clear, + icon: const Icon(PhosphorIconsLight.x), + onPressed: () => onChanged(value.copyWith(size: null) as T), + ), + ), + ], + ); + } +} diff --git a/app/lib/pages/packs/editor.dart b/app/lib/pages/packs/editor.dart index dc5e60fc..3704c924 100644 --- a/app/lib/pages/packs/editor.dart +++ b/app/lib/pages/packs/editor.dart @@ -39,6 +39,11 @@ class _EditorPacksViewState extends State<_EditorPacksView> { ); } final files = snapshot.data ?? []; + if (files.isEmpty) { + return Center( + child: Text(AppLocalizations.of(context).noData), + ); + } return ListView.builder( itemCount: files.length, itemBuilder: (context, index) { diff --git a/app/lib/widgets/offset.dart b/app/lib/widgets/offset.dart new file mode 100644 index 00000000..f9b12a23 --- /dev/null +++ b/app/lib/widgets/offset.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; + +class OffsetListTile extends StatefulWidget { + final Offset value; + final ValueChanged onChanged; + final Widget? title, subtitle, leading, trailing; + final int fractionDigits; + + const OffsetListTile({ + super.key, + required this.value, + required this.onChanged, + this.title, + this.subtitle, + this.leading, + this.trailing, + this.fractionDigits = 2, + }); + + @override + State createState() => _OffsetListTileState(); +} + +class _OffsetListTileState extends State { + final TextEditingController _xController = TextEditingController(), + _yController = TextEditingController(); + + @override + void initState() { + super.initState(); + + _updateValue(widget.value); + } + + @override + void didUpdateWidget(covariant OffsetListTile oldWidget) { + super.didUpdateWidget(oldWidget); + + if (oldWidget.value != widget.value) { + _updateValue(widget.value); + } + } + + void _updateValue(Offset value) { + _xController.text = value.dx.toStringAsFixed(widget.fractionDigits); + _yController.text = value.dy.toStringAsFixed(widget.fractionDigits); + } + + @override + Widget build(BuildContext context) { + return ListTile( + title: widget.title, + subtitle: widget.subtitle, + leading: widget.leading, + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.trailing != null) ...[ + widget.trailing!, + const SizedBox(width: 4), + ], + SizedBox( + width: 100, + child: TextField( + decoration: const InputDecoration( + labelText: 'X', + filled: true, + floatingLabelAlignment: FloatingLabelAlignment.center, + ), + textAlign: TextAlign.center, + keyboardType: TextInputType.number, + controller: _xController, + onChanged: (value) { + widget + .onChanged(Offset(double.parse(value), widget.value.dy)); + }, + ), + ), + const SizedBox(width: 4), + SizedBox( + width: 100, + child: TextField( + decoration: const InputDecoration( + labelText: 'Y', + filled: true, + floatingLabelAlignment: FloatingLabelAlignment.center, + ), + textAlign: TextAlign.center, + keyboardType: TextInputType.number, + controller: _yController, + onChanged: (value) { + widget + .onChanged(Offset(double.parse(value), widget.value.dy)); + }, + ), + ), + ], + )); + } +} diff --git a/app/pubspec.lock b/app/pubspec.lock index 135dfbde..3605332f 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -218,8 +218,8 @@ packages: dependency: transitive description: path: "packages/dart_leap" - ref: dfda6c2e3cef2e29511f97e9470fd4deb8e0c573 - resolved-ref: dfda6c2e3cef2e29511f97e9470fd4deb8e0c573 + ref: db69a03082e6811c58dc2d0e5c23d04305e1623f + resolved-ref: db69a03082e6811c58dc2d0e5c23d04305e1623f url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" @@ -371,42 +371,42 @@ packages: dependency: "direct main" description: name: flame - sha256: c02390443e40a2a9034ac867d0789ab32f215eba4779bff4655a7143eb3d75d0 + sha256: "0bd0d5bfaf270e4c1624f8d966ca42951479d1b59371058898bdd6ce41bce27a" url: "https://pub.dev" source: hosted - version: "1.22.0" + version: "1.23.0" flame_bloc: dependency: "direct main" description: name: flame_bloc - sha256: "0c5180800201d4d2ba37aea8679212d837113f8da166050d73806197d42315f7" + sha256: "7a6cacd9b4d7ddfbe72d3e9facd49c164b084e85dfdd4c2b5a7192bd1da066bb" url: "https://pub.dev" source: hosted - version: "1.12.4" + version: "1.12.5" flame_tiled: dependency: "direct main" description: name: flame_tiled - sha256: a41b35fd2f74adb5f3860103b53d8de750771b0ff34ba67df57b913ff887de63 + sha256: "243851c2609cee2a65c7a1deaf3a1364a73ef985d34bd10b01482a9008122cb4" url: "https://pub.dev" source: hosted - version: "1.21.1" + version: "1.21.2" flex_color_scheme: dependency: "direct main" description: name: flex_color_scheme - sha256: "90f4fe67b9561ae8a4af117df65a8ce9988624025667c54e6d304e65cff77d52" + sha256: "09bea5d776f694c5a67f2229f2aa500cc7cce369322dc6500ab01cf9ad1b4e1a" url: "https://pub.dev" source: hosted - version: "8.0.2" + version: "8.1.0" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334" + sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0 url: "https://pub.dev" source: hosted - version: "3.4.1" + version: "3.5.0" flutter: dependency: "direct main" description: flutter @@ -458,26 +458,26 @@ packages: dependency: transitive description: name: flutter_secure_storage - sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" + sha256: "1913841ac4c7bf57cd2e05b717e1fbff7841b542962feff827b16525a781b3e4" url: "https://pub.dev" source: hosted - version: "9.2.2" + version: "9.2.3" flutter_secure_storage_linux: dependency: transitive description: name: flutter_secure_storage_linux - sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" + sha256: bf7404619d7ab5c0a1151d7c4e802edad8f33535abfbeff2f9e1fe1274e2d705 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" flutter_secure_storage_macos: dependency: transitive description: name: flutter_secure_storage_macos - sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" + sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" flutter_secure_storage_platform_interface: dependency: transitive description: @@ -578,10 +578,10 @@ packages: dependency: transitive description: name: http_parser - sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.2" idb_shim: dependency: "direct main" description: @@ -671,8 +671,8 @@ packages: dependency: "direct main" description: path: "packages/lw_file_system" - ref: f2e717b77237fb7cdfce6ec22f1b3c296a79d348 - resolved-ref: f2e717b77237fb7cdfce6ec22f1b3c296a79d348 + ref: "54f7ac141410938babff9539dca190f5d130a0db" + resolved-ref: "54f7ac141410938babff9539dca190f5d130a0db" url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" @@ -680,8 +680,8 @@ packages: dependency: transitive description: path: "packages/lw_file_system_api" - ref: "2036c923bb93afcefaadd8108c7e789513ae7082" - resolved-ref: "2036c923bb93afcefaadd8108c7e789513ae7082" + ref: "5ab1b96bea6ef0e0c07629ff4e7152b4437cf8ee" + resolved-ref: "5ab1b96bea6ef0e0c07629ff4e7152b4437cf8ee" url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" @@ -730,8 +730,8 @@ packages: dependency: "direct main" description: path: "packages/material_leap" - ref: "0d83610bb542f25f58cca7b64a0799e17da1a00b" - resolved-ref: "0d83610bb542f25f58cca7b64a0799e17da1a00b" + ref: "54f7ac141410938babff9539dca190f5d130a0db" + resolved-ref: "54f7ac141410938babff9539dca190f5d130a0db" url: "https://github.com/LinwoodDev/dart_pkgs.git" source: git version: "0.0.1" @@ -1013,10 +1013,10 @@ packages: dependency: transitive description: name: sembast - sha256: f45edc5e34ed53d6e3d70df664b182e9abcf9c784f48184e5be4c079d2b865d6 + sha256: cf1aa59677551d54d7ed85a1c5c3396fc06d01aa9f8fabd443a9b270f8f14760 url: "https://pub.dev" source: hosted - version: "3.8.0+1" + version: "3.8.1" setonix_api: dependency: "direct main" description: @@ -1044,10 +1044,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "3c7e73920c694a436afaf65ab60ce3453d91f84208d761fbd83fc21182134d93" + sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" shared_preferences_android: dependency: transitive description: @@ -1394,10 +1394,10 @@ packages: dependency: transitive description: name: win32 - sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69" + sha256: "154360849a56b7b67331c21f09a386562d88903f90a1099c5987afc1912e1f29" url: "https://pub.dev" source: hosted - version: "5.9.0" + version: "5.10.0" win32_registry: dependency: transitive description: diff --git a/app/pubspec.yaml b/app/pubspec.yaml index c31dd203..481a5718 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -32,9 +32,9 @@ dependencies: material_leap: git: url: https://github.com/LinwoodDev/dart_pkgs.git - ref: 0d83610bb542f25f58cca7b64a0799e17da1a00b + ref: 54f7ac141410938babff9539dca190f5d130a0db path: packages/material_leap - flex_color_scheme: ^8.0.0-dev.1 + flex_color_scheme: ^8.1.0 flutter_svg: ^2.0.10+1 window_manager: ^0.4.0 go_router: ^14.2.2 @@ -47,7 +47,7 @@ dependencies: rxdart: ^0.28.0 collection: ^1.18.0 flame_bloc: ">=1.12.2 <1.13.0" - flame: ">=1.22.0 <1.23.0" + flame: ">=1.23.0 <1.24.0" flame_tiled: ">=1.21.1 <1.22.0" # Networking http: ^1.2.1 @@ -72,7 +72,7 @@ dependencies: lw_file_system: git: url: https://github.com/LinwoodDev/dart_pkgs - ref: f2e717b77237fb7cdfce6ec22f1b3c296a79d348 + ref: 54f7ac141410938babff9539dca190f5d130a0db path: packages/lw_file_system lw_sysapi: git: diff --git a/docs/package.json b/docs/package.json index 3b615a6f..d3e8dac6 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,7 +16,7 @@ "@phosphor-icons/react": "^2.1.7", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", - "astro": "^5.1.1", + "astro": "^5.1.2", "react": "^19.0.0", "react-dom": "^19.0.0", "remark-gemoji": "^8.0.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 8c70da91..453b3b77 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 0.9.4(typescript@5.7.2) '@astrojs/react': specifier: ^4.1.2 - version: 4.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.0)(yaml@2.6.1) + version: 4.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.0)(yaml@2.7.0) '@astrojs/starlight': specifier: ^0.30.3 - version: 0.30.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1)) + version: 0.30.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0)) '@phosphor-icons/react': specifier: ^2.1.7 version: 2.1.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -27,8 +27,8 @@ importers: specifier: ^19.0.2 version: 19.0.2(@types/react@19.0.2) astro: - specifier: ^5.1.1 - version: 5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1) + specifier: ^5.1.2 + version: 5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -892,20 +892,26 @@ packages: cpu: [x64] os: [win32] - '@shikijs/core@1.24.4': - resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} + '@shikijs/core@1.26.1': + resolution: {integrity: sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==} - '@shikijs/engine-javascript@1.24.4': - resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} + '@shikijs/engine-javascript@1.26.1': + resolution: {integrity: sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==} - '@shikijs/engine-oniguruma@1.24.4': - resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} + '@shikijs/engine-oniguruma@1.26.1': + resolution: {integrity: sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==} - '@shikijs/types@1.24.4': - resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} + '@shikijs/langs@1.26.1': + resolution: {integrity: sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==} - '@shikijs/vscode-textmate@9.3.1': - resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} + '@shikijs/themes@1.26.1': + resolution: {integrity: sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==} + + '@shikijs/types@1.26.1': + resolution: {integrity: sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -1068,8 +1074,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@5.1.1: - resolution: {integrity: sha512-prpWC2PRs4P3FKQg6gZaU+VNMqbZi5pDvORGB2nrjfRjkrvF6/l4BqhvkJ6YQ0Ohm5rIMVz8ljgaRI77mLHbwg==} + astro@5.1.2: + resolution: {integrity: sha512-+U5lXPEJZ6cQx0botGbPhzN6XGWRgDtXgy/RUkpTmUj18LW6pbzYo0O0k3hFWOazlI039bZ+4P2e/oSNlKzm0Q==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1455,8 +1461,8 @@ packages: hast-util-select@6.0.3: resolution: {integrity: sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==} - hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + hast-util-to-estree@3.1.1: + resolution: {integrity: sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==} hast-util-to-html@9.0.4: resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} @@ -1500,9 +1506,6 @@ packages: import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -1643,8 +1646,8 @@ packages: mdast-util-directive@3.0.0: resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==} - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} @@ -1856,8 +1859,8 @@ packages: ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} - oniguruma-to-es@0.8.1: - resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} + oniguruma-to-es@0.10.0: + resolution: {integrity: sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -1875,8 +1878,8 @@ packages: resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} engines: {node: '>=18'} - p-timeout@6.1.3: - resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} p-try@2.2.0: @@ -2122,8 +2125,8 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shiki@1.24.4: - resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==} + shiki@1.26.1: + resolution: {integrity: sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==} simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -2176,14 +2179,11 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2354,8 +2354,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.0.6: - resolution: {integrity: sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -2394,8 +2394,8 @@ packages: yaml: optional: true - vitefu@1.0.4: - resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} + vitefu@1.0.5: + resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: @@ -2549,8 +2549,8 @@ packages: resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} engines: {node: '>= 14'} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -2651,7 +2651,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.1 remark-smartypants: 3.0.2 - shiki: 1.24.4 + shiki: 1.26.1 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 @@ -2660,12 +2660,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.0.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1))': + '@astrojs/mdx@4.0.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0))': dependencies: '@astrojs/markdown-remark': 6.0.1 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) acorn: 8.14.0 - astro: 5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1) + astro: 5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0) es-module-lexer: 1.6.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.4 @@ -2683,15 +2683,15 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/react@4.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.0)(yaml@2.6.1)': + '@astrojs/react@4.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.0)(yaml@2.7.0)': dependencies: '@types/react': 19.0.2 '@types/react-dom': 19.0.2(@types/react@19.0.2) - '@vitejs/plugin-react': 4.3.4(vite@6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1)) + '@vitejs/plugin-react': 4.3.4(vite@6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) ultrahtml: 1.5.3 - vite: 6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1) + vite: 6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -2712,16 +2712,16 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.24.1 - '@astrojs/starlight@0.30.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1))': + '@astrojs/starlight@0.30.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0))': dependencies: - '@astrojs/mdx': 4.0.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1)) + '@astrojs/mdx': 4.0.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0)) '@astrojs/sitemap': 3.2.1 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1) - astro-expressive-code: 0.38.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1)) + astro: 5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0) + astro-expressive-code: 0.38.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.3 @@ -2756,7 +2756,7 @@ snapshots: '@astrojs/yaml2ts@0.2.2': dependencies: - yaml: 2.6.1 + yaml: 2.7.0 '@babel/code-frame@7.26.2': dependencies: @@ -3065,7 +3065,7 @@ snapshots: '@expressive-code/plugin-shiki@0.38.3': dependencies: '@expressive-code/core': 0.38.3 - shiki: 1.24.4 + shiki: 1.26.1 '@expressive-code/plugin-text-markers@0.38.3': dependencies: @@ -3355,32 +3355,40 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.29.1': optional: true - '@shikijs/core@1.24.4': + '@shikijs/core@1.26.1': dependencies: - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.24.4': + '@shikijs/engine-javascript@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 0.10.0 + + '@shikijs/engine-oniguruma@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 - oniguruma-to-es: 0.8.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/engine-oniguruma@1.24.4': + '@shikijs/langs@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 - '@shikijs/types@1.24.4': + '@shikijs/themes@1.26.1': dependencies: - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 + + '@shikijs/types@1.26.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.1': {} + '@shikijs/vscode-textmate@10.0.1': {} '@types/acorn@4.0.6': dependencies: @@ -3457,14 +3465,14 @@ snapshots: '@ungap/structured-clone@1.2.1': {} - '@vitejs/plugin-react@4.3.4(vite@6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1))': + '@vitejs/plugin-react@4.3.4(vite@6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1) + vite: 6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -3564,12 +3572,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.38.3(astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1)): + astro-expressive-code@0.38.3(astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0)): dependencies: - astro: 5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1) + astro: 5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0) rehype-expressive-code: 0.38.3 - astro@5.1.1(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.6.1): + astro@5.1.2(jiti@2.4.2)(rollup@4.29.1)(sass@1.83.0)(typescript@5.7.2)(yaml@2.7.0): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.2 @@ -3614,15 +3622,15 @@ snapshots: prompts: 2.4.2 rehype: 13.0.2 semver: 7.6.3 - shiki: 1.24.4 - tinyexec: 0.3.1 + shiki: 1.26.1 + tinyexec: 0.3.2 tsconfck: 3.1.4(typescript@5.7.2) ultrahtml: 1.5.3 unist-util-visit: 5.0.0 unstorage: 1.14.4 vfile: 6.0.3 - vite: 6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1) - vitefu: 1.0.4(vite@6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1)) + vite: 6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0) + vitefu: 1.0.5(vite@6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0)) which-pm: 3.0.0 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 @@ -4133,7 +4141,7 @@ snapshots: unist-util-visit: 5.0.0 zwitch: 2.0.4 - hast-util-to-estree@3.1.0: + hast-util-to-estree@3.1.1: dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -4148,7 +4156,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 + style-to-object: 1.0.8 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -4237,8 +4245,6 @@ snapshots: import-meta-resolve@4.1.0: {} - inline-style-parser@0.1.1: {} - inline-style-parser@0.2.4: {} iron-webcrypto@1.2.1: {} @@ -4364,7 +4370,7 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-find-and-replace@3.0.1: + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -4393,7 +4399,7 @@ snapshots: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 mdast-util-gfm-footnote@2.0.0: @@ -4847,7 +4853,7 @@ snapshots: ohash@1.1.4: {} - oniguruma-to-es@0.8.1: + oniguruma-to-es@0.10.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 @@ -4868,9 +4874,9 @@ snapshots: p-queue@8.0.1: dependencies: eventemitter3: 5.0.1 - p-timeout: 6.1.3 + p-timeout: 6.1.4 - p-timeout@6.1.3: {} + p-timeout@6.1.4: {} p-try@2.2.0: {} @@ -5044,7 +5050,7 @@ snapshots: dependencies: '@types/estree': 1.0.6 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.0 + hast-util-to-estree: 3.1.1 transitivePeerDependencies: - supports-color @@ -5074,7 +5080,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 gemoji: 8.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 remark-gfm@4.0.0: dependencies: @@ -5235,13 +5241,15 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - shiki@1.24.4: + shiki@1.26.1: dependencies: - '@shikijs/core': 1.24.4 - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/core': 1.26.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/langs': 1.26.1 + '@shikijs/themes': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 simple-swizzle@0.2.2: @@ -5294,15 +5302,11 @@ snapshots: strip-bom@3.0.0: {} - style-to-object@0.4.4: - dependencies: - inline-style-parser: 0.1.1 - style-to-object@1.0.8: dependencies: inline-style-parser: 0.2.4 - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} to-regex-range@5.0.1: dependencies: @@ -5443,7 +5447,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1): + vite@6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 @@ -5452,11 +5456,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 sass: 1.83.0 - yaml: 2.6.1 + yaml: 2.7.0 - vitefu@1.0.4(vite@6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1)): + vitefu@1.0.5(vite@6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0)): optionalDependencies: - vite: 6.0.6(jiti@2.4.2)(sass@1.83.0)(yaml@2.6.1) + vite: 6.0.7(jiti@2.4.2)(sass@1.83.0)(yaml@2.7.0) volar-service-css@0.0.62(@volar/language-service@2.4.11): dependencies: @@ -5614,7 +5618,7 @@ snapshots: yaml@2.2.2: {} - yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@21.1.1: {} diff --git a/tools/pubspec.lock b/tools/pubspec.lock index d8075da4..edb9e4fa 100644 --- a/tools/pubspec.lock +++ b/tools/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: "direct main" description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.2" args: dependency: "direct main" description: @@ -57,12 +57,20 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.6" + ffi: + dependency: transitive + description: + name: ffi + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.dev" + source: hosted + version: "2.1.3" generate_leap: dependency: "direct main" description: path: "packages/generate_leap" - ref: "40b8553ab86ab4f06d9f689268a65d65ed936fda" - resolved-ref: "40b8553ab86ab4f06d9f689268a65d65ed936fda" + ref: f29b1ae0e338ec155e1c5b0a204c399232904540 + resolved-ref: f29b1ae0e338ec155e1c5b0a204c399232904540 url: "https://github.com/LinwoodDev/dart_pkgs" source: git version: "1.0.0" @@ -78,18 +86,18 @@ packages: dependency: transitive description: name: http_parser - sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.2" intl: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "00f33b908655e606b86d2ade4710a231b802eec6f11e87e4ea3783fd72077a50" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.1" lints: dependency: "direct main" description: @@ -122,6 +130,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" shelf: dependency: "direct main" description: diff --git a/tools/pubspec.yaml b/tools/pubspec.yaml index 2bff9dd4..b93ceb4d 100644 --- a/tools/pubspec.yaml +++ b/tools/pubspec.yaml @@ -2,9 +2,9 @@ name: setonix_tools environment: sdk: ">=2.13.0 <3.0.0" dependencies: - archive: ^3.4.10 + archive: ^4.0.1 args: ^2.5.0 - intl: ^0.19.0 + intl: ^0.20.1 lints: ^5.0.0 shelf: ^1.4.1 shelf_proxy: ^1.0.4 @@ -15,5 +15,5 @@ dependencies: generate_leap: git: url: https://github.com/LinwoodDev/dart_pkgs - ref: 40b8553ab86ab4f06d9f689268a65d65ed936fda + ref: f29b1ae0e338ec155e1c5b0a204c399232904540 path: packages/generate_leap