// Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

import 'package:meta/meta_meta.dart';
import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';

/// {@template component_copy_with_extension}
/// This annotation class is used to annotate the implementation of components
/// directly in the application. It generates the implementation of the proxy
/// and the mixin to ensure that the component meets the specifications
/// defined in the UI Kit.
///
/// Basically it indicate that the `copyWith` extension
/// should be generated for the component.
///
/// ```dart
/// part 'loader.g.dart';
///
/// @ComponentCopyWithExtension()
/// class Loader extends LoaderComponent with $LoaderCWMixin {
///
///   const Loader({
///     ...
///   });
/// }
/// ```
/// {@endtemplate}
@Target({TargetKind.classType})
class ComponentCopyWithExtension extends ComponentAnnotation {
  /// {@macro component_copy_with_extension}
  const ComponentCopyWithExtension({super.skipFields});
}
