Using GoogleFonts TextThemes as input in ThemeData produces wrong default text colors

Package
google_fonts
Existing issue?

[X] I checked the existing issues

What happened?
GoogleFonts TextTheme Color defined to always use M2 light mode color
GoogleFonts TextTheme have their TextStyle colors hard coded to M2 light mode colors.
When using a GoogleFonts text theme, like e.g. GoogleFonts.notoSansTextTheme() it always comes with the colors from ThemeData.light().textTheme baked in as default color.
These TextTheme colors are only appropriate in ThemeData(textTheme: ..., ...) for M2 light mode. They are wrong default colors for all other modes, like dark M2, light or dark M3 and primaryTextTheme. Thus, when used for such cases as TextTheme in ThemeData, the colors have to be overridden for every TextStyle in the TextTheme to get mode correct or even usable contrast color.
If the used TextStyle colors in all the GoogleFonts TextThemes were null, ThemeData would add M2/M3 mode and light/dark appropriate colors to the GoogleFonts TextThemes when used in a theme.
The GoogleFonts TextThemes already have NO font sizes defined, since ThemeData.light().textTheme used as default does not yet resolve sizes, they are all null and get applied later in the localization step, this fact gives us M2/M3 mode correct sizes, but not colors.
Letting Color remain null in all GoogleFonts text themes and be applied by ThemeData to appropriate colors would be similar behavior for color and make the default GoogleFonts TextTheme get correct M2 (opacity based) based contrast colors in M2 and M3 (onSurface based) colors in M3 mode as well as correct contrast colors for light/dark mode.
Even when used as primaryTextTheme, color would be resolved based on ThemeData modes, with the known issue and limitation primaryTextTheme has see Flutter issue #118146.
Build the attached sample app to see the result. Toggle the switch ON to see expected results, keep OFF to see issues as presented below.
Expected results
Expect to get M2/M3 mode and light/dark mode correct contrast color on the text when using GoogleFonts as TextTheme in ThemeData when used as textTheme and primaryTextTheme.

M3 light
M3 dark

M2 light
M2 dark

NOTE: The dark mode primaryTextTheme above have wrong contrast colors, but that is due to unrelated ThemeData issue #118146.

Actual results

M3 light
M3 dark

In M3 light mode, the textTheme colors get M2 light mode based colors with its different opacities for different styles. This is incorrect, they should all be onSurface color with no opacity.
The primaryTextTheme is also M2 light mode text theme based, not only is it incorrect, it is also incorrect contrast for the used primary color.
In M3 dark mode, the same M2 light mode colors are used, they are not usable at all as colors on a dark mode textTheme.
Ironically, in dark mode, the light M2 theme mode font colors happen to work better on primary color than what ThemeData actually makes when colors are null. As mentioned, the reason for this is issue #118146 and unrelated to this case.

M2 light
M2 dark

In M2 light mode, the colors are actually correct for textTheme.

Well for Typography2014 anyway, I don't remember if it is actually correct for M2 Typography2018 as well, or if 2018 changed any of the opacities used from 2014. I seem to recall they did not, it was just font sizes and some letter spacing. In this example that uses just vanilla ThemeData we get the very old Typography2014 that actually don't use correct M2 sizes and letter spacing, but if we were to change to Typography2018 we would get the correct M2 sizes. So that part works, but colors would remain with 2014 opacities, but as I recall, they are the same as 2018, so they are most likely correct "by accident".

In M2 dark mode, the textTheme uses the M2 light mode colors, and they are of course not legible at all. Again, in this case due mentioned unrelated issue, the dark mode primaryTextTheme is better than what ThemeData would actually make if colors were null.
Proposal
Keep color null in all returned GoogleFonts TextThemes and all their TextStyles, and let ThemeData apply appropriate default colors. Users can still apply their own colors as needed.
The change is potentially breaking, but it makes GoogleFonts default TextThemes better in all ThemeData modes in Flutter. Importantly, it also gives us correct M3 mode font colors by default when we use M3.
If the hard coded M2 light mode colors for some reason are critical in the current TextThemes returned by GoogleFonts, maybe consider adding another new TextTheme getter where all TextStyle colors are null. This, as a more suitable optional/new default TextTheme more usable and suitable for ThemeData consumption.
Currently, I'm using a version of the fix presented in the attached sample in FlexColorScheme. As seen, I found a "reasonably" safe way to check when a given passed TextTheme is using a default GoogleFonts TextTheme, and only set colors to null then. It would be nice to not need this workaround. but I can of course continue to use it. Still it might also be nice to not have all users of GoogleFonts that use vanilla ThemeData struggle with this issue.
Issue sample code
The reproduction sample code is attached below.
Sample build requirements
Add GoogleFonts to pubspec yaml.
dependencies:
  google_fonts: ^4.0.4

If using macOS add:
<key>com.apple.security.network.client</key>
<true/>

To at least the macOS debug mode entitlements file.

Code sample
// MIT License
//
// Copyright (c) 2023 Mike Rydstrom
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';

// A seed color for the M3 ColorScheme.
const Color seedColor = Color(0xFF05AAC2);
// Make M3 ColorSchemes from a seed color.
final ColorScheme schemeLight = ColorScheme.fromSeed(
  brightness: Brightness.light,
  seedColor: seedColor,
);
final ColorScheme schemeDark = ColorScheme.fromSeed(
  brightness: Brightness.dark,
  seedColor: seedColor,
);

/// If the TextTheme looks like a GoogleFonts TextTheme, return the same theme
/// with font color set to null in all its TextStyles, otherwise keep as is.
TextTheme? makeGoogleFontsTextThemeColorsNull(final TextTheme? textTheme) {
  if (textTheme != null) {
    final TextTheme googleFontsTextTheme = ThemeData.light().textTheme.apply(
      fontFamily: '',
      fontFamilyFallback: <String>[''],
    );
    final TextTheme passedTextTheme = textTheme.apply(
      fontFamily: '',
      fontFamilyFallback: <String>[''],
    );
    // We don't care which text theme it was, just that its fingerprint
    // looked like a GoogleFonts TextTheme removing the fontFamily and
    // fontFamilyFallback above allows us to match on any font.
    if (googleFontsTextTheme == passedTextTheme) {
      return TextThemeColor.nullFontColor(textTheme);
    } else {
      return textTheme;
    }
  } else {
    return textTheme;
  }
}

// Example theme
ThemeData theme(ThemeMode mode, ThemeSettings settings) {
  final ColorScheme colorScheme =
      mode == ThemeMode.light ? schemeLight : schemeDark;

  final TextTheme textTheme = GoogleFonts.notoSansTextTheme();
  final TextTheme primaryTextTheme = GoogleFonts.robotoCondensedTextTheme();
  debugPrint('GoogleFonts bodyMedium size: ${textTheme.bodyMedium?.fontSize}');
  debugPrint('GoogleFonts bodyMedium color: ${textTheme.bodyMedium?.color}');

  return ThemeData(
    colorScheme: colorScheme,
    useMaterial3: settings.useMaterial3,
    visualDensity: VisualDensity.standard,
    textTheme: settings.useCustomTheme
        ? makeGoogleFontsTextThemeColorsNull(textTheme)
        : textTheme,
    primaryTextTheme: settings.useCustomTheme
        ? makeGoogleFontsTextThemeColorsNull(primaryTextTheme)
        : primaryTextTheme,
  );
}

void main() {
  runApp(const IssueDemoApp());
}

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

  @override
  State<IssueDemoApp> createState() => _IssueDemoAppState();
}

class _IssueDemoAppState extends State<IssueDemoApp> {
  ThemeMode themeMode = ThemeMode.light;
  bool longLabel = false;
  TextDirection textDirection = TextDirection.ltr;
  ThemeSettings settings = const ThemeSettings(
    useMaterial3: true,
    useCustomTheme: false,
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      themeMode: themeMode,
      theme: theme(ThemeMode.light, settings),
      darkTheme: theme(ThemeMode.dark, settings),
      home: Directionality(
        textDirection: textDirection,
        child: Scaffold(
          appBar: AppBar(
            title: settings.useMaterial3
                ? const Text("GoogleFonts TextTheme font color (Material 3)")
                : const Text("GoogleFonts TextTheme font color (Material 2)"),
            actions: [
              IconButton(
                icon: settings.useMaterial3
                    ? const Icon(Icons.filter_3)
                    : const Icon(Icons.filter_2),
                onPressed: () {
                  setState(() {
                    settings =
                        settings.copyWith(useMaterial3: !settings.useMaterial3);
                  });
                },
                tooltip: "Switch to Material ${settings.useMaterial3 ? 2 : 3}",
              ),
              IconButton(
                icon: themeMode == ThemeMode.dark
                    ? const Icon(Icons.wb_sunny_outlined)
                    : const Icon(Icons.wb_sunny),
                onPressed: () {
                  setState(() {
                    if (themeMode == ThemeMode.light) {
                      themeMode = ThemeMode.dark;
                    } else {
                      themeMode = ThemeMode.light;
                    }
                  });
                },
                tooltip: "Toggle brightness",
              ),
            ],
          ),
          body: HomePage(
            settings: settings,
            onSettings: (ThemeSettings value) {
              setState(() {
                settings = value;
              });
            },
          ),
        ),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({
    super.key,
    required this.settings,
    required this.onSettings,
  });
  final ThemeSettings settings;
  final ValueChanged<ThemeSettings> onSettings;

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    return ListView(
      children: [
        const Padding(
          padding: EdgeInsets.all(16.0),
          child: Text(
            'GoogleFonts TextTheme have hard coded to M2 light mode colors.\n'
            '\n'
            'When using a GoogleFonts text theme, like e.g. '
            'GoogleFonts.notoSansTextTheme() it always comes with the colors '
            'from ThemeData.light().textTheme baked in as default color.\n'
            '\n'
            'These TextTheme colors are only appropriate in '
            'ThemeData(textTheme: ...) '
            'for M2 light mode. They are wrong default colors for all other'
            'modes, dark M2, light/dark M3 and primaryTextTheme. Thus when '
            'used for such cases as TextTheme in ThemeData, the colors '
            'have to be overridden for every TextStyle in the TextTheme to '
            'get mode correct or even usable contrast color.'
            '\n'
            'If the used TextStyle colors in all the GoogleFonts TextThemes '
            'were null, '
            'ThemeData would add M2/M3 mode and light/dark appropriate colors '
            'to the GoogleFonts TextThemes when used in a theme.\n'
            '\n'
            'The GoogleFonts TextThemes already have NO font sizes defined, '
            'since ThemeData.light().textTheme used as default does not '
            'yet resolve sizes, they are all null and get applied later in '
            'localization step. Letting Color be applied by ThemeData to '
            'appropriate colors would be similar behavior for color and '
            'make the default GoogleFonts TextTheme get correct M2 '
            '(opacity based)/M3 (onSurface based) colors in respective '
            'mode as well as correct contrast colors for light/dark mode.',
          ),
        ),
        SwitchListTile(
          title: const Text(
              'Set GoogleFonts TextTheme colors to NULL to fix issue'),
          value: settings.useCustomTheme,
          onChanged: (bool value) {
            onSettings(settings.copyWith(useCustomTheme: value));
          },
        ),
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: 16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              const SizedBox(height: 8),
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        child: Text('Normal TextTheme',
                            style: theme.textTheme.titleMedium),
                      ),
                      const TextThemeShowcase(),
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 8),
              Card(
                color: theme.colorScheme.primary,
                child: Padding(
                  padding: const EdgeInsets.all(16),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        child: Text('Primary TextTheme',
                            style: theme.primaryTextTheme.titleMedium),
                      ),
                      const PrimaryTextThemeShowcase(),
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 16),
              const ShowColorSchemeColors(),
            ],
          ),
        ),
      ],
    );
  }
}

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

  Future<void> _openDialog(BuildContext context) async {
    await showDialog<void>(
      context: context,
      useRootNavigator: false,
      builder: (BuildContext context) => DatePickerDialog(
        initialDate: DateTime.now(),
        firstDate: DateTime(1930),
        lastDate: DateTime(2050),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        AbsorbPointer(
          child: DatePickerDialog(
            initialDate: DateTime.now(),
            firstDate: DateTime(1930),
            lastDate: DateTime(2050),
          ),
        ),
        TextButton(
          child: const Text(
            'Show DatePickerDialog',
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
          onPressed: () async => _openDialog(context),
        ),
      ],
    );
  }
}

/// A Theme Settings class to bundle properties we want to modify on our
/// theme interactively.
@immutable
class ThemeSettings with Diagnosticable {
  final bool useMaterial3;
  final bool useCustomTheme;

  const ThemeSettings({
    required this.useMaterial3,
    required this.useCustomTheme,
  });

  /// Flutter debug properties override, includes toString.
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('useMaterial3', useMaterial3));
    properties.add(DiagnosticsProperty<bool>('useCustomTheme', useCustomTheme));
  }

  /// Copy the object with one or more provided properties changed.
  ThemeSettings copyWith({
    bool? useMaterial3,
    bool? useCustomTheme,
    bool? useIndicatorWidth,
    bool? useTileHeight,
  }) {
    return ThemeSettings(
      useMaterial3: useMaterial3 ?? this.useMaterial3,
      useCustomTheme: useCustomTheme ?? this.useCustomTheme,
    );
  }

  /// Override the equality operator.
  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;
    if (other.runtimeType != runtimeType) return false;
    return other is ThemeSettings &&
        other.useMaterial3 == useMaterial3 &&
        other.useCustomTheme == useCustomTheme;
  }

  /// Override for hashcode, dart.ui Jenkins based.
  @override
  int get hashCode => Object.hashAll(<Object?>[
        useMaterial3.hashCode,
        useCustomTheme.hashCode,
      ]);
}

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

  @override
  Widget build(BuildContext context) {
    return TextThemeColumnShowcase(textTheme: Theme.of(context).textTheme);
  }
}

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

  @override
  Widget build(BuildContext context) {
    return TextThemeColumnShowcase(
        textTheme: Theme.of(context).primaryTextTheme);
  }
}

class TextThemeColumnShowcase extends StatelessWidget {
  const TextThemeColumnShowcase({super.key, required this.textTheme});
  final TextTheme textTheme;

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Text('Font: ${textTheme.titleSmall!.fontFamily}',
            style:
                textTheme.titleMedium!.copyWith(fontWeight: FontWeight.w600)),
        Text(
          'Display Large '
          '(${textTheme.displayLarge!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.displayLarge,
        ),
        Text(
          'Display Medium '
          '(${textTheme.displayMedium!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.displayMedium,
        ),
        Text(
          'Display Small '
          '(${textTheme.displaySmall!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.displaySmall,
        ),
        const SizedBox(height: 12),
        Text(
          'Headline Large '
          '(${textTheme.headlineLarge!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.headlineLarge,
        ),
        Text(
          'Headline Medium '
          '(${textTheme.headlineMedium!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.headlineMedium,
        ),
        Text(
          'Headline Small '
          '(${textTheme.headlineSmall!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.headlineSmall,
        ),
        const SizedBox(height: 12),
        Text(
          'Title Large '
          '(${textTheme.titleLarge!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.titleLarge,
        ),
        Text(
          'Title Medium '
          '(${textTheme.titleMedium!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.titleMedium,
        ),
        Text(
          'Title Small '
          '(${textTheme.titleSmall!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.titleSmall,
        ),
        const SizedBox(height: 12),
        Text(
          'Body Large '
          '(${textTheme.bodyLarge!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.bodyLarge,
        ),
        Text(
          'Body Medium '
          '(${textTheme.bodyMedium!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.bodyMedium,
        ),
        Text(
          'Body Small '
          '(${textTheme.bodySmall!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.bodySmall,
        ),
        const SizedBox(height: 12),
        Text(
          'Label Large '
          '(${textTheme.labelLarge!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.labelLarge,
        ),
        Text(
          'Label Medium '
          '(${textTheme.labelMedium!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.labelMedium,
        ),
        Text(
          'Label Small '
          '(${textTheme.labelSmall!.fontSize!.toStringAsFixed(0)})',
          style: textTheme.labelSmall,
        ),
      ],
    );
  }
}

/// Draw a number of boxes showing the colors of key theme color properties
/// in the ColorScheme of the inherited ThemeData and its color properties.
class ShowColorSchemeColors extends StatelessWidget {
  const ShowColorSchemeColors({super.key, this.onBackgroundColor});

  /// The color of the background the color widget are being drawn on.
  ///
  /// Some of the theme colors may have semi transparent fill color. To compute
  /// a legible text color for the sum when it shown on a background color, we
  /// need to alpha merge it with background and we need the exact background
  /// color it is drawn on for that. If not passed in from parent, it is
  /// assumed to be drawn on card color, which usually is close enough.
  final Color? onBackgroundColor;

  // Return true if the color is light, meaning it needs dark text for contrast.
  static bool _isLight(final Color color) =>
      ThemeData.estimateBrightnessForColor(color) == Brightness.light;

  // On color used when a theme color property does not have a theme onColor.
  static Color _onColor(final Color color, final Color bg) =>
      _isLight(Color.alphaBlend(color, bg)) ? Colors.black : Colors.white;

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final ColorScheme colorScheme = theme.colorScheme;
    final bool useMaterial3 = theme.useMaterial3;
    const double spacing = 4;

    // Grab the card border from the theme card shape
    ShapeBorder? border = theme.cardTheme.shape;
    // If we had one, copy in a border side to it.
    if (border is RoundedRectangleBorder) {
      border = border.copyWith(
        side: BorderSide(
          color: colorScheme.outlineVariant,
          width: 1,
        ),
      );
      // If
    } else {
      // If border was null, make one matching Card default, but with border
      // side, if it was not null, we leave it as it was.
      border ??= RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(useMaterial3 ? 12 : 4)),
        side: BorderSide(
          color: colorScheme.outlineVariant,
          width: 1,
        ),
      );
    }

    // Get effective background color.
    final Color background =
        onBackgroundColor ?? theme.cardTheme.color ?? theme.cardColor;

    // Wrap this widget branch in a custom theme where card has a border outline
    // if it did not have one, but retains its ambient themed border radius.
    return Theme(
      data: Theme.of(context).copyWith(
        cardTheme: CardTheme.of(context).copyWith(
          elevation: 0,
          surfaceTintColor: Colors.transparent,
          shape: border,
        ),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.symmetric(vertical: 8),
            child: Text(
              'ColorScheme Colors',
              style: theme.textTheme.titleMedium,
            ),
          ),
          Wrap(
            alignment: WrapAlignment.start,
            crossAxisAlignment: WrapCrossAlignment.center,
            spacing: spacing,
            runSpacing: spacing,
            children: <Widget>[
              ColorCard(
                label: 'Primary',
                color: colorScheme.primary,
                textColor: colorScheme.onPrimary,
              ),
              ColorCard(
                label: 'on\nPrimary',
                color: colorScheme.onPrimary,
                textColor: colorScheme.primary,
              ),
              ColorCard(
                label: 'Primary\nContainer',
                color: colorScheme.primaryContainer,
                textColor: colorScheme.onPrimaryContainer,
              ),
              ColorCard(
                label: 'onPrimary\nContainer',
                color: colorScheme.onPrimaryContainer,
                textColor: colorScheme.primaryContainer,
              ),
              ColorCard(
                label: 'Secondary',
                color: colorScheme.secondary,
                textColor: colorScheme.onSecondary,
              ),
              ColorCard(
                label: 'on\nSecondary',
                color: colorScheme.onSecondary,
                textColor: colorScheme.secondary,
              ),
              ColorCard(
                label: 'Secondary\nContainer',
                color: colorScheme.secondaryContainer,
                textColor: colorScheme.onSecondaryContainer,
              ),
              ColorCard(
                label: 'on\nSecondary\nContainer',
                color: colorScheme.onSecondaryContainer,
                textColor: colorScheme.secondaryContainer,
              ),
              ColorCard(
                label: 'Tertiary',
                color: colorScheme.tertiary,
                textColor: colorScheme.onTertiary,
              ),
              ColorCard(
                label: 'on\nTertiary',
                color: colorScheme.onTertiary,
                textColor: colorScheme.tertiary,
              ),
              ColorCard(
                label: 'Tertiary\nContainer',
                color: colorScheme.tertiaryContainer,
                textColor: colorScheme.onTertiaryContainer,
              ),
              ColorCard(
                label: 'on\nTertiary\nContainer',
                color: colorScheme.onTertiaryContainer,
                textColor: colorScheme.tertiaryContainer,
              ),
              ColorCard(
                label: 'Error',
                color: colorScheme.error,
                textColor: colorScheme.onError,
              ),
              ColorCard(
                label: 'on\nError',
                color: colorScheme.onError,
                textColor: colorScheme.error,
              ),
              ColorCard(
                label: 'Error\nContainer',
                color: colorScheme.errorContainer,
                textColor: colorScheme.onErrorContainer,
              ),
              ColorCard(
                label: 'onError\nContainer',
                color: colorScheme.onErrorContainer,
                textColor: colorScheme.errorContainer,
              ),
              ColorCard(
                label: 'Background',
                color: colorScheme.background,
                textColor: colorScheme.onBackground,
              ),
              ColorCard(
                label: 'on\nBackground',
                color: colorScheme.onBackground,
                textColor: colorScheme.background,
              ),
              ColorCard(
                label: 'Surface',
                color: colorScheme.surface,
                textColor: colorScheme.onSurface,
              ),
              ColorCard(
                label: 'on\nSurface',
                color: colorScheme.onSurface,
                textColor: colorScheme.surface,
              ),
              ColorCard(
                label: 'Surface\nVariant',
                color: colorScheme.surfaceVariant,
                textColor: colorScheme.onSurfaceVariant,
              ),
              ColorCard(
                label: 'onSurface\nVariant',
                color: colorScheme.onSurfaceVariant,
                textColor: colorScheme.surfaceVariant,
              ),
              ColorCard(
                label: 'Outline',
                color: colorScheme.outline,
                textColor: colorScheme.background,
              ),
              ColorCard(
                label: 'Outline\nVariant',
                color: colorScheme.outlineVariant,
                textColor: colorScheme.onBackground,
              ),
              ColorCard(
                label: 'Shadow',
                color: colorScheme.shadow,
                textColor: _onColor(colorScheme.shadow, background),
              ),
              ColorCard(
                label: 'Scrim',
                color: colorScheme.scrim,
                textColor: _onColor(colorScheme.scrim, background),
              ),
              ColorCard(
                label: 'Inverse\nSurface',
                color: colorScheme.inverseSurface,
                textColor: colorScheme.onInverseSurface,
              ),
              ColorCard(
                label: 'onInverse\nSurface',
                color: colorScheme.onInverseSurface,
                textColor: colorScheme.inverseSurface,
              ),
              ColorCard(
                label: 'Inverse\nPrimary',
                color: colorScheme.inversePrimary,
                textColor: colorScheme.inverseSurface,
              ),
              ColorCard(
                label: 'Surface\nTint',
                color: colorScheme.surfaceTint,
                textColor: colorScheme.onPrimary,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

/// A [SizedBox] with a [Card] and string text in it. Used in this demo to
/// display theme color boxes.
///
/// Can specify label text color and background color.
class ColorCard extends StatelessWidget {
  const ColorCard({
    super.key,
    required this.label,
    required this.color,
    required this.textColor,
    this.size,
  });

  final String label;
  final Color color;
  final Color textColor;
  final Size? size;

  @override
  Widget build(BuildContext context) {
    const double fontSize = 11;
    const Size effectiveSize = Size(86, 58);

    return SizedBox(
      width: effectiveSize.width,
      height: effectiveSize.height,
      child: Card(
        margin: EdgeInsets.zero,
        clipBehavior: Clip.antiAlias,
        color: color,
        child: Center(
          child: Text(
            label,
            style: TextStyle(color: textColor, fontSize: fontSize),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
  }
}

/// A utility class to set the color of the font color to null in all
/// [TextStyle]s in a [TextTheme].
class TextThemeColor {
  /// Set font color to null in all styles in passed in [TextTheme] and
  /// return the new [TextTheme] other properties remain unchanged.
  static TextTheme nullFontColor(TextTheme textTheme) {
    /// Set font color to null in all styles in passed in [TextTheme] and
    return TextTheme(
      displayLarge: nullColor(textTheme.displayLarge!),
      displayMedium: nullColor(textTheme.displayMedium!),
      displaySmall: nullColor(textTheme.displaySmall!),
      //
      headlineLarge: nullColor(textTheme.headlineLarge!),
      headlineMedium: nullColor(textTheme.headlineMedium!),
      headlineSmall: nullColor(textTheme.headlineSmall!),
      //
      titleLarge: nullColor(textTheme.titleLarge!),
      titleMedium: nullColor(textTheme.titleMedium!),
      titleSmall: nullColor(textTheme.titleSmall!),
      //
      bodyLarge: nullColor(textTheme.bodyLarge!),
      bodyMedium: nullColor(textTheme.bodyMedium!),
      bodySmall: nullColor(textTheme.bodySmall!),
      //
      labelLarge: nullColor(textTheme.labelLarge!),
      labelMedium: nullColor(textTheme.labelMedium!),
      labelSmall: nullColor(textTheme.labelSmall!),
    );
  }

  /// Set font color to null in all styles in passed in [TextStyle] and
  /// return the new [TextStyle] other properties remain unchanged.
  static TextStyle nullColor(TextStyle style) {
    return TextStyle(
      color: null, // Set color to NULL, let ThemeData handle default.
      backgroundColor: style.backgroundColor,
      fontSize: style.fontSize,
      fontWeight: style.fontWeight,
      fontStyle: style.fontStyle,
      letterSpacing: style.letterSpacing,
      wordSpacing: style.wordSpacing,
      textBaseline: style.textBaseline,
      height: style.height,
      leadingDistribution: style.leadingDistribution,
      locale: style.locale,
      foreground: style.foreground,
      background: style.background,
      shadows: style.shadows,
      fontFeatures: style.fontFeatures,
      fontVariations: style.fontVariations,
      decoration: style.decoration,
      decorationColor: style.decorationColor,
      decorationStyle: style.decorationStyle,
      decorationThickness: style.decorationThickness,
      debugLabel: style.debugLabel,
      fontFamily: style.fontFamily,
      fontFamilyFallback: style.fontFamilyFallback,
      overflow: style.overflow,
    );
  }
}

Used versions

Flutter Channel stable, 3.10.0
GoogleFonts 4.0.4

Relevant log output

Flutter doctor
flutter doctor -v
[v] Flutter (Channel stable, 3.10.0, on macOS 13.2.1 22D68 darwin-arm64, locale en-US)
    • Flutter version 3.10.0 on channel stable at /Users/rydmike/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 84a1e904f4 (6 days ago), 2023-05-09 07:41:44 -0700
    • Engine revision d44b5a94c9
    • Dart version 3.0.0
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/rydmike/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] IntelliJ IDEA Community Edition (version 2023.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 73.0.4
    • Dart plugin version 231.8109.91

[✓] VS Code (version 1.77.3)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.62.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 113.0.5672.92

[✓] Network resources
    • All expected network resources are available.

PTAL @rodydavis

Yep I have seen this. Will look into it.
Usually you will want to call apply to the text theme to override the color to on surface with the correct brightness

Yes you can do apply with onSurface and onPrimary for primaryTextTheme, but if you use M2 you would have to do a copyWith black/white with the correct opacities per TextStyle as well. Very tedious.
Generally it feels surprising and a bit poor dev experience that when you give a TextTheme from GoogleFonts as input to ThemeData textTheme and primaryTextTheme, that the only case when it is correct is if you happen make and want a black Typography2014 text theme. For everything else it is just wrong.
Definitely confusing for many users and they probably don't even know what the correct contrast colors should be in what mode M2/M3 light/dark.
In the sample I made, I included a utility class that sets color to null in all styles (apply can't do that). Just used this to test that if I override an incoming text theme, when it has the fingerprint of a GoogleFonts default TextTheme for colors in it, to have all null colors, than then we can handover the setting of the default colors to ThemeData and get correct M2/M3 light/dark colors assigned by the factory.
Changing current GoogleFonts text theme method to deliver such TextThemes is potentially breaking, not sure how bad and if it would matter to most use cases, but it might.
Thus an alternative solution would be to add a new TextTheme method where color is null in all style (like font sizes actually also are now), and document that using it is recommended when applying a GoogleFonts text theme directly to ThemeData textTheme and primaryTextTheme properties.
Just a thought. 😀

As a Flutter begginer, I stumbled on this on day 2.

I am having a similar issue, When using custom GoogleFonts throughout the app in dark mode the text color is black instead of white.
Wonder if I am missing anything, this is how I am applying the fonts throughout the app
return MaterialApp(
   ...
 darkTheme: ThemeData.dark(
                  useMaterial3: true,
                ).copyWith(
                    textTheme: GoogleFonts.quicksandTextTheme(), // text is black in darkmode
                    brightness: Brightness.dark),
                ),
 theme: ThemeData(
                    textTheme: GoogleFonts.quicksandTextTheme(), // this works fine in light mode
              )),
    ...
)

Hi @maheshmnj, what your are doing with the copyWith with does nothing to fix the dumb pre-assigned black text color in any all GoogleFonts.nnnTextTheme()s.
Since you are using Material3, the light textTheme color is in fact also wrong, its should be M3 colorScheme.onSurface colored, but it is not, it is full black.
My reproduction code sample contains a work-around you can use to fix this issue. You can use this helper, that the reproduction sample includes and uses to correct the colors for the expected results:
/// A utility class to set the color of the font color to null in all
/// [TextStyle]s in a [TextTheme].
class TextThemeColor {
  /// Set font color to null in all styles in passed in [TextTheme] and
  /// return the new [TextTheme] other properties remain unchanged.
  static TextTheme nullFontColor(TextTheme textTheme) {
    /// Set font color to null in all styles in passed in [TextTheme] and
    return TextTheme(
      displayLarge: nullColor(textTheme.displayLarge!),
      displayMedium: nullColor(textTheme.displayMedium!),
      displaySmall: nullColor(textTheme.displaySmall!),
      //
      headlineLarge: nullColor(textTheme.headlineLarge!),
      headlineMedium: nullColor(textTheme.headlineMedium!),
      headlineSmall: nullColor(textTheme.headlineSmall!),
      //
      titleLarge: nullColor(textTheme.titleLarge!),
      titleMedium: nullColor(textTheme.titleMedium!),
      titleSmall: nullColor(textTheme.titleSmall!),
      //
      bodyLarge: nullColor(textTheme.bodyLarge!),
      bodyMedium: nullColor(textTheme.bodyMedium!),
      bodySmall: nullColor(textTheme.bodySmall!),
      //
      labelLarge: nullColor(textTheme.labelLarge!),
      labelMedium: nullColor(textTheme.labelMedium!),
      labelSmall: nullColor(textTheme.labelSmall!),
    );
  }

  /// Set font color to null in all styles in passed in [TextStyle] and
  /// return the new [TextStyle] other properties remain unchanged.
  static TextStyle nullColor(TextStyle style) {
    return TextStyle(
      color: null, // Set color to NULL, let ThemeData handle default.
      backgroundColor: style.backgroundColor,
      fontSize: style.fontSize,
      fontWeight: style.fontWeight,
      fontStyle: style.fontStyle,
      letterSpacing: style.letterSpacing,
      wordSpacing: style.wordSpacing,
      textBaseline: style.textBaseline,
      height: style.height,
      leadingDistribution: style.leadingDistribution,
      locale: style.locale,
      foreground: style.foreground,
      background: style.background,
      shadows: style.shadows,
      fontFeatures: style.fontFeatures,
      fontVariations: style.fontVariations,
      decoration: style.decoration,
      decorationColor: style.decorationColor,
      decorationStyle: style.decorationStyle,
      decorationThickness: style.decorationThickness,
      debugLabel: style.debugLabel,
      fontFamily: style.fontFamily,
      fontFamilyFallback: style.fontFamilyFallback,
      overflow: style.overflow,
    );
  }
}

and then using your example theme and GoogleFonts.quicksandTextTheme() text theme.
return MaterialApp(
  ...
  theme: ThemeData(
    brightness: Brightness.light,
    colorScheme: ...,
    useMaterial3: true,
    textTheme: TextThemeColor.nullFontColor(GoogleFonts.quicksandTextTheme()),
    primaryTextTheme: TextThemeColor.nullFontColor(GoogleFonts.quicksandTextTheme()),
  ),
  darkTheme: ThemeData(
    brightness: Brightness.dark,
    colorScheme: ...,
    useMaterial3: true,
    textTheme: TextThemeColor.nullFontColor(GoogleFonts.quicksandTextTheme()),
    primaryTextTheme: TextThemeColor.nullFontColor(GoogleFonts.quicksandTextTheme()),
  ),
  ...
)

This will give you correct default contrast colors for both textTheme and primaryTextTheme, in light and dark mode, that is also M3 correct. If you change to useMaterial3: false it also gives correct M2 contrast colors, that are actually different from M3.
It all works by setting the hard coded black text color in the GoogleFonts.textTheme back to null for all its TextStyles and letting the ThemeData factory apply the appropriate contrasts.
The primaryTextTheme in dark made is still wonky and imo gets wrong contrast, but that is a Flutter legacy issue, see: https://github.com/flutter/flutter/issues/118146
If you are interested in more details about this you can read this answer: https://github.com/rydmike/flex_color_scheme/discussions/160#discussioncomment-5999257

Thanks for the detailed insights @rydmike


Rename Master to Main

Due to https://lists.hyperledger.org/g/labs/message/145

Our CI workflow still references master, reopening.
Can we then also delete master?

Done in #164


Fix warnings of multipart implementation

However this commit is based on the current state of master, it does not rely on #187.
I can rebase this if #187 will be merged earlier.

Looks like Clang is complaining about this:
non-constant-expression cannot be narrowed from type 'typename iterator_traits<unsigned char *>::difference_type' (aka 'long') to 'size_t' (aka 'unsigned long') in initializer list [-Wc++11-narrowing]

Same with the appveyor build:
warning C4244: 'return': conversion from '__int64' to 'long', possible loss of data

I'll check it too, thanks.


Unable to verify code signature when installing app to iOS from XCode

I'm developing an iOS app with:

MacOS 14.3.1 (M1 Pro)
XCode 15.3 (15E204a)
iOS 17.4.1 on an iPhone 12
SwiftProtobuf 1.25.2 and 1.26.0 both tested (via Swift Package)

When I try to run it on my phone, straight from XCode, I get this error (reported by XCode):
Unable to Install “Group”
Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.yP1jk8/extracted/GCiosApp.app/Frameworks/SwiftProtobuf.framework : 0xe8008001 (An unknown error has occurred.)
I've Googled for similar errors and tried just about every "solution" from Apple Develor Forum and SO. None of them work. I can install the app via TestFlight, but that doesn't fix the problem whether I uninstall the TestFlight version first or not.
It was working as recently as 24 March and I'm not sure what has changed since then, except for an iOS update which was definitely today. I also performed a git bisect which might have confused XCode? I only tested the checkouts on a simulator instance though. The current version also installs on the simulator OK, just not on my phone.
I noticed my error message is missing the bogus advice to check the phone's App Developer certificates. My error message has additional details (see below) and seems to be singling out SwiftProtobuf instead of the whole app for some reason.
Details:
Unable to Install “Group”
Domain: IXUserPresentableErrorDomain
Code: 14
Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.yP1jk8/extracted/GCiosApp.app/Frameworks/SwiftProtobuf.framework : 0xe8008001 (An unknown error has occurred.)
User Info: {
DVTErrorCreationDateKey = "2024-04-01 18:39:27 +0000";
IDERunOperationFailingWorker = IDEInstallCoreDeviceWorker;
}
Unable to Install “Group”
Domain: IXUserPresentableErrorDomain
Code: 14
Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.yP1jk8/extracted/GCiosApp.app/Frameworks/SwiftProtobuf.framework : 0xe8008001 (An unknown error has occurred.)
User Info: {
IDERunOperationFailingWorker = IDEInstallCoreDeviceWorker;
}
Failed to install the app on the device.
Domain: com.apple.dt.CoreDeviceError
Code: 3002
User Info: {
NSURL = "file:///Users/tony/Library/Developer/Xcode/DerivedData/GCiosApp-caesltabwlltiwgdsytbghwsxekm/Build/Products/Debug-iphoneos/GCiosApp.app/";
}
Unable to Install “Group”
Domain: IXUserPresentableErrorDomain
Code: 14
Failure Reason: This app cannot be installed because its integrity could not be verified.
Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.yP1jk8/extracted/GCiosApp.app/Frameworks/SwiftProtobuf.framework : 0xe8008001 (An unknown error has occurred.)
Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.yP1jk8/extracted/GCiosApp.app/Frameworks/SwiftProtobuf.framework : 0xe8008001 (An unknown error has occurred.)
Domain: MIInstallerErrorDomain
Code: 13
User Info: {
FunctionName = "+[MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:]";
LegacyErrorString = ApplicationVerificationFailed;
LibMISErrorNumber = "-402620415";
SourceFileLine = 79;
}
Event Metadata: com.apple.dt.IDERunOperationWorkerFinished : {
"device_isCoreDevice" = 1;
"device_model" = "iPhone13,2";
"device_osBuild" = "17.4.1 (21E236)";
"device_platform" = "com.apple.platform.iphoneos";
"dvt_coredevice_version" = "355.24";
"dvt_mobiledevice_version" = "1643.100.58";
"launchSession_schemeCommand" = Run;
"launchSession_state" = 1;
"launchSession_targetArch" = arm64;
"operation_duration_ms" = 1877;
"operation_errorCode" = 14;
"operation_errorDomain" = IXUserPresentableErrorDomain;
"operation_errorWorker" = IDEInstallCoreDeviceWorker;
"operation_name" = IDERunOperationWorkerGroup;
"param_debugger_attachToExtensions" = 0;
"param_debugger_attachToXPC" = 1;
"param_debugger_type" = 3;
"param_destination_isProxy" = 0;
"param_destination_platform" = "com.apple.platform.iphoneos";
"param_diag_MainThreadChecker_stopOnIssue" = 0;
"param_diag_MallocStackLogging_enableDuringAttach" = 0;
"param_diag_MallocStackLogging_enableForXPC" = 1;
"param_diag_allowLocationSimulation" = 1;
"param_diag_checker_tpc_enable" = 1;
"param_diag_gpu_frameCapture_enable" = 0;
"param_diag_gpu_shaderValidation_enable" = 0;
"param_diag_gpu_validation_enable" = 0;
"param_diag_memoryGraphOnResourceException" = 0;
"param_diag_queueDebugging_enable" = 1;
"param_diag_runtimeProfile_generate" = 0;
"param_diag_sanitizer_asan_enable" = 0;
"param_diag_sanitizer_tsan_enable" = 0;
"param_diag_sanitizer_tsan_stopOnIssue" = 0;
"param_diag_sanitizer_ubsan_stopOnIssue" = 0;
"param_diag_showNonLocalizedStrings" = 0;
"param_diag_viewDebugging_enabled" = 1;
"param_diag_viewDebugging_insertDylibOnLaunch" = 1;
"param_install_style" = 2;
"param_launcher_UID" = 2;
"param_launcher_allowDeviceSensorReplayData" = 0;
"param_launcher_kind" = 0;
"param_launcher_style" = 99;
"param_launcher_substyle" = 8192;
"param_runnable_appExtensionHostRunMode" = 0;
"param_runnable_productType" = "com.apple.product-type.application";
"param_structuredConsoleMode" = 1;
"param_testing_launchedForTesting" = 0;
"param_testing_suppressSimulatorApp" = 0;
"param_testing_usingCLI" = 0;
"sdk_canonicalName" = "iphoneos17.4";
"sdk_osVersion" = "17.4";
"sdk_variant" = iphoneos;
}
System Information
macOS Version 14.3.1 (Build 23D60)
Xcode 15.3 (22618) (Build 15E204a)
Timestamp: 2024-04-01T19:39:27+01:00

When you say things were working on March 24th, is that also with the 1.25.2 release? Assuming it was, then this is going to be specific to your project setup. If you weren't on 1.25.2 at that point, what release were you on? I can't think of what this project could have changed that would cause any packaging issues, but if we know your old version we can double check the delta to make sure there wasn't something we didn't realize.

Yes, I've gone back to that commit and it was using SwiftProtobuf 1.25.2. Now that version won't install either. The name of the temporary directory has changed slightly. There is no /var/installd on my Mac, but I suspect the problem is more likely to be caused by XCode than my phone and SwiftProtobuf has been chosen at random to be the fall guy. I have not only cleaned the build folder, but also rm -rf /Library/Developer/Xcode/DerivedData/<my_app>. Is there anything else I can delete to completely eradicate the mess XCode has made of itself and do a clean install?

That's more an Xcode support question than specific to this package, so you'll probably get more suggestions from the developer forums.

OK, thanks.


[ENH] Testing for erroneous use of reserved attributes

All base classes have some reserved attributes, see PR #2769, and we have already run into the problem twice, of concrete estimators using attributes that have the same name as reserved attributes.
We should test for this, but ... how?
Any good ideas, @miraep8? Given that you are the other person who ran into this...

I can implement this!
Here is an idea - we have a class attribute which is a set of protected names in BaseEstimator.  Other classes (ie BaseForecaster and BaseTransformer inherit from BaseEstimator and can add more protected names to.
this set of names.
Then we add a test for every concrete implementation of an estimator we make sure none of its class specific attributes are in the set of banned names? (ie we could exclude any Base classes (or HeterogenousMetaEstimator) from the tests). The thought here is that these protected attributes should only be added in abstract classes.
We can get the set of child-specific names for testing by subtracting the set of parent attributes from the set of child-attributes?
Just an idea, lmk what you think and I take take a stab at implementing it.

Hm, that would take care of these not being in the constructor.
It would not cover the "accident" cases, or would it? Where a non-hyper-parameter attribute is being written to in one of the methods. How would we detect this?

ie we could exclude any Base classes (or HeterogenousMetaEstimator) from the tests

They are already excluded, since the collections is done via all_estimators, which excludes base classes and abstract mixins.

@ltsaprounis, can your mock estimator perhaps notice which attributes are being written to?

Alternative/potentially hacky solution......
In Base Classes/Heterogenous Meta Estimator we could overwrite the setattr() call.
In it we could see where setattr() is being called from by doing the following:
sys._getframe().f_back.f_code.co_name

And put is some checks that calls to setattr for protected attributes can only be made by functions that exist on the level of the abstract class (ie generate an error if a child class tries to setattr for any attributes in our protected list?)

(and to be fair, I thought we were trying to cover cases where it is in the constructor? that at least seemed to be the error case that we were running into)

I thought we were trying to cover cases where it is in the constructor? that at least seemed to be the error case that we were running into

In the error case, it was set by the constructor, but not an arg to the constructor. Would that not be missed by your first proposed solution?

Hmm, yes, revisiting my solution I do think it wouldn't work!


Update version: Microsoft.PowerShell version <IP_ADDRESS>

Pull request has been created with WinGet Automation :rocket:
Microsoft Reviewers: Open in CodeFlow

[Policy] Needs-Attention

@mdanish-kh thanks for bringing this to my attention. The PowerShell team already merged in a PR for this version and we'd like to keep those changes.
In the near future we plan to have automation for this so you can remove it from your automation @vedantmgoyal2009 if you don't mind, thanks!

Close with reason: See above;


Can I slide to a specific slide on click from a certain slide

I have the slider used as an on-boarding feature and users may slide from one slide to another one, skipping certain ones. is that possible?

What do you mean skipping? You can use $('selector').slick('slickGoTo', 3, true) to navigate to a slide without animating its path.

or you could $('selector').slick('slickRemove', 2 ); to remove a slide if you're setting a specific flow for specific user based on specific options/selection during the on-boarding :)

Well for example there are 6 slides, and on the third one, a user can either go to the forth, or skip it and go to the 6th. will $('selector').slick('slickGoTo', 3, true) work, with 3 being the number of the slide? does it count from 0 or 1?

The best part of web development is figuring things out yourself :D, but i
the spirit of open source: the index starts at 0, so 6th slide equals index
5 .. But you'll need a custom link to trigger... Else you can use
onAfterChange event to remove slide 4 and 5 with slickRemove
Simon.
On 6 Feb 2015 10:17, "Sergiy Dybskiy"<EMAIL_ADDRESS>wrote:

Well for example there are 6 slides, and on the third one, a user can
either go to the forth, or skip it and go to the 6th. will $('selector').slick('slickGoTo',
3, true) work, with 3 being the number of the slide? does it count from 0
or 1?
—
Reply to this email directly or view it on GitHub
https://github.com/kenwheeler/slick/issues/1002#issuecomment-73171379.


Bug: Profile description and Achievements are intertwined

Profile description and Achievements are intertwined
There should be a distance between the expected behavior profile description and Achievements

[fixed]


Added double click support

I wanted to be able to use a double click function on hotspots to be able to have an exit hotspot instantly change rooms instead of having to wait for the character to walk there.
Added _on_double_click() to work the same as _on_click() and _on_right_click functions do.

After making a couple of tests I'm gonna say I don't like the delay after clicking on things. I would like to see if we can reduce it to 0.1 or even lower. Additionally, with this approach, skipping the animation of the dialogue lines for characters when clicking anywhere on the screen stopped working. That causes the character to move while saying a dialogue line (and I don't like the idea of forcing players to use cutscenes).
Taking these changes as a starting point, I'd like to experiment a bit tomorrow to see if I can reach a solution. If I find that it's going to require many changes, I think the most appropriate course of action will be to remove the wait (and all the awaits related with the click/tap), merge the PR, and then spend more time solving the problem. Something tells me that the root cause lies in a recent change I made in how clicks are detected in PopochiuClickables.

When I was looking at default millisecond delay and found that Windows was 500 milliseconds and tested that it was painful, that's why I lowered it. I tested what you said about making it 0.1 and found that I sometimes had a single click and double click event come through.
When I tested 0.2 as a value, I did not get any extra unwanted click events and did not notice any delay in movement.
Another thing to think about is we are going to need a click and hold event to have the verb coin interface where you click and hold on a hotspot then a verb coin pops up with the different interaction types.
People making touch screen games may also what a two finger tap and hold to show all the game hotspots. I have also seen single tap and hold on the player character show all the hotspots.
Other events people may want is to have wheel mouse up and down to show or hide the inventory bar.
This is all stuff that visionaire studio can do so is probably something to add at some point.
I have not used popochiu enough to know how the dialog text worked prior to me making changes for the double click. I am pretty sure other engines disable mouse clicking when dialog is playing unless they use a say_background() or something which allows normal gameplay to continue while text is being displayed. This allows a character locked in a jail cell to say something random like "please get me out of here", or a loudspeaker announcing things but does not stop the player from moving.

I tested the update, and 0.2 seconds feel better. We can keep that delay by now while we check if there is a way to avoid it.
We don't disable the mouse while the dialog lines are showing, the GUI just captures the click and stops its propagation. But with the delay that stopped working.
We'll have a say_background() in future versions because other devs have been asking for it. Meanwhile, and before merging your PR, I want to address the issue with the dialog lines. Perhaps after releasing version 2, we can add a configuration option where you can specify whether dialogue lines should or should not block the character's movement, but for now, I would like it to remain as it has worked so far. Here's an example of the desired behavior:
https://github.com/carenalgas/popochiu/assets/4536477/6f52ec0c-51f7-4978-8049-3188b1c84c05
Another issue I found is that, if you move the cursor after clicking anywhere in the room, the target direction changes if one moves the cursor before the character starts walking:
https://github.com/carenalgas/popochiu/assets/4536477/541cf323-20e4-40be-ba78-db94b8f80fe0


npm run dev-server causes an error

Hey there!
So I have encountered an error when running npm run dev-server. I have made the env file and put my config there to the correct values but for some reason it gives me this error message:
"FirebaseError: projectId must be a string in FirebaseApp.options"
If you know how to fix this issue that will be great.
Thanks,
Khizer

@khizerdev check for typo FIREBASE_PROJECT_ID  . An incorrect projectId wouldn't throw that error. Could be  projectId: undefined  has been set so make sure the env variable FIREBASE_PROJECT_ID exists or no typo included,

@khizerdev check for typo FIREBASE_PROJECT_ID  . An incorrect projectId wouldn't throw that error. Could be  projectId: undefined  has been set so make sure the env variable FIREBASE_PROJECT_ID exists or no typo included,

I fix that typo in env variable file but still it says "FirebaseError: projectId must be a string in FirebaseApp.options"

I fix that typo in env variable file but still it says "FirebaseError: projectId must be a string in FirebaseApp.options"

@khizerdev  Could you try copy -pasting the actual projectId property in firebase.js just to check if the env variable is actually not being used? Also, could you try to console.log the value of process.env.FIREBASE_PROJECT_ID if it returns undefined.

@khizerdev  Could you try copy -pasting the actual projectId property in firebase.js just to check if the env variable is actually not being used? Also, could you try to console.log the value of process.env.FIREBASE_PROJECT_ID if it returns undefined.

Yes it is returning undefined .

Yes it is returning undefined .

@khizerdev If you named your env file other than .env.dev or .env.prod as I instructed in Readme file, you must configure the Dotenv in webpack/dev.config.js or webpack/prod.config.js to point to your self-named env file.  Maybe that's why causing your problem.

@khizerdev If you named your env file other than .env.dev or .env.prod as I instructed in Readme file, you must configure the Dotenv in webpack/dev.config.js or webpack/prod.config.js to point to your self-named env file.  Maybe that's why causing your problem.


Upgrade UUID lib

uuid.NewV4() now returns a uuid and an error. I have used uuid.Must() where appropriate which recreates the panics as normal.

cc @alexandrinaw @workmajj @pratikprasad please got get -u -t ./... when you git pull next!


Build failes with Capacitor v3.5.1

The npx cap sync command failes after upgrading to capacitor v3.5.1:
✖ Updating iOS native dependencies with pod install - failed!
✖ update ios - failed!
[error] Analyzing dependencies
        [!] CocoaPods could not find compatible versions for pod "Capacitor":
        In Podfile:
        Capacitor (from `../../node_modules/@capacitor/ios`)

        CapacitorCommunityIntercom (from `../../node_modules/@capacitor-community/intercom`) was resolved to 3.0.2,
        which depends on
        Capacitor (~> 3.4.3)

Is there a reason why there is a hard dependency to v3.4.3?

hey @maxnowack thanks for the heads up.
I've unlocked the capacitor version, please have a try on 3.0.3

It's working. Thanks! 🙂


Redirect logging output into gradle build

The logging output should be printed during build.

As it seems, the slf4j SimpleLogger can be used.
More: http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html

Works as expected, for detailed logging output specify -i or --info option when executing a task.


how to update kubernetes?

Hi
I am a little confused
if the CLI "kismatic upgrade" can replace kubernetes v1.6.0 to v1.6.2?  Or this command is used for completely other things?
Because I often have the problem of "etcdserver: request timed out" in kubernetes, and I am thinking maybe it is fixed in the new version?

Hi @akdj to upgrade you need to:

Download the new release and untar it
Copy your kismatic-cluster.yaml and the generated folders into the new release
Run kismatic upgrade offline

I believe the etcdserver: request timed out comes from a lack of resources on your nodes, try bumping up the memory and CPU on the nodes to see if that helps.

Minimum hardware requirements for etcd in the PLAN.md file looks very low for a production or long running cluster.

Hi @dkoshkin @TimWoolford
I am using 2 kvm as nodes, with 7.8GiB memory, 2 sockets each 2 cores, (so 4 cores) which type is kvm64.
In fact these 2 kvm machines are both masters, workers and etcd nodes, because I cannot have more than two nodes for the moment

Hi regain
@dkoshkin
I just run the command "kismatic upgrade offline" and I have ERRORs with the one nodes
Computing upgrade plan==========================================================                                                                                ====
Reading plan file                                                                                [OK]
Validate SSH connectivity to nodes                                                                                [OK]

Preflight Checks: master.domain.com [master etcd worker ingress]===============                                                                                ====
Configure Kismatic Package Repos
Configure Kismatic Package Repos
Configure Kismatic Package Repos
Configure Kismatic Package Repos                                                [OK]
Run Upgrade Pre-Flight Checks                                                   [OK]

Preflight Checks: worker.domain.com [master etcd worker ingress]===================
Configure Kismatic Package Repos
Configure Kismatic Package Repos                                                [OK]
Run Upgrade Pre-Flight Checks                                                   [OK]

Upgrade Node: [master.domain.com] [master etcd worker ingress]=====================
Remove Old Kismatic Packages                                                    [OK]
Configure Kismatic Package Repos                                                [OK]
Upgrade Docker                                                                  [OK]
Upgrade Kubernetes Etcd Cluster                                                 [OK]
Upgrade Network Etcd Cluster                                                    [OK]
Generate Kubectl Config File                                                    [OK]
Upgrade Kubernetes Kubelet                                                      [OK]
Upgrade Kubernetes API Server                                                   [OK]
Upgrade Kubernetes Scheduler                                                    [OK]
Upgrade Kubernetes Controller Manager                                           [OK]
Validate Kubernetes Control Plane is Running                                    [OK]
Upgrade Kubernetes Proxy                                                        [OK]
Upgrade Cluster Network                                                         [OK]
Validate Cluster Network                                                        [OK]
Update Kismatic Version File                                                    [OK]

Upgrade Node: [worker.domain.com] [master etcd worker ingress]=====================
Remove Old Kismatic Packages                                                    [OK]
Configure Kismatic Package Repos                                                [OK]
Upgrade Docker                                                                  [OK]
Upgrade Kubernetes Etcd Cluster                                                 [ERROR]
- Task: verify etcd_k8s cluster health
  fabric13.otrux.com:                                                           [ERROR]
---- STDOUT ----
member 3244947d1184289a is unhealthy: got unhealthy result from https://worker.domain.com:2379
member 43faddc854ee8749 is unhealthy: got unhealthy result from https://master.domain.com:2379
cluster is unhealthy
---- STDERR ----
2017-04-27 16:30:15.866684 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
2017-04-27 16:30:15.867677 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
---------------
Failed to upgrade nodes: error upgrading node "worker.domain.com": error running playbook: error running ansible: exit status 2

Can I use --skip-preflight for upgrade too?

You can but before you do that can you get the logs for it with journalctl -u etcd_k8s to figure out why its failing.

 I already did... but I think it is fixed itself because, for this time, it display [ok] for this step

Thank you very much !  Upgrade is completed :)
Computing upgrade plan==============================================================
Reading plan file                                                               [OK]
Validate SSH connectivity to nodes                                              [OK]

Skipping nodes======================================================================
- "master.domain.com" is at the target version "1.3.2"                         [OK]

Upgrade Node: [worker.domain.com] [master etcd worker ingress]=====================
Remove Old Kismatic Packages                                                    [OK]
Configure Kismatic Package Repos                                                [OK]
Upgrade Docker                                                                  [OK]
Upgrade Kubernetes Etcd Cluster                                                 [OK]
Upgrade Network Etcd Cluster                                                    [OK]
Generate Kubectl Config File                                                    [OK]
Upgrade Kubernetes Kubelet                                                      [OK]
Upgrade Kubernetes API Server                                                   [OK]
Upgrade Kubernetes Scheduler                                                    [OK]
Upgrade Kubernetes Controller Manager                                           [OK]
Validate Kubernetes Control Plane is Running                                    [OK]
Upgrade Kubernetes Proxy                                                        [OK]
Upgrade Cluster Network                                                         [OK]
Validate Cluster Network                                                        [OK]
Update Kismatic Version File                                                    [OK]

Upgrade: Cluster Services===========================================================
Upgrade Kubernetes DNS                                                          [OK]
Upgrade Kubernetes Ingress                                                      [OK]
Upgrade Kubernetes Dashboard                                                    [OK]

Running Smoke Test==================================================================
Smoke Test Master Node                                                          [OK]
Smoke Test Master Node                                                          [OK]

Upgrade complete

and for kimastic diagnose :
Reading plan file                                                               [OK]
Validate SSH connectivity to nodes                                              [OK]
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes
Diagnose Nodes                                                                  [OK]


Indexing is slowing down by a factor of 10x after the first few runs

This issue is for a: (mark with an x)
- [X] documentation issue or request

Minimal steps to reproduce
Create this project with a large document database of a mix of Office files (docx, xlsx, pptx). Our blob storage contains 7500 documents and is 25 GB. Upload files directly to the blob container without the script. Then run the prepdocs.ps1 script to start indexing and create a schedule to restart indexing after the 120 min timeout.
Any log messages given by the failure
Here you can see that indexing started with a bang with about a 1000 docs for the first two 2h runs. Then it gradually slowed-down to less than 100 docs per run. Any idea why?

Expected/desired behavior
Constant indexing speed.
OS and Version?
Windows 11
azd version?
azd version 1.6.1 (commit eba2c978b5443fdb002c95add4011d9e63c2e76f)

Hm, I assume you've read through https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity#indexer-limits since you mention doing 120minute runs. Do you have any pause between the 120minute runs?

This is with integrated vectorization, I assume? The prepdocs sets up the indexer with certain properties, but it doesn't setup a schedule. Perhaps a pause of 10 minutes is not sufficient. @srbalakr Can you advise?

With integrated vectorization, correct. So the manual schedule settings are likely different than the settings that are used with prepdocs ? Perhaps it's safer for now to set a manual process on my PC to call prepdocs repeatedly, every 150 min or so?
Would it be simpler to add an optional feature to prepdocs to enable the scheduler? I might look into that.

So I tried to create a new index from scratch to avoid the potential issues with the portal config for the scheduler. I decided to instead, create a powershell script to call prepdocs.ps1 every 150 minutes. This time I also increased the limit of the embedding model to 240K TPM. The first indexing indeed went much faster, processing 3700 documents in 2 hours. But all the subsequent indexing failed. There is no error in the command line from the script execution but some errors in the portal. I'm attaching a few screenshots. Any idea what is going on?

First failed run (the other ones have the same messages)

I have neither the error nor the warning in the first successful run.


No Recurring Support

Hello,
When do you plan on adding functionality to support recurring events?

Hiho, it had not come up yet. Would you be interested in contributing the functionality?

@hoodie Yeah, I'll PR it when I have time. I did wind up writing what I wanted to in Go but I'd love to add this to Rust. Haven't found a library yet in Rust that does that.

Hi, I was searching about it and found this library: rrule.
Maybe it can be an ispiration, or it can be used directly.


Travis CI: logging.error syntax

Travis CI errored on Python 3.5
logging.error(f'Error: {e}\\') causing syntax error

F-strings are not supported in 3.5. Jeff approved of not testing on python 3.5.
Remove 3.5 from Travis CI


Cannot use ctrl+c to terminate execution in command prompt for many process

Issue Type: Bug
I cannot use ctrl+c to terminate execution in many process, and ctrl+break fails, too.
VS Code version: Code 1.40.2 (f359dd69833dd8800b54d458f6d37ab7c78df520, 2019-11-25T14:54:45.096Z)
OS version: Windows_NT x64 10.0.18362

System Info

Item
Value

CPUs
Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz (6 x 2904)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onoop_rasterization: disabled_offprotected_video_decode: enabledrasterization: enabledskia_renderer: disabled_offsurface_control: disabled_offsurface_synchronization: enabled_onvideo_decode: enabledviz_display_compositor: enabled_onviz_hit_test_surface_layer: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
15.86GB (9.87GB free)

Process Argv

Screen Reader
no

VM
0%

Extensions (6)

Extension
Author (truncated)
Version

githistory
don
0.4.11

git-project-manager
fel
1.7.1

Python-autopep8
him
1.0.2

anaconda-extension-pack
ms-
1.0.1

python
ms-
2019.11.50794

vscode-yaml
red
0.6.1

Please provide a screenshot illustrating the problem. See this wiki page for more info on how to report actionable terminal issues.

And below is the log file.
renderer1.log
If I use window power shell, I can terminate the process by pressing Ctrl + Pause, but in the past I only needed to press Ctrl + c. In addition, Ctrl + C works fine in other computers

Can you check if this also happens in Windows Terminal? https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701

I downloaded the window terminal from the link you provided and I can use Ctrl + c to terminate the running process

I downloaded the window terminal from the link you gave me and it also doesn't work

@TQuy please report against https://github.com/microsoft/terminal then as we depend on a component from that project.


Obvious Fix - Fix typo in docs

dcument vs document

@mtj8033 Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

@mtj8033 thank you for your contribution. However, I just fixed the same typo as part of the RetryTemplate enhancement and subsequent modification to the document https://github.com/spring-cloud/spring-cloud-stream/pull/1406. So i'll close this one for now, but hope to see more PRs from you.
Thanks again.


Django 5 0 demo

One things we're doing in this repo: tests using pytest. We can of course write tests also with Django test runner. But PyCharm only supports one test runner at a time.

One things we're doing in this repo: tests using pytest. We can of course write tests also with Django test runner. But PyCharm only supports one test runner at a time.

I removed the pytests and I'm also tempted to remove the react app and api.
Ideally I would want this approach in either a seperate project or a seperate branch.

Yes good idea. I might set up a pre-commit hook and clean up the requirements.txt in general


Minecraft forge server not running forge

My minecraft forge server isn't running forge, it shows up as a normal vanilla server on my sever list.
I have already reinstalled 2ce, I don't know what to do.
Here's a picture of the server when it first starts up, and my server folder.

I'm also running windows 7

Can you provide the docker run command line you’re usingn or at least the environment variables you’re passing?


[Feature] convert Button as a DoorBell Button

Please use the template and fill in all the data requested below!
Problem description
HomeKit supports doorbells (click button play chime sound on homepod)
Suggested solution
I want to be able to use my zigbee button as Doorbell
Are you willing to contribute to this feature?
No, because not too much experience with platform, but I would like to if it's possible

oh, thanks for reply! yeah it helps! but well looks like there is different issue :-D https://github.com/arachnetech/homebridge-mqttthing/issues/1


Delay

Fixes #1017
I added a few class that sorts out delay in milliseconds from 100ms to 900ms since 1000ms is already 1s (second).
.animated.delay-1h-ms {
  -webkit-animation-delay: 0.1s;
  animation-delay: 0.1s;
}

The h represents 100ms (i.e: 1h-ms is ---> 100ms)
Located from line : 3571 to 3609

Please see #1017


support clamp

Please also add tests for unsupported modes of ov clamp and mark them as xfail.

Please also add tests for unsupported modes of ov clamp and mark them as xfail.

added


custom labels for pie charts

Other chart types seem to support custom labels specified by the data object. Pie charts don't have this possibility - is that intentional?

Hey there. What do you mean by custom labels? You can pass optional series name, series class and meta data using the object notation of the data array in Pie charts like you do in the other charts:
var chart = new Chartist.Pie('.ct-chart', {
  labels: ['One', 'Two', 'Three'],
  series: [{
    name: 'My Custom Name 1',
    className: 'my-custom-class-1',
    data: 1
  }, {
    name: 'My Custom Name 2',
    className: 'my-custom-class-2',
    data: 2
  }, {
    name: 'My Custom Name 3',
    className: 'my-custom-class-3',
    data: 3
  }]
});

Hey @gionkunz,
thanks! That's exactly what I needed. The documentation for Chartist.Pie doesn't mention this possibility, though - is there a chance you could add a sentence explaining that?
Also, I couldn't find any information regarding the name property of the series objects, what is their purpose?

The name property will be written into a custom attribute ct:name which can be used in DOM manipulation after the chart is created. If you got time, please make a pull request to add an example to the documentation here: https://github.com/gionkunz/chartist-js/blob/develop/src/scripts/charts/pie.js#L273-L286

I can not generate pie chart in Chartist.js 0.7.3 version but it works in Chartist.js 0.5.0.  I want to generate horizontal bar chart and pie chart which is support in newer version not in older version. Can any one help me out in this? Bar chart is working fine with following data but pie chart is not working.
var CategoryValueTitleArray = [];
var CategoryValuePointsArray = [];
@foreach (var item in Model.LeadScoringExplicitValues)
{
    <text>
    CategoryValueTitleArray.push('@item.Value');
    CategoryValuePointsArray.push('@item.Point');
    </text>
    }

var data = {
labels: CategoryValueTitleArray,
series: CategoryValuePointsArray
};
    var options = {
        labelInterpolationFnc: function (value) {
            return value[0]
        }
    };

    var responsiveOptions = [
      ['screen and (min-width: 640px)', {
          chartPadding: 30,
          labelOffset: 50,
          labelDirection: 'explode',
          labelInterpolationFnc: function (value) {
              return value;
          }
      }],
      ['screen and (min-width: 1024px)', {
          labelOffset: 40,
          chartPadding: 20
      }]
    ];

    new Chartist.Pie('#explicit-value-piecanvas', data, options, responsiveOptions);

@gionkunz I'll do that in the next few days. Thanks a lot!
@joshiashish23, your problem doesn't seem to be relevant to this issue. Also, I'm not sure if what you are describing is a bug - maybe try creating a question on stackoverflow?

fixed with 62a80d2


Feature/documentation general improvements

Some minor changes to the documentation to eliminate repetitive instructions and make the copy clearer to understand.

Some minor changes to the documentation to eliminate repetitive instructions and make the copy clearer to understand.

If anyone feels passionate about contributing to this, please feel free to. I will be creating PRs to improve the copy in chunks that I can manage a bit easier.
My goal is to eliminate repetitive and unnecessary copy while making it easier to understand.


how to release it,like 'flutterWebviewPlugin.close()'

how to release it,like 'flutterWebviewPlugin.close()'
using it can not release

needed as well

como liberá-lo, como 'flutterWebviewPlugin.close ()'
usando não pode liberar

+1

Hi guys, since this plugin aim to be a singleton instance in the app so I did not expose that fuction
The other workaround is to reload about:blank page, just evaluate a js func like this: window.location.href = "about:blank"


Added Dynamic Contributors images to repo

Added Dynamic Contributors images to repo
Fix: https://github.com/Manthan933/Manthan/issues/32

Does it add all the contributors, if yes then how will it truncate is there is large of contributors ?

Does it add all the contributors, if yes then how it truncates the list if there is large number of contributors ?

Yes, it does add all contributors to the repository. No, it won't truncate the list of contributors if they more.
We can have a separate readme file for contributors if contributors are more


section 6.22 PKBB32 formatting issue

When describing behaviour of the isntructions, the index of words is somewhat wrogly formated.
Rs1.W[0] instead of Rs1.W[0] and so on.

Thanks for finding this issue. It will be fixed in the next release.

This issue has been fixed in 377b072.


i18n: Make property paths and categories translatable

master version of #58634
They are basically the same except master supports plural message and optional message context, so I modified the regex.
https://github.com/godotengine/godot/blob/d6df2ffad8beabc12acccbafd3afa00d7e501d9c/editor/translations/extract.py#L66-L82
Seems a bit long and messy because I gave each capture group an explicit name (?P<name>expression) so it's easier to handle plural message and optional message context.
Tested message extraction without the property path patterns. The result is the same as the original approach except for one message which is fixed in #58705.

Thanks!


[Feature Request] Add PlanetScale-CLI on Windows Chocolatey Packet Manager

I'm currently use a windows packet manager called scoop due to PlanetScaleCLI, which I don't really like. It would be preferable to let people install an executable or to make it available on chocolatey.
Sincerely, Afi

Agree! Please help us with that

Pretty please

Hey everyone, have you considered using the built-in packet manager called winget? I've been using it for about two years now and haven't encountered any issues with it while installing supported software. It's just a suggestion, but I think it's worth considering. 👌


Retirement: remove space between icons and commas or periods

If the template has a newline after the icon and the next character is a comma or a period, there will be a space between the icon and the comma or period.
Changes

Retirement: remove space between icons and commas or periods.

How to test this PR

Visit http://localhost:8000/consumer-tools/retirement/before-you-claim/ and http://localhost:8000/consumer-tools/retirement/before-you-claim/es/ and fill out the age and income. Expand the middle bottom tip and see that there is no period between the icons and the periods or commas.

Screenshots
Before:

After:

Using {{- and -}} collapses whitespace before and after the tag, which lets you keep it on its own line, which is a little more readable.

Works for me! Thanks! Updated in https://github.com/cfpb/consumerfinance.gov/pull/7654/commits/eb5c09623a63f8021d3bb8df011e25504765e706


Remove stacktrace from error response

When trying to post to the API with an invalid report, it will show the stacktrace, we should probably fix that.

Will be fixed once the NestJS migration is released to Production.

Released.


Fix truncated text about Cosmos DB regions

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/checklist/resiliency.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/checklist/resiliency.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Looks good - thanks for the PR!


LG-4226: Improve support for unstyled button

The unstyled button variant had previously existed in that it was inherited from USWDS, though it was not documented, and did not always display correctly, particularly in hover, active, and focus states. These changes improve this support, and adds documentation for the unstyled option.
Screenshot:

Live Preview: https://federalist-2f194a10-945e-4413-be01-46ca6dae5358.app.cloud.gov/preview/18f/identity-style-guide/aduth-lg-4226-document-variants/components/buttons/

(with change to hover and active colors in #196 )

It might take a few minutes to finish building, but I rebased this branch after merging #196, so the preview should reflect the new hover colors in a few minutes:
https://federalist-2f194a10-945e-4413-be01-46ca6dae5358.app.cloud.gov/preview/18f/identity-style-guide/aduth-lg-4226-document-variants/components/buttons/


fix: tests broken due to deprecated model

small is no longer available on generate
medium is no longer available on classify
preset had to be changed since it was using small on generate

should we remove model from the tests altogether, so that they never go stale?

we could, but we should still test that the model param works and preset request will also go stale anyways


[Feature] Division algorithm for long object

Description
pkpy has its special long object for arbitrary sized integers. See https://pocketpy.dev/features/long/.
long uses list of compressed digits as representation.
However, division operation between two long objects has not been properly implemented. (I am not an expert of algorithm)
https://github.com/blueloveTH/pocketpy/blob/main/python/_long.py#L102
def ulong_divmod(a: list, b: list):
    q = [0]
    while ulong_cmp(a, b) >= 0:
        ulong_inc_(q)
        a = ulong_sub(a, b)
    return q, a

The goal
Write a new ulong_divmod(a: list, b: list) to replace the old one, adoping a more efficient division algorithm, maybe of O(N) or O(NlogN) complexity.
Also you can try optimize additional parts or give me suggession, if you think there is more improvement.

Could you please assign this to me?

I think you are already working on #138 . What about leaving this to a new contributor :D

can you please assign me this?

Good luck! @Snehaaa18

Hello, it seems @Snehaaa18 are not working on this issue by either fork/star/pr.
So I have cancelled the assignment and leave the chance to new contributors.

Hi, I'd like to work on this issue.

Good luck. @pranavjainjs


is a custom collation for indexes available?

Is it possible to provide a custom collation/sorting order for creating indexes?
I ask because I need a database that I can use to sort words based on a rare language/alphabet.
Can different locales be used for sorting and comparing strings, ie (this ICU demo) ?
Thank you!

Ok, thanks. The problem is in getting the output. If I have a dictionary app and I want the next 100 entries in alphabetical order after a partial word search, I would need a custom/locale-based collation on the index.

Hmm. I see. Alasql cant solve that.


Update README.md

Added my information to the README.md file.
Fixes or introduces:
Proposed Changes

Thanks for the repo. This was my first PR. Looking forward to many more!

You also might find this article I wrote helpful: https://auth0.com/blog/a-first-timers-guide-to-an-open-source-project/


wip on optional

Taking a stab at #119 , documenting where I left off

AtomicMethodCallAnalyzer is a beast of a class, but looks like the template params aren't being passed properly


Modification Plugin-test.md

https://github.com/apache/skywalking/pull/4624#issuecomment-618963765

Codecov Report

Merging #4706 into master will decrease coverage by 50.93%.
The diff coverage is n/a.

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

I think more changes should be done, ref #4628
Could you go through this doc, and fix in this PR too?

Updated.

@BFergerson I can't choose you as a reviewer in the repo, could you have the 3 steps all checked on this page? https://gitbox.apache.org/setup/

@wu-sheng, these changes work too. All 3 steps are checked now

@BFergerson Strange, I can't choose you as reviewers, and you are not a part of SkyWalking committer team. https://github.com/orgs/apache/teams/skywalking-committers/members
Could you provide a screenshot about the content at the bottom of the page, about which repos you have write access after 3 steps checked?

lgtm

@BFergerson  If you feel good, should submit the Approve.

Has some plugin test failed, I am sure it no matter about this update.


Add a reference link to prerequisites of this document

Hello!
When working with a private cluster for the first time, we ran into some difficulty surrounding DNS servers. In the prerequisites (https://docs.microsoft.com/en-us/azure/aks/private-clusters#prerequisites), there is a mention of adding IP <IP_ADDRESS> to the upstream of our custom DNS servers.  it is a rookie mistake, but we didn't really know about that IP and how it worked until we went out of our way to search it up in the docs.
do you think a small note could be added to the bullet point (or a link) that can point you to the docs page all about that IP? (https://docs.microsoft.com/en-us/azure/virtual-network/what-is-ip-address-168-63-129-16)
I think that would help alleviate some simple mistakes like the one we made and rectified.
Something minor, but feel like that might be of assistance to users unfamiliar with these
Thank you!

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 0b68f2c4-bb6c-11a2-6c61-8af4057a2438
Version Independent ID: e3498bed-1447-6841-8353-9f1b5d3dc8df
Content: Create a private Azure Kubernetes Service cluster - Azure Kubernetes Service
Content Source: articles/aks/private-clusters.md
Service: container-service
GitHub Login: @zr-msft
Microsoft Alias: zarhoads

@nickmcmahan
Thanks for the feedback! I have assigned the issue to content author to check and update the document as appropriate.

@zr-msft
Can you please check and add your comments on this doc update request as applicable.

Thank you for the feedback.
We've updated the article to address your feedback and the changes should be available soon.
#please-close


Generate Symbol at compile time for User-Defined Type in Contract Spec

What
Generate Symbol at compiler time for User-Defined Type in Contract Spec.
Why
Symbols can be created at compile time because the fns for doing so are const fns, but the compiler will only evaluate them at compile time if the const fn is called in a const context. The Symbols for struct fields were being created at runtime because they weren't explicitly in a const context. This change causes them to be evaluated at compile time.
This change reduces the size of example_udt.wasm from 1809 to 1522 bytes.
Thanks to @jonjove who noticed this change in size when he started using the contract spec macros, and who noticed that the function being included is probably related to Symbol generation.
Known limitations
[TODO or N/A]

@jonjove FYI that the size difference of the resulting WASM file between using a Vec and using a Map now that this is fixed is nominal:

Map: 1522
Vec: 1518
So it seems using a Map now is not a concern in terms of generated code that ends up in the WASM.


Extremely no. If roomintros, /declare, /announce, and room polls aren't enough to annoy your users, I'm not giving you any more tools to do so.

Travis tests have failed
Hey @Spandamn,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
TravisBuddy Request Identifier: ed0007b0-562d-11e9-8811-9d5afad75740

I mean I know drivers can set these but it seems super niche and I dont see
why a roomintro wouldn't suffice for this. This also leads to even more
messages being sent upon joining a room and it can already get super large
if you have a roomintro plus staffintro plus poll; I really don't think we
need to add even more for such little benefit honestly.

There's a reason drivers don't get access to /declare. :[

Well i thought the idea with the roomintro was to give an introduction to the room, and the announcement feature would create a temporary sort of a thing

how about this? doesnt seem so declare-y

The roomintro is for both permanent and temporary things. But its biggest reason for existence is to put a limit on how much stuff is thrown at users when they join a room. Bypassing it is a bad idea.

well, i floated this idea through help staff and they thought it was a cool idea so i tried it out

@Zarel - the status quo sees rooms using nonsense polls to convey temporarily persistent information - is this really more desirable than supporting a more formal mechanism for doing so? I agree, in theory the /roomintro is the correct place for this, but if none of your RO's end up doing it, are you really going to stubbornly refuse to offer them a better tool? Room intros of PS today usually involve elaborate graphics and HTML (making them difficult to edit for the average RO) and are seldom changed so users skim over them, not expecting to find new content there. I don't know if there needs to be a new command or whether a flag can be passed to declare/announce to make it persist in the same way polls do, but I think its worth reconsidering what our user's needs are.

@scheibo I think the mistake here is assuming people will stop using persistent polls if we give them a separate feature, rather than having all of a roomintro, a persistent poll, and an announcement.
I would support this if we had interlocks to ensure it replaced the poll, rather than existing in addition to the poll, though.

Right now, polls are massively misused and I don't have a good solution for that. It makes it hard to actually use polls for their intended purpose when you have persistent always-running polls you don't want to replace...
I was thinking about this a few hours ago, incidentally. I don't think time limits are a good solution, because I can see running a poll for a day, and a time limit of a day is way too long to have any effect on "polls are always running".

This seems like an overly complicated solution to the problem.
I think this can all be contained within the constraints of a single command, like /roomintro. Then, just append it to the bottom of the roomintro. To address concerns about making this take up too much space when joining a room, we could make restrictions like not allowing HTML and to put a character limit that isn't too obtrusive (like 64).
In addition, we could also not allow a room announcement at the same time as a poll, if space is still a concern even with announcements having a strict character limit.
To prevent misuse of polls, we could add some banned words for options that are often used when polls are trying to convey an announcement.

I'm fine with this if you cannot run this at the same time as a poll in the room.

I would support this if we had interlocks to ensure it replaced the poll, rather than existing in addition to the poll, though.

I'm fine with this if you cannot run this at the same time as a poll in the room.

I mean, I'm not against this, but it doesn't solve this:

It makes it hard to actually use polls for their intended purpose when you have persistent always-running polls you don't want to replace...

I'm fine with incremental improvements that don't solve every problem ever. ;)

I just saw this got reopened
I'll probably update this tomorrow

I'm fine with incremental improvements that don't solve every problem ever. ;)

Yet youve been stubborning holding on for the 'perfect' database. Hmm...

Yet youve been stubborning holding out for the 'perfect' database. Hmm...

I haven't been holding out at all, I have no problem with any database you choose.
I've only personally migrated databases twice and both times they failed in ways difficult for me to fix, so you understand why I'm personally reluctant to try it again myself.

I did this on phone be proud of me

Said too early

Wonder why I can't add suggestions to a batch

Should I use ts-ignore? Halp

pollOrAnnouncement is not hotpatchable. Maybe just poll?

pollOrAnnouncement is not hotpatchable. Maybe just poll?

Going for a less clear name long term for immediate convenience in the short term does not seem like a good tradeoff

@zarel I kinda agree with this:

[22:55:54] @jetou: but really, i feel like having one extra line of onConnect is better than 7 instanceof checks...

Uh bump

I really really hate the .pollOrAnnouncement name.
Perhaps minorActivity or minigame or something.

minorActivity sounds cool

How is /ra (room announcement) for an alias?


How to import customElement, property from bundle

In the docs i'm told to use:
import {LitElement, html} from 'lit';
import {customElement, property} from 'lit/decorators.js';
but if i'm using bundle, only
import {LitElement, html} from<EMAIL_ADDRESS>is given.
how do i import customElement and property from jsdelivr.
I can see there is a file "lit-all" at<EMAIL_ADDRESS>but it doesn't seem to export customElement or property, and neither does lit-core, i get the error
Module<EMAIL_ADDRESS>has no exported member 'property'
Is the decorator module hosted elsewhere?

I'm using the documentation at https://lit.dev/docs/getting-started/#use-bundles

Decorators require a compiler, which is typically in a local, npm-using setup, so the bundles don't include the decorators.