Animate changes to IndexedStack

Hi.
Use case
This is about two very useful widgets:

AnimatedSwitcher
IndexedStack

Intuitively, it seems they could be combined in order to preserve the state between two widgets while animating the transition from one to the other. However, the following code will not work as expected:
AnimatedSwitcher(
    transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder,
    duration: const Duration(milliseconds: 500),
    child: IndexedStack(
        index: condition ? 1 : 0,
        children: [
            WidgetOne(),
            WidgetTwo(),
        ],
    ),
)

This does not work for obvious reason (assuming AnimatedSwitcher is rebuilt with a new condition value): the IndexedStack widget itself did not change, so there is no animation (while widgets are correctly replaced).
Proposal
I would like to suggest the addition of a new parameter or some kind of workaround to facilitate the use of AnimatedSwitcher with IndexedStack. Unfortunately, I don't know what this workaround should look like.
This is related to this issue: https://github.com/flutter/flutter/issues/39398. It was closed for the reason that it is "related to organising of widgets". I would like to re-open it as a "feature request".
A Stackoverflow question has been open consequently. As a Flutter beginner, I'm not comfortable with the proposed answers as they require to completely re-implement IndexedStack and / or Animation which I find prone-to-error compared to simply combine AnimatedSwitcher with IndexedStack (that seemed so much more convenient!).
Is there a possibility to make these two widgets more "user-friendly" when they are used together?

I understand you want the Flutter framework to provide your desired functionality out of the box.
I have read your stackoverflow question, and I think using both AnimatedSwitcher and IndexedStack together should be able working properly for you after digging into the documentation.

If the "new" child is the same widget type and key as the "old" child, but with different parameters, then AnimatedSwitcher will not do a transition between them, since as far as the framework is concerned, they are the same widget and the existing widget can be updated with the new parameters. To force the transition to occur, set a Key on each child widget that you wish to be considered unique (typically a ValueKey on the widget data that distinguishes this child from the others).

AnimatedSwitcher(
  transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder,
  duration: const Duration(milliseconds: 500),
  child: IndexedStack(
    // This key causes the AnimatedSwitcher to interpret this as a "new"
    // child each time the count changes, so that it will begin its animation
    // when the count changes.
    key: ValueKey<int>(condition? 1: 0), // add this line
    index: condition? 1: 0,
    children:  [
      WidgetOne(),
      WidgetTwo(),
    ],
  )
)

Flutter prefer widgets for a single use-case. By combining different widgets you get a board spectrum of functionality. Welcome to give further suggestion for feature request if you still not comfortable because many developers may want this feature.

Hi @hoshinokanade, thanks for your answer.
Correct me if I'm wrong, but I tested your workaround and it seems it doesn't work well with IndexedStack: WidgetOne() and WidgetTwo() states are not preserved, they are rebuilt each time a transition occurs. :confused:

Can confirm, the state is not preserved.
I believe this reason is because you change the IndexedStacks key every time a page change occurs. The framework will then (correctly) throw away and rebuild the IndexedStack, and as a result the state is not preserved.

If you just need an animated IndexedStack, I suggest using my solution.
AnimatedIndexedStack(
  index: condition ? 1 : 0,
  children: [
    WidgetOne(),
    WidgetTwo(),
  ],
);

I want to use IndexedStack with the FadeThrough animtion from the animation library: https://pub.dev/packages/animations, but I am not able to do this becuase of this

Check my answer here https://stackoverflow.com/a/59535289/666221

@sondresorbye0111 checkout this https://github.com/flutter/flutter/issues/56662#issuecomment-720678467 works well for me

@hoshinokanade this will rebuild a whole stack and all widgets inside it on each key change

How about using my package? https://pub.dev/packages/animated_indexed_stack

None of the solutions provided corresponds to initial requirements!
Please take into account that:
AnimatedSwitcher smoothly animates between child's (animate-out-old-animate-in-new), IndexedStack maintains child's state. Exact this combination of properties is required.
Still waiting for solution.

None of the solutions provided corresponds to initial requirements!
Please take into account that:
AnimatedSwitcher smoothly animates between child's (animate-out-old-animate-in-new), IndexedStack maintains child's state. Exact this combination of properties is required.
Still waiting for solution.

https://gist.github.com/cirnok/e1b70f5d841e47c9d85ccdf6ae866984
tps://gist.github.com/diegoveloper/1cd23e79a31d0c18a67424f0cbdfd7ad

Any progress on this?

Well, still waiting for any update forward

Any update one this one?!?!?

Here's the best workaround for now, it has 80,000 score in StackOverflow
https://stackoverflow.com/a/59535289/10494346

For me it works easy with the key property. It works as requested. But thanks to this issue I found the solution. Maybe we could provide an example in the docs for this particular case? Or is the request that you can ommit the key property?
Scaffold(
  body: AnimatedSwitcher(
    duration: const Duration(milliseconds: 500),
    transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder,
    child: IndexedStack(
      index: _currentIndex,
      key: ValueKey<int>(_currentIndex),
      children: const [
        FirstPage(),
        SecondPage(),
        ThirdPage(),
      ],
    ),
  ),
)

The transition type can be changed e.g. with scale animation:
transitionBuilder: (Widget child, Animation<double> animation) {
  return ScaleTransition(scale: animation, child: child);
},

Ok, as I understand: The transition works great if we add key to the stack. But we lose the feature of IndexedStack holding the current state of each widget, when we use the AnimatedSwitcher. The following example just demonstrates a working transition. But you can see that we lose the state on switching the page. It's maybe not the way to go. But any ideas are welcome. What's need to be done?
Scaffold(
  body: AnimatedSwitcher(
    duration: const Duration(milliseconds: 500),
    transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder,
    child: IndexedStack(
      index: _currentIndex,
      key: ValueKey<int>(_currentIndex),
      children: const [
        FirstPage(),
        SecondPage(),
        ThirdPage(),
      ],
    ),
  ),
)

@twoco You can try using FadeTransition, You can read about the implementation in this blog post  on point 4.
demo: https://dartpad.dev/?id=894922ccb67f5fdc4ffb652e41916fa2

@maheshmnj Thanks. Lots of code. Not fully reviewed and not yet tested in my app. But it looks promissing and it's good stuff to lean. I think I'll finally go with a slide transition. ... I prefer less and clean code. We could consider to provide a more simpler build-in feature in Flutter for such page navigation over the navbar. But Idk, it's maybe a special case. I'm a Flutter newbie, more or less. ...

I am using this method:
Though it is a workaround, but it also has exit animation for the index we are switching from.
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage();

  @override
  State<MyHomePage> createState() => _StateHomePage();
}

class _StateHomePage extends State<MyHomePage> with SingleTickerProviderStateMixin {
  late final AnimationController _animationController;
  var _indexNav = 1;
  var _indexStack = 1;

  @override
  void initState() {
    super.initState();
    _animationController = AnimationController(
      duration: const Duration(milliseconds: 500),
      value: 1,
      vsync: this,
    );
  }

  @override
  void dispose() {
    _animationController.dispose();
    super.dispose();
  }

  void setIndex(int value) {
    setState(() {
      _indexNav = value;
    });
    _animationController.reverse().then((_) {
      setState(() {
        _indexStack = value;
      });
      _animationController.forward();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      appBar: AppBar(
        title: const Text('IndexedStack Animation Demo'),
      ),
      body: FadeTransition(
        opacity: CurvedAnimation(
          parent: _animationController,
          curve: Curves.ease,
        ),
        child: IndexedStack(
          index: _indexStack,
          children: const [
            Center(
              child: Text(
                'RED',
                style: TextStyle(color: Colors.red),
              ),
            ),
            Center(
              child: Text(
                'GREEN',
                style: TextStyle(color: Colors.green),
              ),
            ),
            Center(
              child: Text(
                'BLUE',
                style: TextStyle(color: Colors.blue),
              ),
            ),
          ],
        ),
      ),
      bottomNavigationBar: NavigationBar(
        selectedIndex: _indexNav,
        onDestinationSelected: setIndex,
        destinations: const [
          NavigationDestination(
            icon: Icon(Icons.queue_music),
            label: 'Red',
          ),
          NavigationDestination(
            icon: Icon(Icons.music_note_outlined),
            selectedIcon: Icon(Icons.music_note),
            label: 'Green',
          ),
          NavigationDestination(
            icon: Icon(Icons.library_music_outlined),
            selectedIcon: Icon(Icons.library_music),
            label: 'Blue',
          ),
        ],
      ),
    );
  }
}

While we wait for a change in the framework, I have written my own solution based on IndexedStack and PageTransitionSwitcher.
It uses internal ChildEntrys to keep track of children, just like PageTransitionSwitcher and it uses Visibility to offstage invisible widgets just like IndexedStack.
The code depends on the animations package for its default values. However, it would be possible to copy those defaults and type declarations into the file itself to make it independant.
To make sure all animations are in correct order and our state is kept alive, we internally use GlobalKeys assigned to each ChildEntry. Because of that, all our children should have a unique key. It does not have to be global, just a regular ValueKey will do for identification.
The code can be found here:
https://gist.github.com/clragon/f26fe2fc2cc1574243c3407277e2997e
(Or in this section, in case I ever delete that gist:)

Source Code
import 'package:animations/animations.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

/// An internal representation of a child widget subtree that is a child of
/// the [AnimatedIndexedStack].
///
/// This keeps track of animation controllers, keys, and the child widget.
class _ChildEntry {
  _ChildEntry({
    required this.key,
    required this.primaryController,
    required this.secondaryController,
    required this.child,
  });

  /// The key of this entry.
  /// This is usually a [GlobalKey] to ensure that children do not lose their state.
  final Key key;

  /// The animation controller for the child's transition.
  final AnimationController primaryController;

  /// The (curved) animation being used to drive the transition.
  final AnimationController secondaryController;
  Widget child;

  /// Release the resources used by this object.
  ///
  /// The object is no longer usable after this method is called.
  void dispose() {
    primaryController.dispose();
    secondaryController.dispose();
  }

  @override
  String toString() => 'AnimatedIndexedStackEntry#${shortHash(this)}($child)';
}

enum _ChildAnimationDirection {
  primaryForward,
  primaryReverse,
  secondaryForward,
  secondaryReverse,
}

/// A Widget that shows a single child from a list of children.
/// Changing the index will animate the change of widgets according to the [transitionBuilder].
/// Removing the widget at the current index will also animate the change.
///
/// Widgets which are not currently visible will be kept alive until they are removed.
class AnimatedIndexedStack extends StatefulWidget {
  const AnimatedIndexedStack({
    super.key,
    this.index = 0,
    this.duration = const Duration(milliseconds: 300),
    this.reverse = false,
    required this.transitionBuilder,
    this.layoutBuilder = PageTransitionSwitcher.defaultLayoutBuilder,
    this.children = const [],
  });

  /// The index of the child to show.
  ///
  /// If this is null, none of the children will be shown.
  final int? index;

  /// The duration of the transition from the old [child] value to the new one.
  final Duration duration;

  /// Indicates whether the new [child] will visually appear on top of or
  /// underneath the old child.
  final bool reverse;

  /// A function that wraps a new [child] with a primary and secondary animation
  /// set define how the child appears and disappears.
  final PageTransitionSwitcherTransitionBuilder transitionBuilder;

  /// A function that lays out all the children in this IndexedStack.
  /// This defaults to [PageTransitionSwitcher.defaultLayoutBuilder].
  final PageTransitionSwitcherLayoutBuilder layoutBuilder;

  /// The child widgets of the stack.
  /// Only the child at index [index] will be shown.
  /// To correctly keep track of the state of child widgets, they must be given unique keys.
  final List<Widget> children;

  @override
  State<AnimatedIndexedStack> createState() => _AnimatedIndexedStackState();
}

class _AnimatedIndexedStackState extends State<AnimatedIndexedStack>
    with TickerProviderStateMixin {
  /// All entries contained in this Stack.
  /// This is built from the children list, but may also contain entries which are animating out.
  List<_ChildEntry> _entries = [];

  /// The entry which is currently at the top of the stack.
  _ChildEntry? _currentEntry;

  @override
  void initState() {
    super.initState();
    _updateEntriesList();
  }

  @override
  void didUpdateWidget(AnimatedIndexedStack oldWidget) {
    super.didUpdateWidget(oldWidget);
    _updateEntriesList(oldWidget.index);
  }

  /// In place operation to shift a child entry to the end of the list (the visual front).
  ///
  /// If entry is null, this is a no-op.
  void _moveToEnd(List<_ChildEntry> entries, _ChildEntry? entry) {
    if (entry == null) return;
    entries.remove(entry);
    entries.add(entry);
  }

  /// Inserts an entry as last place in the list and animates it.
  ///
  /// If entry is null, this is a no-op.
  void _insertAndAnimate(
    List<_ChildEntry> entries,
    _ChildEntry? entry,
    _ChildAnimationDirection direction,
  ) {
    if (entry == null) return;
    _moveToEnd(entries, entry);
    switch (direction) {
      case _ChildAnimationDirection.primaryForward:
        entry.primaryController.forward(from: 0);
        entry.secondaryController.value = 0;
      case _ChildAnimationDirection.primaryReverse:
        entry.primaryController.reverse(from: 1);
        entry.secondaryController.value = 0;
      case _ChildAnimationDirection.secondaryForward:
        entry.primaryController.value = 1;
        entry.secondaryController.forward(from: 0);
      case _ChildAnimationDirection.secondaryReverse:
        entry.primaryController.value = 1;
        entry.secondaryController.reverse(from: 1);
    }
  }

  /// Updates the list of child entries.
  /// Ensures to order the list appropriately and animate entries in and out.
  void _updateEntriesList([int? previousIndex]) {
    List<_ChildEntry> entries = [];

    _ChildEntry? previousEntry = _currentEntry;
    _ChildEntry? currentEntry;

    Widget? currentChild;
    if (widget.index != null && widget.children.isNotEmpty) {
      currentChild = widget.children[widget.index!];
    }

    for (final child in widget.children) {
      // We find the previous entry by looking for an identical child widget.
      // If the children of this Stack share widget types, they must be given unique keys.
      int existingIndex =
          _entries.indexWhere((entry) => Widget.canUpdate(entry.child, child));

      _ChildEntry? existingEntry;
      if (existingIndex != -1) {
        existingEntry = _entries[existingIndex];
      }

      _ChildEntry entry;

      if (existingEntry != null) {
        // If we find an existing entry, we update its child widget and reuse it.
        // This ensures it continues to use the same global key and animation controllers.
        existingEntry.child = child;
        existingEntry.primaryController.duration = widget.duration;
        existingEntry.secondaryController.duration = widget.duration;
        entry = existingEntry;
      } else {
        entry = _newEntry(child);
      }

      if (currentChild == child) {
        currentEntry = entry;
      }

      entries.add(entry);
    }

    bool hasChanged = previousEntry != currentEntry;
    bool previousWasRemoved =
        previousEntry != null && !entries.contains(previousEntry);

    if (hasChanged) {
      if (widget.reverse) {
        // When reverse is true, the new child will transition in below the
        // old child while its secondary animation and the primary
        // animation of the old child are running in reverse. This is similar to
        // the transition associated with popping a [PageRoute] to reveal a new
        // [PageRoute] below it.
        _insertAndAnimate(
          entries,
          currentEntry,
          _ChildAnimationDirection.secondaryReverse,
        );
        _insertAndAnimate(
          entries,
          previousEntry,
          _ChildAnimationDirection.primaryReverse,
        );
        if (previousWasRemoved) {
          previousEntry.primaryController.addStatusListener((status) {
            if (status == AnimationStatus.dismissed) {
              setState(() {
                _entries.remove(previousEntry);
                previousEntry.dispose();
              });
            }
          });
        }
      } else {
        // When reverse is false, the new child will transition in on top of the
        // old child while its primary animation and the secondary
        // animation of the old child are running forward. This is similar to
        // the transition associated with pushing a new [PageRoute] on top of
        // another.
        _insertAndAnimate(
          entries,
          previousEntry,
          _ChildAnimationDirection.secondaryForward,
        );
        _insertAndAnimate(
          entries,
          currentEntry,
          _ChildAnimationDirection.primaryForward,
        );
        if (previousWasRemoved) {
          previousEntry.secondaryController.addStatusListener((status) {
            if (status == AnimationStatus.completed) {
              setState(() {
                _entries.remove(previousEntry);
                previousEntry.dispose();
              });
            }
          });
        }
      }
    } else {
      if (widget.reverse) {
        _moveToEnd(entries, currentEntry);
        _moveToEnd(entries, previousEntry);
      } else {
        _moveToEnd(entries, previousEntry);
        _moveToEnd(entries, currentEntry);
      }
    }

    setState(() {
      _entries = entries;
      _currentEntry = currentEntry;
    });
  }

  _ChildEntry _newEntry(Widget child) {
    final GlobalKey key = GlobalKey();
    final AnimationController primaryController = AnimationController(
      duration: widget.duration,
      vsync: this,
    );
    final AnimationController secondaryController = AnimationController(
      duration: widget.duration,
      vsync: this,
    );

    final _ChildEntry entry = _ChildEntry(
      key: key,
      child: child,
      primaryController: primaryController,
      secondaryController: secondaryController,
    );

    primaryController.forward();
    return entry;
  }

  @override
  void dispose() {
    for (final entry in _entries) {
      entry.dispose();
    }
    super.dispose();
  }

  Widget _buildChild(_ChildEntry entry) => KeyedSubtree(
        key: entry.key,
        child: AnimatedBuilder(
          animation: Listenable.merge([
            entry.primaryController,
            entry.secondaryController,
          ]),
          builder: (context, child) {
            bool isVisible = entry.primaryController.isAnimating ||
                entry.secondaryController.isAnimating ||
                entry == _currentEntry;

            return Visibility(
              visible: isVisible,
              maintainState: true,
              child: widget.transitionBuilder(
                child!,
                entry.primaryController,
                entry.secondaryController,
              ),
            );
          },
          child: entry.child,
        ),
      );

  @override
  Widget build(BuildContext context) => widget.layoutBuilder(
        _entries.map(_buildChild).toList(),
      );
}

I also have a piece of demonstration code:

Demo Code
import 'dart:math';

import 'package:animations/animations.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:tabbed/stack.dart';

class BrowserTab {
  BrowserTab({
    required WidgetBuilder builder,
  })  : key = UniqueKey(),
        _builder = builder;

  final WidgetBuilder _builder;
  final Key key;

  Widget builder(BuildContext context) => KeyedSubtree(
        key: key,
        child: _builder(context),
      );
}

class BrowserTabManager extends StatefulWidget {
  const BrowserTabManager({Key? key}) : super(key: key);

  @override
  State<BrowserTabManager> createState() => _BrowserTabManagerState();
}

class _BrowserTabManagerState extends State<BrowserTabManager>
    with TickerProviderStateMixin {
  late TabController _tabController;
  final List<BrowserTab> _tabs = [];
  int _previousTab = 0;

  void _onTabChanged() {
    setState(() {
      _previousTab = _tabController.previousIndex;
    });
  }

  void _addTab() {
    setState(() {
      _previousTab = _tabs.length;
      _tabs.add(
        BrowserTab(
          builder: (context) => Builder(
            builder: (context) => _AppPage(
              title: shortHash(
                context.findAncestorWidgetOfExactType<KeyedSubtree>()!.key!,
              ),
            ),
          ),
        ),
      );
      _tabController = TabController(
        length: _tabs.length,
        vsync: this,
        initialIndex: _tabs.length - 1,
      );
      _tabController.addListener(_onTabChanged);
    });
  }

  void _closeTab(int index) {
    setState(() {
      _previousTab = index;
      _tabs.removeAt(index);
      int newIndex = index.clamp(0, max(0, _tabs.length - 1));
      _tabController.removeListener(_onTabChanged);
      _tabController = TabController(
        length: _tabs.length,
        vsync: this,
        initialIndex: newIndex,
      );
      _tabController.addListener(_onTabChanged);
    });
  }

  @override
  void initState() {
    super.initState();
    _addTab();
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _tabController,
      builder: (context, _) => Scaffold(
        appBar: AppBar(title: Text('Tabbed ${_tabController.index + 1}')),
        body: AnimatedIndexedStack(
          reverse: _tabController.index < _previousTab ||
              (_tabController.index == 0 && _tabs.isEmpty),
          index: _tabController.index,
          duration: const Duration(milliseconds: 1000),
          transitionBuilder: (child, animation, secondaryAnimation) =>
              SharedAxisTransition(
            animation: animation,
            secondaryAnimation: secondaryAnimation,
            transitionType: SharedAxisTransitionType.horizontal,
            child: child,
          ),
          children: _tabs.map((tab) => tab.builder(context)).toList(),
        ),
        bottomNavigationBar: MediaQuery.of(context).size.width > 600
            ? TabBar(
                controller: _tabController,
                tabs: _tabs
                    .map(
                      (tab) => Tab(
                        text: 'Tab ${shortHash(tab.key)}',
                      ),
                    )
                    .toList(),
              )
            : null,
        floatingActionButton: Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            if (_tabs.isNotEmpty)
              FloatingActionButton(
                child: const Icon(Icons.close),
                onPressed: () => _closeTab(_tabController.index),
              ),
            const SizedBox(width: 8),
            FloatingActionButton(
              onPressed: _addTab,
              child: const Icon(Icons.add),
            ),
          ],
        ),
      ),
    );
  }
}

class _AppPage extends StatelessWidget {
  const _AppPage({
    this.title,
  });

  final String? title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            if (title != null)
              Text(
                title!,
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            const _TimeAliveWidget(),
          ],
        ),
      ),
    );
  }
}

class _TimeAliveWidget extends StatefulWidget {
  const _TimeAliveWidget();

  @override
  State<_TimeAliveWidget> createState() => _TimeAliveWidgetState();
}

class _TimeAliveWidgetState extends State<_TimeAliveWidget>
    with TickerProviderStateMixin {
  final DateTime _startTime = DateTime.now();
  Duration _elapsedTime = Duration.zero;
  late Ticker _ticker;

  @override
  void initState() {
    super.initState();
    _ticker = createTicker(_updateTime)..start();
  }

  void _updateTime(Duration duration) {
    setState(() {
      _elapsedTime = DateTime.now().difference(_startTime);
    });
  }

  @override
  void dispose() {
    _ticker.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    String twoDigits(int n) => n.toString().padLeft(2, "0");
    String threeDigits(int n) => n.toString().padLeft(3, "0");
    String hours = twoDigits(_elapsedTime.inHours.remainder(24));
    String minutes = twoDigits(_elapsedTime.inMinutes.remainder(60));
    String seconds = twoDigits(_elapsedTime.inSeconds.remainder(60));
    String millis = threeDigits(_elapsedTime.inMilliseconds.remainder(1000));
    return Center(
      child: Text('$hours:$minutes:$seconds.$millis'),
    );
  }
}

Which we can see in this video:
https://github.com/flutter/flutter/assets/11785085/ab3ac46b-760f-4944-a7e2-136bc5b1e7ec
Visible in the video are the most important points; our Timer in the pages does not reset when switching between tabs, as the State is kept alive. The transitions work correctly, with reverse specified. The children are removed once they have animated out.
The debug overlay shown in the video is not in the gist, as its not useful for production.
But I will include it here, in case somebody wants to test around with it. This is simply a replacement for the build method of the AnimatedIndexedStack:

Debug Code
@override
  Widget build(BuildContext context) {
    return Stack(
      fit: StackFit.passthrough,
      children: [
        widget.layoutBuilder(
          _entries.map(_buildChild).toList(),
        ),
        Material(
          type: MaterialType.transparency,
          child: Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('reverse: ${widget.reverse}'),
              ..._entries.map((e) {
                return AnimatedBuilder(
                  animation: Listenable.merge([
                    e.primaryController,
                    e.secondaryController,
                  ]),
                  builder: (context, _) => Text(
                    '${shortHash(e.child.key)}; '
                    'visible: ${e.primaryController.isAnimating || e.secondaryController.isAnimating || e == _currentEntry}; '
                    'primary: ${e.primaryController.isAnimating}; '
                    'secondary: ${e.secondaryController.isAnimating}; '
                    'current: ${e == _currentEntry}',
                  ),
                );
              }),
            ],
          ),
        ),
      ],
    );
  }

Additionally, I have experimented with getting the same transitions as a MaterialPageRoute.
I thought I might be able to simply access Theme.of(context).pageTransitionsTheme and use it, however, it demands a Route to build the transitions. It seems as of right now, there is no way of retrieving these animations without passing a Route. This is unfortunate, but we can hack around this requirement by simply passing the surrounding ModalRoute.
However, This leads to weird artefacting from ZoomPageTransition because it uses so called snapshots. We can disable these with a workaround and eventually arrive at a hacky but working animated indexed stack that functions similar to a navigator without being one.
To disable the snapshots, we have to override the page transition theme. We can do that locally just for our AnimatedIndexedStack usage, like so:

Transition Code
  PageTransitionsTheme _buildPageTransitionsTheme() {
    Map<TargetPlatform, PageTransitionsBuilder> builders = Map.fromEntries(
      Theme.of(context).pageTransitionsTheme.builders.entries.map(
        (e) {
          if (e.value is ZoomPageTransitionsBuilder) {
            return MapEntry(
              e.key,
              const ZoomPageTransitionsBuilder(
                allowSnapshotting: false,
              ),
            );
          } else {
            return e;
          }
        },
      ),
    );
    if (builders[TargetPlatform.windows] == null) {
      builders[TargetPlatform.windows] = const ZoomPageTransitionsBuilder(
        allowSnapshotting: false,
      );
    }
    return PageTransitionsTheme(
      builders: builders,
    );
  }

which we can then use like this:
AnimatedIndexedStack(
  _buildPageTransitionsTheme().buildTransitions(
    ModalRoute.of(context)! as PageRoute<dynamic>,
    context,
    animation,
    secondaryAnimation,
    child,
  ),
  // ...
),

I hope this is useful to someone out there, for the time until we have a proper inbuilt soltution.

Here's a custom implementation of FadeTransition built on top of the official sample
Indexed stack
https://github.com/flutter/flutter/assets/31410839/281e06f4-787f-4439-adf1-5c5571236a90
Stack
https://github.com/maheshmnj/navbar_router/assets/31410839/506a907b-0925-4a72-81e4-274643d53f23

complete code sample
import 'dart:math';

import 'package:flutter/material.dart';

/// Flutter code sample for [NavigationBar].

void main() => runApp(const NavigationBarApp());

class NavigationBarApp extends StatelessWidget {
  const NavigationBarApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(useMaterial3: true),
      home: const NavigationExample(),
    );
  }
}

class Conversation {
  String text;
  bool isMe;

  Conversation(this.text, this.isMe);
}

class NavigationExample extends StatefulWidget {
  const NavigationExample({super.key});

  @override
  State<NavigationExample> createState() => _NavigationExampleState();
}

class _NavigationExampleState extends State<NavigationExample>
    with TickerProviderStateMixin {
  int currentPageIndex = 0;

  List<Widget> body = <Widget>[
    const Home(),
    const Notifications(),
    Messages(),
  ];

  List<NavigationDestination> navDestinations = const [
    NavigationDestination(
      selectedIcon: Icon(Icons.home),
      icon: Icon(Icons.home_outlined),
      label: 'Home',
    ),
    NavigationDestination(
      icon: Badge(child: Icon(Icons.notifications_sharp)),
      label: 'Notifications',
    ),
    NavigationDestination(
      icon: Badge(
        label: Text('2'),
        child: Icon(Icons.messenger_sharp),
      ),
      label: 'Messages',
    ),
  ];

  late List<AnimationController> fadeAnimation;

  @override
  void initState() {
    super.initState();
    initAnimation();
  }

  @override
  void dispose() {
    fadeAnimation.forEach((AnimationController controller) {
      controller.dispose();
    });
    super.dispose();
  }

  void initAnimation() {
    fadeAnimation = navDestinations.map<AnimationController>((destination) {
      return AnimationController(
        value: destination == navDestinations[currentPageIndex] ? 1.0 : 0.0,
        vsync: this,
        duration: const Duration(milliseconds: 200),
      );
    }).toList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: NavigationBar(
        onDestinationSelected: (int index) {
          setState(() {
            currentPageIndex = index;
          });
          _handleAnimation();
        },
        indicatorColor: Colors.amber,
        selectedIndex: currentPageIndex,
        destinations: navDestinations,
      ),
      body: Stack(
        // index: currentPageIndex,
        children: [
          for (int i = 0; i < body.length; i++)
            _buildIndexedStackItem(i, context),
        ],
      ),
    );
  }

  void _handleAnimation() {
    for (int i = 0; i < fadeAnimation.length; i++) {
      if (i == currentPageIndex) {
        fadeAnimation[i].forward();
      } else {
        fadeAnimation[i].reverse();
      }
    }
  }

  Widget _buildIndexedStackItem(int index, BuildContext context) {
    return AnimatedBuilder(
      animation: fadeAnimation[index],
      builder: (context, child) {
        return IgnorePointer(
          ignoring: index != currentPageIndex,
          child: Opacity(
            opacity: fadeAnimation[index].value,
            child: child,
          ),
        );
      },
      child: body[index],
    );
  }
}

class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);
    return Card(
      shadowColor: Colors.transparent,
      margin: const EdgeInsets.all(8.0),
      child: SizedBox.expand(
        child: Center(
          child: Text(
            'Home page',
            style: theme.textTheme.titleLarge,
          ),
        ),
      ),
    );
  }
}

class Notifications extends StatelessWidget {
  const Notifications({super.key});

  @override
  Widget build(BuildContext context) {
    return const SafeArea(
      child: Padding(
        padding: EdgeInsets.all(8.0),
        child: Column(
          children: <Widget>[
            Card(
              child: ListTile(
                leading: Icon(Icons.notifications_sharp),
                title: Text('Notification 1'),
                subtitle: Text('This is a notification'),
              ),
            ),
            Card(
              child: ListTile(
                leading: Icon(Icons.notifications_sharp),
                title: Text('Notification 2'),
                subtitle: Text('This is a notification'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class Messages extends StatelessWidget {
  Messages({super.key});
  List<Conversation> conversations = [
    Conversation('Hi!', true),
    Conversation('Hello!', false),
    Conversation('How are you?', true),
    Conversation('I\'m fine, thanks!', false),
    Conversation('What are you doing?', true),
    Conversation('Nothing much', false),
    Conversation('Ok', true),
    Conversation('Bye!', false),
  ];

  TextEditingController textEditingController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    Widget message(String text, bool isMe) => Align(
          alignment: isMe ? Alignment.centerRight : Alignment.centerLeft,
          child: Container(
            margin: const EdgeInsets.all(8.0),
            padding: const EdgeInsets.all(8.0),
            decoration: BoxDecoration(
              color: Theme.of(context).colorScheme.primary,
              borderRadius: BorderRadius.circular(8.0),
            ),
            child: Text(
              text,
              style: Theme.of(context).textTheme.bodyLarge!.copyWith(
                    color: Theme.of(context).colorScheme.onPrimary,
                  ),
            ),
          ),
        );

    return Column(
      children: [
        Expanded(
          child: ListView.builder(
            reverse: true,
            itemCount: conversations.length * 10,
            itemBuilder: (BuildContext context, int index) {
              if (index == 0) {
                return message(conversations[0].text, conversations[0].isMe);
              }
              return message(conversations[index % conversations.length].text,
                  conversations[index % conversations.length].isMe);
            },
          ),
        ),
        // message input

        Container(
          margin: const EdgeInsets.all(8.0),
          padding: const EdgeInsets.all(8.0),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(8.0),
          ),
          child: Row(
            children: [
              Expanded(
                child: TextField(
                  controller: textEditingController,
                  decoration: const InputDecoration(
                    hintText: 'Type a message',
                    border: InputBorder.none,
                  ),
                ),
              ),
              IconButton(
                onPressed: () {
                  conversations.insert(
                    0,
                    Conversation(
                        textEditingController.text.trim(), Random().nextBool()),
                  );
                  textEditingController.clear();
                  FocusScope.of(context).unfocus();
                },
                icon: const Icon(Icons.send),
              ),
            ],
          ),
        ),
      ],
    );
  }
}

This simple code has worked for my simple requirements so far. Hope it helps somebody until the Flutter team comes up with an actual solution/implementation.
Demo
https://github.com/user-attachments/assets/51a137ad-9b2e-4ece-bccc-4107d112db42
Simple Usage
  @override
  Widget build(BuildContext context) {
    return AnimatedIndexedStack(
      index: selectedIndex,
      children: [
        ScreenA(),
        ScreenB(),
        ScreenC(),
      ],
    );
  }

Code
import 'package:flutter/material.dart';

class AnimatedIndexedStack extends StatefulWidget {
  const AnimatedIndexedStack({
    required this.index,
    required this.children,
    this.duration = const Duration(milliseconds: 300),
    this.curve = Curves.easeInOut,
    super.key,
  });

  final int index;
  final List<Widget> children;
  final Duration duration;
  final Curve curve;

  @override
  State<AnimatedIndexedStack> createState() => _AnimatedIndexedStackState();
}

class _AnimatedIndexedStackState extends State<AnimatedIndexedStack>
    with SingleTickerProviderStateMixin {
  late int _currentIndex = widget.index;
  late final AnimationController _animationController;
  late final Animation<double> _animation;
  late final Animation<double> _secondaryAnimation;

  @override
  void initState() {
    _animationController = AnimationController(
      vsync: this,
      duration: widget.duration,
    );
    _animation = Tween<double>(begin: 1, end: 0).animate(
      CurvedAnimation(
        parent: _animationController,
        curve: widget.curve,
      ),
    );
    _secondaryAnimation = Tween<double>(begin: 0, end: 10).animate(
      CurvedAnimation(
        parent: _animationController,
        curve: widget.curve,
      ),
    );
    super.initState();
  }

  @override
  void didUpdateWidget(covariant AnimatedIndexedStack oldWidget) {
    if (oldWidget.index != widget.index) {
      // Here `0` means `begin` and `1` means `end` in the `animation` Tween
      // above. Therefore, `begin (1)` is visible and `end (0)` is invisible.
      // So the animation is basically: hide (w/ anim) -> switching index -> unhide (w/ anim)
      _animationController.animateTo(1).then((_) {
        setState(() => _currentIndex = widget.index);
        _animationController.animateTo(0);
      });
    }
    super.didUpdateWidget(oldWidget);
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
      animation: _animation,
      builder: (_, child) {
        return Opacity(opacity: _animation.value, child: child);
      },
      child: AnimatedBuilder(
        animation: _secondaryAnimation,
        builder: (_, child) {
          return Transform.translate(
            offset: Offset(0, _secondaryAnimation.value),
            child: child,
          );
        },
        child: IndexedStack(
          index: _currentIndex,
          children: widget.children,
        ),
      ),
    );
  }
}

For anyone who will find this issue - tried all examples mentioned above - unfortunately none of them was able to achieve the crossfade behavior

Hey @vasilich6107! Have you tried easy_animated_indexed_stack?
It should be fairly easy to achieve what you're looking for with that library.


Upgrade results in conflict with vue and vue-template-compiler from vue-jscodeshift-adapter

Version
4.0.4
Environment info
  System:
    OS: macOS Mojave 10.14.6
    CPU: (8) x64 Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz
  Binaries:
    Node: 11.14.0 - /usr/local/bin/node
    Yarn: 1.19.1 - /usr/local/bin/yarn
    npm: 6.7.0 - /usr/local/bin/npm
  Browsers:
    Chrome: 77.0.3865.120
    Firefox: 67.0
    Safari: 13.0.2
  npmGlobalPackages:
    @vue/cli: 3.5.5

Steps to reproduce
Tried upgrading from 3.x (sorry, unsure where I was previously) to 4.0.4
Also removed and reinstalled globally
Ran vue ui
What is expected?
Vue UI initializes
What is actually happening?
I'm getting the following output
Vue packages version mismatch:

-<EMAIL_ADDRESS>(/Users/dolbex/.config/yarn/global/node_modules/vue/dist/vue.runtime.common.js)
-<EMAIL_ADDRESS>(/Users/dolbex/.config/yarn/global/node_modules/vue-jscodeshift-adapter/node_modules/vue-template-compiler/package.json)

This may cause things to work incorrectly. Make sure to use the same version for both.
If you are using<EMAIL_ADDRESS>simply update vue-template-compiler.
If you are using<EMAIL_ADDRESS>or vueify, re-installing vue-loader/vueify should bump vue-template-compiler to the latest.

/Users/dolbex/.config/yarn/global/node_modules/vue-jscodeshift-adapter/node_modules/vue-template-compiler/index.js:1
Error:

Vue packages version mismatch:

-<EMAIL_ADDRESS>(/Users/dolbex/.config/yarn/global/node_modules/vue/dist/vue.runtime.common.js)
-<EMAIL_ADDRESS>(/Users/dolbex/.config/yarn/global/node_modules/vue-jscodeshift-adapter/node_modules/vue-template-compiler/package.json)

This may cause things to work incorrectly. Make sure to use the same version for both.
If you are using<EMAIL_ADDRESS>simply update vue-template-compiler.
If you are using<EMAIL_ADDRESS>or vueify, re-installing vue-loader/vueify should bump vue-template-compiler to the latest.

    at Object.<anonymous> (/Users/dolbex/.config/yarn/global/node_modules/vue-jscodeshift-adapter/node_modules/vue-template-compiler/index.js:10:9)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)

Yarn lock has the following:

<EMAIL_ADDRESS>  version "2.0.2"
  resolved "https://registry.yarnpkg.com/vue-jscodeshift-adapter/-/vue-jscodeshift-adapter-2.0.2.tgz#67824b360ad84d06f5200f5269ad419a947e7e97"
  integrity sha512-EnRKDgQXGHnNbHpHdTEqBfDMxRPFSUc/hlDNLd9ucgdfpJ3S6o/V6og CfNYgGPO2GKD6AQOsd lltRuoM/SVA==
  dependencies:
    cheerio "^1.0.0-rc.2"
    detect-indent "^6.0.0"
    indent-string "^4.0.0"
    vue-sfc-descriptor-to-string "^1.0.0"
    vue-template-compiler "^2.5.13"

<EMAIL_ADDRESS>  version "15.4.2"
  resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.4.2.tgz#812bb26e447dd3b84c485eb634190d914ce125e2"
  dependencies:
    "@vue/component-compiler-utils" "^2.0.0"
    hash-sum "^1.0.2"
    loader-utils "^1.1.0"
    vue-hot-reload-api "^2.3.0"
    vue-style-loader "^4.1.0"

<EMAIL_ADDRESS>  version "2.6.10"
  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc"
  integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0 qH2A0Em0Cp8aq78 NK9TII263CDVz2QXZsIT yyV/gZc/j/vlwa Epyg==
  dependencies:
    de-indent "^1.0.2"
    he "^1.1.0"

<EMAIL_ADDRESS>  version "2.5.17"
  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb"
  dependencies:
    de-indent "^1.0.2"
    he "^1.1.0"

<EMAIL_ADDRESS>  version "1.6.0"
  resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"

<EMAIL_ADDRESS>  version "2.5.17"
  resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada"

Not likely caused by the fresh install.
<EMAIL_ADDRESS>&<EMAIL_ADDRESS>if they are installed at the same time, package managers are very likely to dedupe them and resolve to the latest 2.6.10.
It is possible that you have accidentally globally installed vue & vue-template-compiler in the past. Could you try yarn global remove vue vue-template-compiler and then try again?

@sodatea - appreciate the response. I did figure that might be the case but looked in the global yarn.lock with nothing in there. Went ahead and ran the command for giggles:
yarn global remove vue-template-compiler
yarn global v1.19.1
[1/2] 🗑  Removing module vue-template-compiler...
error This module isn't specified in a package.json file.
info Visit https://yarnpkg.com/en/docs/cli/global for documentation about this command.

yarn global remove vue
yarn global v1.19.1
[1/2] 🗑  Removing module vue...
error This module isn't specified in a package.json file.
info Visit https://yarnpkg.com/en/docs/cli/global for documentation about this command.

Ok, I also double checked and made sure it wasn't installed with NPM - it was. I uninstalled that sucker and also from yarn global to try fresh. Installed in yarn.... no go. installed through npm -g and it worked.... whatever... I'm sure it's just something gross on my end.

I also have this problem. I try to run npm install vue -git  work


connectionString for Azure SQL

I am trying to set up Azure SQL as a state store as described here: https://docs.dapr.io/reference/components-reference/supported-state-stores/setup-sqlserver/
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: concerts-azuresql
spec:
  type: state.sqlserver
  version: v1
  metadata:
    - name: useAzureAD
      value: true
    # Connection string or URL of the Azure SQL database, optionally containing the database
    - name: connectionString
      value:

What kind of connectionString is expected here? There are a few different options listed in Azure, some of them requiring a user ID and password. I have no idea what to enter to make it work.

Hi @danobis we probably should extend the docs, but for now please take a look at this: https://learn.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure?view=azuresql&tabs=azure-powershell


Update ci.yml

What Changed
Why
Todo:

[ ] Add tests
[ ] Add docs

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@a40433f). Click here to learn what that means.
The diff coverage is n/a.

:exclamation: Current head 307b67d differs from pull request most recent head eea63a0. Consider uploading reports for the commit eea63a0 to get more accurate results

@@            Coverage Diff            @@
##             master      #11   +/-   ##
=========================================
  Coverage          ?   75.57%
  Complexity        ?      580
=========================================
  Files             ?       95
  Lines             ?     1998
  Branches          ?      148
=========================================
  Hits              ?     1510
  Misses            ?      423
  Partials          ?       65

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a40433f...eea63a0. Read the comment docs.


Document log file locations?

Two items here:

Document where the tabprotosrv.txt and log.txt can be found by default and what will be in each one (interactive vs. data).
Add a link out to the new Tableau Log Viewer tool on github.

Log location already existed in FAQ, added note about Log Viewer tool.


Sampling * Images can not exceeds 200 (roughly). Otherwise GUI lost response.

I have tried the dreambooth and automatic1111 released 14hours ago. Both of them worked for SD 1.5. However, what I have found is : sampling * Images can not exceeds 200 (roughly). Otherwise the automatic1111 GUI lost response. The back end calculation seemed to complete successfully, Show info like:Total progress100% 63/63 [01:01<00:00,  1.03it/s]. However, the images did not appear. Then I click any buttons on the GUI, none responded.
I have to refresh the browser to reload. The GUI then work again.
I have tried it with 1,2,3,4 images (batch count* batch size), found it is strong linked to the sampling number. The upper limit seems to be around 200 (not exactly 200)

I have tried the latest model, the problem is still there.
P.S. I have been using dreambooth for two months. The problem appears after the release of SD2.0 related version

that is probably an issue with the webui not the colab itself

Please close this and open an issue on the AUTOMATIC1111 repo

OK


Leaderboard fails to display properly

It is possible for the leaderboard to display improperly and repeat entries.

Fixed by changing sort method.


Welcome page links don't open in a new tab

Description
It needs this: https://github.com/refined-github/refined-github/blob/main/source/helpers/target-blank-polyfill.ts
How to replicate the issue + URL

Open the welcome page
e.g. by running this in the background page chrome.tabs.create({url:chrome.runtime.getURL('assets/welcome.html')})
Click any links

Extension version
24.11.12
Browser(s) used
Safari, Safari iOS
Token ⚠

[X] I set a token in the options page. I understand that some features require a token to work.

It's actually already loaded but it doesn't work, apparently…
https://github.com/refined-github/refined-github/blob/60a918a8188053df8b554f7923ae69fee7cd408e/source/welcome.svelte#L7


Make commandline similar to ZUV

ZUV e.g. starts with a "--action validate" parameter, we should also start mustangproject with something like "--action=embed-xml", "--action=embed-additional-data", "--action=extract-xml", "--action=extract-additional-data",

How you can help: have a look at ZUV https://github.com/ZUGFeRD/ZUV/, change toecount (the mustangproject command line) accordingly. Change help text. Propose changes for documentation e.g. on website. Currently we are only using jargs in both projects, maybe there is some library to have a uniform way to treat interactive (e.g. prompt for filename) and scripted parameters (i.e. filename is passed as argument).


Create Posts “wallet-connect-mobile-dapp”

Automatically generated by Netlify CMS

👷 Deploy Preview for superb-sawine-40c5c7 processing.

Name
Link

🔨 Latest commit
e6679fddf5be07826a355501362013f06e1e3284

🔍 Latest deploy log
https://app.netlify.com/sites/superb-sawine-40c5c7/deploys/62d64b4245e0860008e015c1


feat(react-query): Adding 'exposeMutationKeys' config option to react…

react-query plugin
Description
We need to use keys and fetcher of generated mutations. Also, right now useMutation is generated without key and every call of useMutation creates new subscriber. This PR adds key for each mutation that provide their uniqually so we can subscribe to mutation in case of passed variables.
Related #6724

Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[x] This change requires a documentation update

How Has This Been Tested?
The tests is similar to useQuery exposeFetcher and exposeQueryKeys configuration

[x] Should generate mutation fetcher field when exposeFetcher is true and the fetcher isn't a react hook
[x] Should NOT generate mutation fetcher field when exposeFetcher is true and the fetcher IS a react hook
[x] Should generate getKey for each mutation if exposeMutationKeys is true

Test Environment:

OS: macOS Big Sur 11.2.3 (20D91)
NodeJS: v12.22.6

Checklist:

[x] I have followed the CONTRIBUTING doc and the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[x] Any dependent changes have been merged and published in downstream modules

Hi! Sure, I've just updated the PR. And fixes little bug: useMutation's key can't be based on variables because it returns mutate(variables) function and we don't know about variables in hook. So it must provide string key only. The implementation on this kind of ts overload in react-query

@dotansimha I'm finished, can you please approve workflows runs?


Add reading to Custom Dictionary automatically

Reading should be added automatically when adding from a dictionary entry to a custom dictionary.

What's the use case for this? Adding new words/names should be normally done when dictionaries you have don't have a matching entry for it at all, or don't have the reading you need. So filling the reading field seems counterproductive.
If you're adding existing entries with your own definitions, I'd advice against it, specifically for verbs. Because verb deconjugation depends on the word class (see Deconjugation Support) and as you might have noticed, when you add custom words, JL only asks you what type of word it is (e.g. verb) and not its word class (e.g. v5-r). So when you add a verb, JL assumes it can be any verb type and this causes deconjugation process info to be rubbish, that's why the deconjugation process info is not displayed for custom word dictionary entries.
(I could add an additional field to "Add Custom Word" window so that the user can specify the specific word classes/PoS so this wouldn't be a problem. But I'm not sure if there's a demand for it and if users would be able to correctly specify it for words not found in their dictionaries.)

what i like/tend to do is the following:
a) when i start a new VN i add new Character names to the Custom Name Dictionary, this way i don´t have to look through a dozen names every time to find the right one. (A lot of Characters are introduced in the beginning so it´s a harder to remember all them).
b) basically same as above but with characters that don´t appear / are not mentioned that often.
since i have a higher priority for the custom name dictionary, the name i´m actually looking for will basically always be the first entry whenever i have to lookup the name.
filling in the reading myself seems to be less effort but "auto filled readings" will allow for a mouse only workflow.

This has been implemented for "Add Custom Name" window in https://github.com/rampaa/JL/commit/0ff0e31f8580dc994096d3e7433a4362ac77b61f, it will be included in the next release.

I could add an additional field to "Add Custom Word" window so that the user can specify the specific word classes/PoS so this wouldn't be a problem

This has been implemented as well: https://github.com/rampaa/JL/commit/e6cc5917eec8f6bb1dd84d65c04219a89da980f5


Files deposited under Stanford only access rights are available for world download on PURL

A user has uncovered a bug in the access rights.
Files deposited with the setting of Stanford-only access are downloadable by non-authenticated users.
The access rights setting in Argo says "stanford and world (file)" which I don't believe I have ever seen before.
Here is a test item that I created to reproduce the error reported by the user:
druid:sj995gy8148
https://sdr.stanford.edu/works/4664

I believe this is a duplicate of https://github.com/sul-dlss/happy-heron/issues/1933

Agreed


[FEATURE]

Mah dude, this is freaking awesome. I totally hate that GitHub doesn't allow for DM. Will be giving gptsh a try as soon as I have some free time. All the best! -Martín

Hey, thanks for the feedback ! I really appreciate it ;)


Doc: add example raft-kv

Add an example of distributed kv store implementation: ./example-raft-kv.
Includes:

An in-memory RaftStorage implementation store.

A server is based on actix-web.
Includes:

raft-internal network APIs for replication and voting.
Admin APIs to add nodes, change-membership etc.
Application APIs to write a value by key or read a value by key.

Client and RaftNetwork(network) are built upon reqwest.

@ppamorim
Have a look at the code:DDD.
I've not yet got time to update doc.:(

@drmingdrmer Hi again, I opened a PR in your fork (it's is in draft at the moment, I will give some hours to check again if everything is right) with some fixes and how I think it should be implemented. I tried to prevent any type of abbreviation in the implementation, even if it looks verbose. I think it's easier to understand what is happening. Please be free to check that.

@drmingdrmer Hi again, I opened a PR in your fork (it's is in draft at the moment, I will give some hours to check again if everything is right) with some fixes and how I think it should be implemented. I tried to prevent any type of abbreviation in the implementation, even if it looks verbose. I think it's easier to understand what is happening. Please be free to check that.

Great! Let me check it out!

@drmingdrmer I did a test where:

I started a leader at port 8500.
Started a learner at port 8501 and set it as member.

After that the nodes started heartbeating as expected, calling POST /raft-append
Then I left the server working for a moment and killed the leader at port 8500.
The node running at port 5801 called POST /raft-vote, probably it turned to be the leader since it's the only node that kept running.
After that I created a new learner at port 8502.
But when I call 5801/list-nodes it returns the node itself and the node that was killed at port 8500, the 8502 is not present. Am I missing something?

@drmingdrmer I could panic the application when calling /list-nodes on the leader.
The problem happened on the function send_rpc:
let addr = {
      let state_machine = self.store.state_machine.read().await;
      state_machine.nodes.get(&target).unwrap().clone() // <------ `unwrap()` caused the application to crash
};

But when I call 5801/list-nodes it returns the node itself and the node that was killed at port 8500, the 8502 is not present. Am I missing something?

The cluster has only 2 nodes thus a quorum(majority) is the entire cluster, i.e. 8500 and 8501.
After killing one of them, no consensus can be made because a quorum requires 2 nodes, and no change can be made to the cluster which has only one online node 8501.

@drmingdrmer I could panic the application when calling /list-nodes on the leader.
The problem happened on the function send_rpc:
let addr = {
      let state_machine = self.store.state_machine.read().await;
      state_machine.nodes.get(&target).unwrap().clone() // <------ `unwrap()` caused the application to crash
};

Yes, it will panic if the node is not added.
A real-world application should check the presence of a target and if not, return an error.

@drmingdrmer Understood, so the minimum number of nodes is 3. Is there any way to recover from this state by adding 2 learners?

@drmingdrmer Understood, so the minimum number of nodes is 3. Is there any way to recover from this state by adding 2 learners?

No way. :(
A learner does not vote and it does not count as a member of a quorum.

@drmingdrmer I could panic the application when calling /list-nodes on the leader.
The problem happened on the function send_rpc:
let addr = {
      let state_machine = self.store.state_machine.read().await;
      state_machine.nodes.get(&target).unwrap().clone() // <------ `unwrap()` caused the application to crash
};

Yes, it will panic if the node is not added.
A real-world application should check the presence of a target and if not, return an error.

@drmingdrmer Talking about that. I am trying to handle the state machine error, I created a new enum called StateMachineError just to hold this error. You can see the implementation here: https://gist.github.com/ppamorim/8294fde7025cb66bb8639551c8abac2d
I had to do that because RPCError does not contain any generic error type that I can use (or I am not aware of) to wrap this state machine error. Does it make sense to implement From on my StateMachineError to convert it to a RPCError?

@drmingdrmer Ah, after reading a bit more and being less stupid I could understand that I can use RPCError::RemoteError(RemoteError::new(target, e))

@drmingdrmer I could panic the application when calling /list-nodes on the leader.
The problem happened on the function send_rpc:
let addr = {
      let state_machine = self.store.state_machine.read().await;
      state_machine.nodes.get(&target).unwrap().clone() // <------ `unwrap()` caused the application to crash
};

Yes, it will panic if the node is not added.
A real-world application should check the presence of a target and if not, return an error.

@drmingdrmer Talking about that. I am trying to handle the state machine error, I created a new enum called StateMachineError just to hold this error. You can see the implementation here: https://gist.github.com/ppamorim/8294fde7025cb66bb8639551c8abac2d
I had to do that because RPCError does not contain any generic error type that I can use (or I am not aware of) to wrap this state machine error. Does it make sense to implement From on my StateMachineError to convert it to a RPCError?

If a target is not found, it probably is an administrative mistake:
The administrator was trying to add a learner without writing the node address to the cluster.
At least it's not the state-machine's fault, IMHO.
What about making it a RPCError::Network(NetworkError)?
I.e., treat such an error an unreachable node error.
NetworkError can be built from any StdError:
impl NetworkError {
    pub fn new<E: Error + 'static>(e: &E) -> Self {
        Self {
            source: AnyError::new(e),
        }
    }
}

@drmingdrmer Ah, after reading a bit more and being less stupid I could understand that I can use RPCError::RemoteError(RemoteError::new(target, e))

Hmm.. an RPCError::RemoteError is meant to be a wrapper of an error that happened on a remote peer.

@drmingdrmer Could implement it by doing:
pub struct NodeNotFound {
  pub id: NodeId,
}

impl NodeNotFound {
  fn new(id: NodeId) -> Self {
    Self { id }
  }
}

Then later using:
let addr = state_machine.nodes
      .get(&target)
      .ok_or(RPCError::Network(NetworkError::new(&NodeNotFound::new(target))))?
      .clone();

Just curious why the & is required.

@drmingdrmer Could implement it by doing:
pub struct NodeNotFound {
  pub id: NodeId,
}

impl NodeNotFound {
  fn new(id: NodeId) -> Self {
    Self { id }
  }
}

Then later using:
let addr = state_machine.nodes
      .get(&target)
      .ok_or(RPCError::Network(NetworkError::new(&NodeNotFound::new(target))))?
      .clone();

Just curious why the & is required here &NodeNotFound::new(target).

Right:DDD
Because NetworkError::new() actually does not consume the input error.
It internally builds another object from &e.

Question for further discussion:
I noticed that when I try to write data to the state machine using the the learners (already members), I get this error:
{
	"Err": {
		"ForwardToLeader": {
			"leader_id":<PHONE_NUMBER>000485989
		}
	}
}

I am aware that is expected and I understand that with this implementation only the leader accepts write of data. Could be possible to make the learners to dispatch the write of the data to the leader in that case? I am asking that based on the information ForwardToLeader that the learner returns. I expect the caller to foward the write to the leader but could the same be done inside the leaner using the management endpoints?

Question for further discussion:
I noticed that when I try to write data to the state machine using the the learners (already members), I get this error:
{
	"Err": {
		"ForwardToLeader": {
			"leader_id":<PHONE_NUMBER>000485989
		}
	}
}

I am aware that is expected and I understand that with this implementation only the leader accepts write of data. Could be possible to make the learners to dispatch the write of the data to the leader in that case? I am asking that based on the information ForwardToLeader that the learner returns. I expect the caller to foward the write to the leader but could the same be done inside the leaner using the management endpoints?

Yes, it's possible to embed a client that can deal with ForwardToLeader error into an endpoint on a learner.
And let users use a lightweight client that does not deal with such errors.

A demo of error handling on the client-side has been requested: DD #158

@drmingdrmer I tried to create a batch interaction with the state machine with the implementation below:
https://gist.github.com/ppamorim/858bd2b48f779beecb3941d653cab0d8#file-mod-rs-L30-L45
I did that to prevent the need to call the endpoint for each user, so I can insert multiple the entries to the state machine's data at once. But it's causing the error:
{
	"Err": {
		"Fatal": "Stopped"
	}
}

Is it some sort of timeout between heartbeats? What I need to do to prevent that?

@drmingdrmer I will add you in the project, after we sort this issue I can replicate that in the example.

@drmingdrmer I will add you in the project, after we sort this issue I can replicate that in the example.
Edit: You should have the project access now.

Then what do I do to reproduce this problem 🤔 ?

@drmingdrmer You can create a massive JSON (more than 20 entries) with this format:
[
  {
    "email"<EMAIL_ADDRESS>    "region": "usa"
  },
  {
    "email"<EMAIL_ADDRESS>    "region": "spain"
  }
]

You need to call POST - /batch-user and send this JSON array.
If you run cargo run it will start the server at <IP_ADDRESS>:8100.

@drmingdrmer I think the issue is around actix-web limiting the payload size, this can be a problem even for production level synchronization.

@drmingdrmer You can create a massive JSON (more than 20k entries) with this format:
[
  {
    "email"<EMAIL_ADDRESS>    "region": "usa"
  },
  {
    "email"<EMAIL_ADDRESS>    "region": "spain"
  },
  ...
]

You need to call POST - /batch-user and send this JSON array.
If you run cargo run it will start the server at <IP_ADDRESS>:8100.
Mind that the issue does not happen if you have only the leader started, you can start 3 instances by running ./test-cluster.sh.

Got it. Let me check it out.
Is this PR good enough to merge?


ARROW-10763: [Rust] Speed up take for primitive / boolean for non-null arrays

This PR significantly speeds up the take (primitive and boolean) kernels for non-null arrays (even more if indices contain nulls)
take i32 512            time:   [1.1847 us 1.1879 us 1.1915 us]
                        change: [-47.038% -46.813% -46.609%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild

Benchmarking take i32 1024: Collecting 100 samples in estimated 5.0083 s (2.2M i                                                                                take i32 1024           time:   [2.2183 us 2.2255 us 2.2330 us]
                        change: [-48.699% -47.683% -46.797%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  2 (2.00%) high mild

Benchmarking take i32 nulls 512: Collecting 100 samples in estimated 5.0016 s (3                                                                                take i32 nulls 512      time:   [1.2828 us 1.2882 us 1.2941 us]
                        change: [-44.592% -44.377% -44.178%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
  1 (1.00%) low severe
  6 (6.00%) high mild
  4 (4.00%) high severe

Benchmarking take i32 nulls 1024: Collecting 100 samples in estimated 5.0112 s (                                                                                take i32 nulls 1024     time:   [2.3798 us 2.3846 us 2.3894 us]
                        change: [-41.139% -40.735% -40.358%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) low mild
  1 (1.00%) high mild

Benchmarking take bool 512: Collecting 100 samples in estimated 5.0061 s (3.6M i                                                                                take bool 512           time:   [1.3864 us 1.3937 us 1.4009 us]
                        change: [-38.319% -38.028% -37.734%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild

Benchmarking take bool 1024: Collecting 100 samples in estimated 5.0006 s (2.0M                                                                                take bool 1024          time:   [2.4654 us 2.4722 us 2.4790 us]
                        change: [-36.041% -35.820% -35.621%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild

Benchmarking take bool nulls 512: Collecting 100 samples in estimated 5.0002 s (                                                                                take bool nulls 512     time:   [1.1865 us 1.1901 us 1.1939 us]
                        change: [-66.326% -65.988% -65.656%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) low mild
  3 (3.00%) high mild
  2 (2.00%) high severe

Benchmarking take bool nulls 1024: Collecting 100 samples in estimated 5.0098 s                                                                                take bool nulls 1024    time:   [2.0748 us 2.0814 us 2.0889 us]
                        change: [-73.180% -73.053% -72.925%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe

FYI @jorgecarleitao I saw you did recently work on take.


Update new docs version picker to work on home and examples pages

Alternate fix to #36221.
This doesn't address every issue, but it fixes the broken links for Home and Examples. This also fixes the 404 for the utilities/opacity/ page. What remains is figuring out what to do about two situations:

Disabled links for components added in later releases (e.g., https://twbs-bootstrap.netlify.app/docs/5.1/components/placeholders/)
Providing a general "v5.1 docs link" instead of a page-specific link

TBD on both those.
/cc @julien-deramond

For more context on why we would keep this version picker, see https://github.com/twbs/bootstrap/issues/31980. We've had a handful of issues and more requests to better support jumping between versions of specific pages.
Across major versions, we need better linking and some updates for the previous major versions.

Let's keep in mind that it would be safer in the future to wait for the beginning of a major version to change the sitemap of the documentation (e.g. moving or renaming some sections). Otherwise, between minor versions, if the sitemap of the documentation changes too much, it will result in a lot of 404s.

Definitely. No major restructuring of pages here. Only thing we should have to worry about is new pages, which we've accounted for with the added front matter.

Don't know if it would be feasible but while I was testing this PR, one possible evolution would be to keep the anchor links as well:

I'm going to skip that for now, definitely a nice to have. Also a little tougher since the headings can change between versions (e.g., ## Sass became ## CSS on a ton of pages). Not a huge deal because those links would still function, they just wouldn't scroll to the section.


Optimize 0041_fulfill_orderdiscount_token_created_at_old_id migration

ℹ This is a 3.4 port of #10009
I want to merge this change because it optimizes 0041_fulfill_orderdiscount_token_created_at_old_id migration
local testing(60k orders, 60k discounts):
before: 11min 50sec ❌
after: 0.9sec white_check_mark ✅

Impact

[ ] New migrations
[ ] New/Updated API fields or mutations
[ ] Deprecated API fields or mutations
[ ] Removed API types, fields, or mutations
[ ] Documentation needs to be updated

Pull Request Checklist

[ ] Privileged queries and mutations are guarded by proper permission checks
[ ] Database queries are optimized and the number of queries is constant
[ ] Database migration files are up to date
[ ] The changes are tested
[ ] GraphQL schema and type definitions are up to date
[ ] Changes are mentioned in the changelog

Task linked: CLOUD-1705 Improve 3.3 -> 3.4 migrations performance


CIV-1976 Text Change

Before creating a pull request make sure that:

[ ] commit messages are meaningful and follow good commit message guidelines
[ ] README and other documentation has been updated / added (if needed)
[ ] tests have been updated / new tests has been added (if needed)

Please remove this line and everything above and fill the following sections:
JIRA link (if applicable)
https://tools.hmcts.net/jira/browse/CIV-1976
Change description
Related PRs
https://github.com/hmcts/civil-ccd-definition/pull/702
https://github.com/hmcts/civil-general-apps-ccd-definition/pull/133
https://github.com/hmcts/civil-general-applications/pull/212
Does this PR introduce a breaking change? (check one with "x")
[ ] Yes
[ ] No

CIV-1976 Text change.docx


nixos/setup-etc.pl: Cleanup setup-etc.pl

Description of changes
Cleanup of setup-etc.pl
Best reviewed by commit.
The etc test is still passing, but the next thing i'll do is expqnd this test.

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.05 Release Notes (or backporting 21.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

Hi there!
I've had a look and added some suggestions and comments to the code
In general:
* Have a look at libraries like `File::Spec` that will help with handling paths correctly, avoiding unnecessary slashes, with for instance `my $path = File::Spec->catfile( $foo, "bar",  $file );` rather than `my $path = "$foo/bar/$file";`

* And `File::Slurp` that has nice functions for reading and writing directories and files, and will fatal on errors by default.

Do we really need catfile? This is NixOS only anyway, right? So the slashes should be fine in my opinion. Is there a good reason for using catfile here?

Please resolve the conflicts with the master branch. Most of these conflicts are due to warning strings having been added since this PR was last rebased, or additional checks having been introduced.

Do we really need catfile? This is NixOS only anyway, right? So the slashes should be fine in my opinion. Is there a good reason for using catfile here?

As I understand it all string interpolations used in this script can have a path, not just a filename/dirname as the value of their variables (e.g. /etc/$fn). The docs on File::Spec::catfile don't seem to mention how/if this is dealt with. Taking a peek at the current File/Spec/Unix.pm, it seems to deal with this as expected though.
What we would gain from using catfile is a canonicalization of the paths we use. Other than that, given that this code only runs on unix systems, behavior seems identical to naive string interpolation. While canonicalization results in cleaner final paths, non-canonicalized paths might give more insight into how an invalid path might have been generated, when an issue occurs. Most paths should also be clean to begin with unless a NixOS module or the user config sets an already non-canonical filename in environment.etc.

could somebody merge this?:D rebasing will become a pain as people are probably trying to improve the error and warning outputs of this file
@Lassulus @stigtsp


\o/ dedicated packit-service \o/

Uses commits from #345
Fixes #212

I am merging because I want to deploy p-s with this change so we're sure the split was done right. Please, keep on reviewing.


Remove UUID related APIs from ballerina/system module

Since we already introduced the new ballerina/uuid module to cover all UUID functionalities, we can remove existing uuid APIs from ballerina/system module

Closing since completed.

Closing since completed.


unaligned pointer for rand

thread '<unnamed>' panicked at library/core/src/panicking.rs:215:5:
unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap
stack backtrace:
   0: rust_begin_unwind
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_nounwind_fmt::runtime
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/core/src/panicking.rs:110:18
   2: core::panicking::panic_nounwind_fmt
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/core/src/panicking.rs:120:5
   3: core::panicking::panic_nounwind
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/core/src/panicking.rs:215:5
   4: core::intrinsics::copy::precondition_check
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/core/src/ub_checks.rs:66:21
   5: core::intrinsics::copy
             at /rustc/a07f3eb43acc5df851e15176c7081a900a30a4d7/library/core/src/intrinsics.rs:2989:9
   6: getrandom
             at /risingwave/.cargo/registry/src/index.crates.io-6f17d22bba15001f/madsim-0.2.22/src/sim/rand.rs:212:9
   7: getrandom::imp::is_getrandom_available
             at /risingwave/.cargo/git/checkouts/getrandom-dec8fd0f1dd9e7e6/e79a7ae/src/linux_android.rs:30:24
   8: core::ops::function::FnOnce::call_once

I believe this issue has been fixed by #202 (included in v0.2.27) as I see is_getrandom_available in the backtrace. However, #202 is still problematic if the buf argument passed to getrandom is not 8-bytes aligned. This will be fixed in #206.


[Bug]: Google Chat (Hangout chat) Text input focus lost

Preflight Checklist

[X] I have read the Contributing Guidelines for this project.
[X] I agree to follow the Code of Conduct that this project adheres to.
[X] I have searched the issue tracker for a feature request that matches the one I want to file, without success.

Ferdium Version
6.2.0
Recipe Name
hangoutschat
Recipe Version
1.6.0
Last Known working version of the recipe
n/a
Steps to reproduce

Open any char window
The focus remain on editor box for a second and then focus is lost.

Expected Behavior
Focus should remain on text input.
Actual Behavior
Focus is lost
Screenshots
Not applicable
Additional Information
No response

Same thing with Teams


Add changes for px central helm install

What this PR does / why we need it:
This PR is based off of an earlier PR: https://github.com/portworx/torpedo/pull/563
Which issue(s) this PR fixes (optional)
Closes #
Special notes for your reviewer:

Succesful runs:
https://jenkins.portworx.dev/job/Torpedo/job/helm-central-jliao/44/
https://jenkins.portworx.dev/job/Torpedo/job/helm-central-jliao/45/
Ran torpedo sanity check:
http://jenkins.pwx.dev.purestorage.com/job/Torpedo/view/Torpedo NextPX/job/tp-nextpx-basic-csi/467/parameters/


Module compiled with Swift 5.1.2 cannot be imported by the Swift 5.2 compiler:

I had to reinstall xcode and upgraded to 11.4
I now get this error:
Module compiled with Swift 5.1.2 cannot be imported by the Swift 5.2 compiler:
***/node_modules/react-native-turbolinks/ios/Turbolinks.framework/Modules/Turbolinks.swiftmodule/x86_64-apple-ios-simulator.swiftmodule
I have reinstalled turbolinks and cleaned the project
Any ideas?

I will check....

Fixed https://github.com/lazaronixon/react-native-turbolinks/releases/tag/v2.2.6


[BUG] i cant find the bloxstrap menu

Acknowledgement of preliminary instructions

[X] I have read the preliminary instructions, and I am certain that my problem has not already been addressed.
[X] My answer given in the checkbox above is a lie.

What problem did you encounter?
ive had the version 2.5.4 and the most recent versions, and everytime i search the bloxstrap menu on my pc it doesnt show up
pls help

Did you read https://github.com/pizzaboxer/bloxstrap/wiki/Opening-the-Bloxstrap-menu?


create navbar

as a user, I would like a simple navigation bar that sticks to the top of the page to take me to the login/register page, the all products page, the home page(maybe same thing), and my cart page.

Nav bar is non-functioning for logged-in users


v11.2.6 fix typo

Current coverage is 97.57%

Merging #236 into master will not affect coverage as of ee30a59

@@            master    #236   diff @@
======================================
  Files           26      26
  Stmts          371     371
  Branches         0       0
  Methods         81      81
======================================
  Hit            362     362
  Partial          0       0
  Missed           9       9

Review entire Coverage Diff as of ee30a59

Powered by Codecov. Updated on successful CI builds.


In OC Project, How to use neo-swift

neo-swift ,class is not inherit NSObject。
My project is OC Project ， cause no way to reference  neo-swift class

@xuzang Issue done. You can use in OC Project.


Hard-tab support

At the risk of starting a Holy War, (#indent-level! 4) implies soft-tabs; i.e., a number of spaces. Some people prefer hard-tabs (i.e., a single \t at each indentation level) and some codebases -- misguided though they may be -- expect them per their style guide.
I propose updating the format of this directive such that its parameter is either:

A digit, representing the number of spaces in a soft-tab (as now);
Or a t, say, representing hard-tab indentation.

Why not.
It isn't something that is needed for the first release. But when that's done, it will be something to consider.

More than a preference, some languages actually require using tabs. i.e imba.
I'm actually working on its tree-sitter grammar and I want to use topiary at some point to format imba code.


how do you add new workers?

I set up a cluster with 2 nodes for testing purposes, an now I want to add a new worker. How should I do this? I can't find any docs about this.

Closing this issue as no further questions are open here


Missing registration response validation?

Hello, I've looked into your code, and while looking at the flow, I've seen that you do not validate the registration response.
Am I missing something? or was it left out for any reason?
https://www.w3.org/TR/webauthn/#registering-a-new-credential

@BarakSilverfort Why did you close this?

@coreymt I dove deeper into the code and found validation for most of the steps.


Upgrade govuk_test to 4.0.0

This will allow us to upgrade selenium-webdriver.

Thanks, @floehopper :+1:


build 8.8

Hi, can i ask you to generate release for beats 8.8 ?
No matter what I do inside my fork, I'm getting only 64bit build :(
thanks

Sure, sorry I did not see your message :( make sure to @ me next time so there is more chance I see it :)

Here you have it : https://github.com/vrince/arm-beats/releases/tag/v8.8.2


[ BUG ] [ JS ] [ ST3 ] Comma-first formatting support disabled?

Comma-first feature
Some weeks ago appeared the "comma_first": true // Add comma first option for javascript formatting which was a very convenient syntax for the variable declaration section, but seems to be disabled now. Turning it from false to true in the configuration has no effect. Was it just experimental & temporary? It would be great if the feature came back, it seems I'm not the only one on Github who likes this style.
Example
Code formatted comma-first with k&r, 2 space, space between !empty paren & square, ';' at 'var' level and object attributes aligned:
var a = 1
  , b = 'a'
  , c = {
      c_a: 2
    , c_b: 'b'
  }
  , d = [
    {
        'd1 a': 3
      , 'd1-b': 'c'
    }
    , {
        d2_a: 4
      , d2_b: 'd'
    }
  ]
  , e = [ 5, 6, 7, 8, 9 ]
  , f = function( x, y ) {
    return !( ( x - y ) % 2 )
  }
;
console.log( f( c.c_a, d[ 1 ].d2_a ) )

Why you close issue?

I don't know why this feature did not worked as expected when I tried it two weeks ago (possibly linked to a weird update from Package Controll), but I had the occasion to make some tests recently on the same files, same project, and this comma-first feature was working again.
So this is not an issue anymore: "comma_first": true enables the feature as expected now.

Ok. Thank you for support

@akalongman This plugin is great, however I prefer no newline following the open bracket or curly on arrays and object literals.  My style is like so (things line up better).  Any ability to add support so the first line doesn't get a new line?  Doesn't have to be exact, just something more along the lines of https://gist.github.com/isaacs/357981.
var a = 1
  , b = 'a'
  , c = { c_a: 2
        , c_b: 'b'
        }
  , d = [ { 'd1 a': 3
          , 'd1-b': 'c'
          }
        , { d2_a: 4
          , d2_b: 'd'
          }
        ]
  , e = [ 5, 6, 7, 8, 9 ]
  , f = function( x, y ) { return !( ( x - y ) % 2 ) }

Seems like this will require upstream support so I've commented on issue https://github.com/beautify-web/js-beautify/issues/743 in js-beautify.


interactive bots: Create Spotify Search bot.

Automated message from Dropbox CLA bot
@cosmicAsymmetry, it looks like you've already signed the Dropbox CLA. Thanks!

@cosmicAsymmetry looking good. There are some style issues in your code, probably want fix those linter errors.

Changes made and tests passed!

@umairwaheed could you please approve my task? https://codein.withgoogle.com/dashboard/task-instances/6270732147359744/

Example for why we need better handling of statuses:

@cosmicAsymmetry it looks like this is failing tests. Can you work on ensuring all tests pass? We can't merge until that is done.

Yes. Will do.

@cosmicAsymmetry
We really need to simplify this code before it has a chance of being merged.  I am going to approve the task but close the PR for now.  There are like 90 lines of code that are really hard to understand, and we'd need to spend a lot time refactoring it.
After working on some other stuff, we can always come back to it.

Okay. Thanks @showell.


Replace rich.console to btlogging.loggin

In module bittensor/utils/registration.py I left the console, because a lot of data output is used. This will create a lot of logging.

Is there a reason to use the colours/emojis in logging?

It's beautiful and informative for users


Show housing as a difference in the smartbanner

Resolves #255
I used Githubs windows application to rebase my fork, so that is why there is an extra commit. I doesn't seem to break anything but I'm not to sure how to fix it without redoing my work so hopefully it will work as is.

For single-feature commits, the history doesn't matter much because I can just squash them into a single commit with basically no effort via the web UI. Of course, if you'd like to learn more about Git, I can personally recommend an excellent (and free) udacity course here. There's also other, more powerful GUIs out there, like GitKraken
Anyways, code looks good except for a minor syntax issue I've taken the liberty of correcting. Testing now, if all goes well expect this to be merged soon


[FIX] Allow method=None for covariance.

Closes https://github.com/mne-tools/mne-python/issues/3388

thx @jaeilepp
travis failure is unrelated. @Eric89GXL is an SVD failure on maxfilter :)

I got a [Travis VM running] (http://stackoverflow.com/questions/29753560/how-to-reproduce-a-travis-ci-build-environment-for-debugging) and couldn't reproduce, and builds pass on master so it looks like Travis-CI can't reproduce it, either. It's too bad, because that would be a nice test case for the Intel folks.


The EntityFormat utilities don't convert properties included in a expression through the ConversionService

The conversion to String when the JSON data is sent to the select2 component is performed by the EntityFormat utilities which are registered in the ConversionService.
Those utilities use the SpEl support to parse the expression and convert the entity to a String. It seems the SpEl expression isn't using or doesn't have access to the ConversionService itself to convert to String the object properties included in the expression.
A sample of the problem can be looked at the following stackoverflow question: http://stackoverflow.com/questions/42947604/sptingroo-2-0-rc1-how-can-i-use-date-calenderfields-in-entityformatexpression

It seems we have to provide the ConversionService available in the Spring Context to the SpEl expressions after being parsed. I've used a way that works but seems a bit of a hack to me. Maybe we are not using or configuring well the SpEl utilities, but I haven't been able to find another way.


Login functionality is not not working

core.js:6479 ERROR TypeError: Cannot read properties of undefined (reading 'email')

can you assign to me?


Can't publish build artifacts

I added a Publish Build Artifacts step, but it always fails with an error:
2015-07-31T12:58:53.920Z: Cleaning staging folder: /vso/work/build/e77e2255f478cdc1bc5f4775e7d7cc6c159410e4c8bda1b698b41a91d1bfaec1/staging/Editor
2015-07-31T12:58:56.303Z: found 323 files
2015-07-31T12:58:59.740Z:
2015-07-31T12:58:59.740Z: Start: Upload a build artifact
2015-07-31T12:58:59.740Z: End: Upload a build artifact
2015-07-31T12:58:59.740Z:
##[Error] 2015-07-31T12:58:59.741Z: No container folder specified.
2015-07-31T12:58:59.741Z: Failing task since command failed.

Here's the configuration:

It feels like there's something missing in the UI, especially since the code goes looking for a containerfolder property.

We'll investigate.
If you go to the variables tab and set
system.debug true
Does that add any info that helps?

I can see that the agent creates a staging/Editor directory and successfully copies all the files in there. After copying it just fails with that error... no interesting stuff in there.

I confirm that it works when running the build in a Windows agent (not this project).

assigning to Scott

Having the same issue, any progress or ETA?

Scott?

I was unable to reproduce this.  Is it still happening?

Scott,
My particular issue was resolved with a separate fix having to do with deployment slots and the task template itself has since updated too.

I worked around the problem almost a year ago.


Add currency conversion to PowerToys Run

Description of the new feature / enhancement
In additional to support converting units through %% (eg. "%% 5in to cm"), add currency conversion as well (eg. 100 USD to CAD). This feature will require internet connection to get the most current conversion rate, but I think it's a useful conversion.
Scenario when this would be used?
Whenever currency not native to my own is seen, I always had to open internet browser to google the current conversion. This will allow a quick conversion with a keyboard shortcut.
Supporting information
No response

Duplicate of #3248

Thanks for your suggestion! This issue is a duplicate.
I'm linking this issue to #3248 to centralize the discussion thread, please go to that thread for discussion.
Thanks for your help to make PowerToys a better piece of software!


chore(dashmate): update Core to 21.2 nightly

Issue being fixed or feature implemented

Update Core to latest nightly to ensure compatibility with Platform
What was done?

Updated Core to v21.2.0-nightly.2024.09.04
Added config migration

How Has This Been Tested?

None
Breaking Changes

None
Checklist:

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added or updated relevant unit/integration/functional/e2e tests
[x] I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
[x] I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

[x] I have assigned this pull request to a milestone

Do not merge this!

@QuantumExplorer what about now?

Let's make this for 1.4 only please.

We can't really merge this into production.

https://github.com/dashpay/dash/pull/6247


Baseline csv output is using Id-Category-Key headings

(In the custom-nested-csv branch) Looks like csv generated for baseline (engagement_topics_baseline.csv) is using Id-Category-Key headings instead of key1, key2, key3

Fixed @deannomuraatdatasift


added 4 HI mesonet stations

added SKNs:
0144_Kahikikinui
0154_Waikamoi (use the same SKN as existing station WAIKAMOI HN-412)
0212_Kulaimano
0211_Kanakaleonui (not installed yet but soon)

added! need elev for 3/4


Unit test for WMS source authentication encryption/decryption

For https://github.com/Kitware/minerva/issues/142

@mbertrand Your changes LGTM.  I've imported the decryptCredentials method and then tested it directly.
I've gotten hung up on those imports before also, from girder.plugins.minerva, inside the tests.  I think the imports need to come after all of the dependent plugins have been enabled, or else they will fail because the minerva plugin can't resolve its dependencies.
Those plugins are enabled in the setupModule method of the test, so if you import in the actual test case it will work.  Sorry for the trouble there.  Can you QA my changes when you get a chance, assuming Travis passes?

@mgrauer your changes LGTM,  thanks for the tips!
On Oct 13, 2015 3:43 PM, "mgrauer"<EMAIL_ADDRESS>wrote:

@mbertrand https://github.com/mbertrand Your changes LGTM. I've
imported the decryptCredentials method and then tested it directly.
I've gotten hung up on those imports before also, from
girder.plugins.minerva, inside the tests. I think the imports need to come
after all of the dependent plugins have been enabled, or else they will
fail because the minerva plugin can't resolve its dependencies.
Those plugins are enabled in the setupModule method of the test
https://github.com/Kitware/minerva/blob/53c5fd23c35c3debb3f55be049d1862678e57bf9/plugin_tests/wms_test.py#L30-L38,
so if you import in the actual test case it will work. Sorry for the
trouble there. Can you QA my changes when you get a chance, assuming Travis
passes?
—
Reply to this email directly or view it on GitHub
https://github.com/Kitware/minerva/pull/151#issuecomment-147828492.

I'll merge this as soon as tests pass.  It fell victim to the Travis issues last week.
:roller_coaster:


cmd/go: cannot find module providing package golang.org/x/crypto/bcrypt

What version of Go are you using (go version)?
go version go1.11beta3 windows/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
windows/amd64
What did you do?
go get golang.org/x/crypto/bcrypt

What did you expect to see?
Successful information.
What did you see instead?
go get golang.org/x/crypto/bcrypt: cannot find module providing package golang.org/x/crypto/bcrypt

Unfortunately, you've run into a variant of https://github.com/golang/go/issues/26722
This will be fixed in the next beta/first release candidate.
Or else it's already fixed in tip, if you're happy to build Go from source

@myitcv Thank you very much！


arch label

@kgcarr I approved the PR, please feel free to remove the label do-not-merge/hold, when it is ready to be merged.

@kgcarr I approved the PR, please feel free to remove the label do-not-merge/hold, when it is ready to be merged.

@kgcarr I approved the PR, please feel free to remove the label do-not-merge/hold, when it is ready to be merged.

@kgcarr I approved the PR, please feel free to remove the label do-not-merge/hold, when it is ready to be merged.


Add Ponix to "Who uses Gig" list

Thanks for using gig, hopefully it worked well for you

Np! It looked like a really good framework and matched my uses completely. And turns out, I was right! Thanks for making it!


SetDefaultColumnValues does not work with special folder characters

We are currently integrating a library with more than 100 folders were each folder has another default value for a taxonomy column.
There are folders that contain special characters like: "®", "™", "＆", "ä", "ö", "ü"
Those characters are not escaped by SharePoint (like spaces with %20).
So in line 1046 of ListExtensions.cs in the method "SetDefaultColumnValuesImplementation" there seems to be the issue.
path = Uri.EscapeUriString(path);
In that way all special characters will get escaped. This leads to the issue that the "wrong" folder URL will be written into the "client_LocationBasedDefaults.html" file.

This issue was moved to OfficeDev/PnP-Sites-Core#773