910e62b5创建于 1月15日历史提交
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_COMMON_UI_UTIL_CHROME_BUTTON_H_
#define IOS_CHROME_COMMON_UI_UTIL_CHROME_BUTTON_H_

#import <UIKit/UIKit.h>

// Styles for the buttons.
typedef NS_ENUM(NSInteger, ChromeButtonStyle) {
  ChromeButtonStylePrimary,
  ChromeButtonStylePrimaryDestructive,
  ChromeButtonStyleSecondary,
  ChromeButtonStyleTertiary,
};

// Image for the primary buttons.
typedef NS_ENUM(NSInteger, PrimaryButtonImage) {
  // Default image.
  PrimaryButtonImageNone,
  // Loading state, a spinner is shown.
  PrimaryButtonImageSpinner,
  // Confirmation state, a checkmark is shown.
  PrimaryButtonImageCheckmark,
};

// A chrome implementation of a UIButton.
@interface ChromeButton : UIButton

// The button's style. Setting this property will update the button's
// appearance to match the new style.
@property(nonatomic, assign) ChromeButtonStyle style;

// The button's title.
@property(nonatomic, copy) NSString* title;

// The button's font.
@property(nonatomic, copy) UIFont* font;

// The button's image. This property can only be set for primary style buttons.
@property(nonatomic, assign) PrimaryButtonImage primaryButtonImage;

// Whether the button has a tuned-down state. Default is NO. Takes precedence
// over "enabled" state.
@property(nonatomic, assign) BOOL tunedDownStyle;

// Designated init.
- (instancetype)initWithStyle:(ChromeButtonStyle)style
    NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE;
- (instancetype)initWithConfiguration:(UIButtonConfiguration*)configuration
                        primaryAction:(UIAction*)primaryAction NS_UNAVAILABLE;

@end

#endif  // IOS_CHROME_COMMON_UI_UTIL_CHROME_BUTTON_H_