// 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/src/domain/component_annotation.dart';

/// {@template component_proxy_extension}
/// This annotation class is used to annotate a new component of an UI kit.
/// It generates the abstract proxy of the component and allows access to
/// all its properties in different packages and throughout the application.
///
/// ```dart
/// part 'loader_component.g.dart';
///
/// @ComponentProxyExtension()
/// abstract class LoaderComponent extends Component
///     with CopyWithMixin<$LoaderComponentCWProxy> {
///
///   const LoaderComponent({
///     ...
///   });
/// }
/// ```
///
/// The [skipFields] option allows you to directly and specifically change
/// a field. This makes it easier to use.
///
/// {@endtemplate}
@Target({TargetKind.classType})
class ComponentProxyExtension extends ComponentAnnotation {
  /// {@macro component_proxy_extension}
  const ComponentProxyExtension({super.skipFields});
}
