abstract class _SSettings implements Settings {
  const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
}

abstract class _SSidebar implements Sidebar {
  const factory _SSidebar() = _$_SSidebar;
}

class Default {
  const Default(this.defaultValue);
  final Object? defaultValue;
}

class Settings {
  const factory Settings({
    @Default(Sidebar()) Sidebar sidebar,
  }) = _SSettings;
}

class Sidebar {
  const factory Sidebar() = _SSidebar;
}

class _$_SSettings implements _SSettings {
  const _$_SSettings({this.sidebar = const Sidebar()});
  final Sidebar sidebar;
}

class _$_SSidebar implements _SSidebar {
  const _$_SSidebar();
}

void main() {}
