// Generated by Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import AuthenticationServices;
@import Contacts;
@import CoreGraphics;
@import Foundation;
@import MapKit;
@import ObjectiveC;
@import Photos;
@import QuartzCore;
@import QuickLook;
@import UIKit;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="SAPFiori",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif





@class NSBundle;
@class NSCoder;

/// This <code>UIViewController</code> is base controller class to display a welcome/launch screen to the application for onboarding.
/// *
SWIFT_CLASS("_TtC8SAPFiori20FUIWelcomeController")
@interface FUIWelcomeController : UIViewController
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

@class UILabel;
@class FUIOnboardingButton;
@class UIKeyCommand;
@protocol UIViewControllerTransitionCoordinator;
@class UIStoryboardSegue;
@class UITextField;
@class UITraitCollection;

/// The Activation Screen is presented after the Welcome Screen in the case of an onboarding scenario
/// where the application has not been configured, and should prompt the end user to pick between email
/// address entry or the barcode scanner, to obtain connection settings. The screen displays a
/// headline Label with the title and a detailLabel with instructions on how to start the
/// activation process and options to enter the email address or click the Scan button to proceed to
/// the next step in the onboarding process.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIActivationScreen
/// fdlFUIActivationScreen_headlineLabel
/// fdlFUIActivationScreen_detailLabel
/// fdlFUIActivationScreen_primaryActionButton
/// fdlFUIActivationScreen.subheadlineLabel
/// fdlFUIActivationScreen_secondaryActionButton
/// fdlFUIActivationScreen_navigationBar
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIWelcomeControllerDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori19FUIActivationScreen")
@interface FUIActivationScreen : FUIWelcomeController <UITextFieldDelegate>
/// headlineLabel - Setting `headlineLabel.text displays the activation text on the screen; otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified headlineLabel;
/// detailLabel - Setting detailLabel.text displays the activation instructions on the screen otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified detailLabel;
/// primaryActionButton - Setting primaryActionButton.title displays the specific title otherwise, framework displays the default title ‘Next’.
@property (nonatomic, readonly, strong) IBOutlet FUIOnboardingButton * _Null_unspecified primaryActionButton;
/// subheadlineLabel Label - Setting subheadlineLabel.text displays the  activation instructions on the screen otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified subheadlineLabel;
/// secondaryActionButton - Setting secondaryActionButton.title displays the specific title otherwise, framework displays the default title ‘Next’.
@property (nonatomic, readonly, strong) IBOutlet FUIOnboardingButton * _Null_unspecified secondaryActionButton;
/// :nodoc:
@property (nonatomic, readonly, copy) NSArray<UIKeyCommand *> * _Nullable keyCommands;
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)didReceiveMemoryWarning;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (void)prepareForSegue:(UIStoryboardSegue * _Nonnull)segue sender:(id _Nullable)sender;
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UIView</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori13NibDesignable")
@interface NibDesignable : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIActivityControl</code> is a stand-alone component supporting user activities. By default, it supports phone, email, message, videoCall. <code>FUIContactCell</code> embed with a <code>FUIActivityControl</code> by default.
/// <h2>Code usage:</h2>
/// \code
/// //You can create your own activity object if you want.
/// let myCustomActivity = FUIActivityItem(icon: UIImage(named: "asset"), identifier: "mycustomer.twilio")
/// let activities: [FUIActivityItem] = [FUIActivityItem.phone, FUIActivityItem.message, myCustomActivity]
///
/// //Create a FUIActivityControl object.
/// let activityControl = FUIActivityControl()
/// activityControl.addActivities(activities)
/// activityControl.delegate = self
///
/// //Optionally, set an item size (if nil, intrinsic size of image will be used)
/// activityControl.itemSize = CGSize(width: 44.0, height: 44.0)
///
/// //Optionally, set a limit to visible items (useful for hiding items in `.compact` horizontal mode)
/// activityControl.maxVisibleItems = 3
///
/// //Optionally, set the inter-item spacing (useful for showing more items in `.compact` horizontal mode)
/// activityControl.spacing = 10.0
///
/// //Implement this method in your class to handle action.
/// func activityControl(_ activityControl: FUIActivityControl, didSelectActivity activityItem: FUIActivityItem) {
///     switch activityItem {
///         case FUIActivityItem.phone:
///            //do something
///         case FUIActivityItem.message:
///            //do something
///         case myCustomActivity:
///            //do something
///         default:
///            break
///     }
/// }
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIActivityControlDelegate</code> is declared as a weak reference. So on deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori18FUIActivityControl")
@interface FUIActivityControl : NibDesignable
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
@end


/// A <code>UITableViewCell</code> subclass, which supports limited configuration of separator line visibility and tintColor configuration.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIBaseTableViewCell
/// fdlFUIBaseTableViewCell_selectedBackgroundView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori20FUIBaseTableViewCell")
@interface FUIBaseTableViewCell : UITableViewCell
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated;
/// :nodoc:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
/// :nodoc:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated;
/// :nodoc:
- (void)willTransitionToState:(UITableViewCellStateMask)state;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)tintColorDidChange;
/// :nodoc:
- (void)layoutSubviews;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UITableViewCell</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori33NibDesignableFUIBaseTableViewCell")
@interface NibDesignableFUIBaseTableViewCell : FUIBaseTableViewCell
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// The reusable UI component implemented as an UITableViewCell
/// to manage selecting attachments.
/// <code>FUIAttachmentsFormCell</code> uses a <code>FUIAttachmentsViewController</code> to display the title of the cell
/// and a collection of icons to represent the attachments. The attachment icon size may change,
/// depends on the system font size settings. The controller arranges the attachment icons in
/// such a manner that as many icons to be fitted in a row, and as many rows to display all the
/// attachment icons. It will also try to make the row spacing equal to the spacing between icons.
/// However, the row spacing is limited to 20 pixels maximum.
/// Developers should use the property <code>attachmentsController</code> to provide attachment information;
/// the <code>delegate</code>, the <code>dataSource</code> and the list of <code>FUIAttachmentAction</code> implementations for the
/// desired type of attachments. The app can use the built-in types or implement additional types as desired.
/// important:
/// the cell’s parent <code>UITableViewController</code> should subclass <code>FUIFormTableViewController</code>.
/// Color settings:
/// Setting tintColor for add button for a state using setTintColor(_:for:) api. Currently <code>normal</code> and <code>.selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcodeThere are three built-in <code>FUIAttachmentAction</code>:
/// <ul>
///   <li>
///     <code>FUIAddPhotoAttachmentAction</code>: Choose photo from the photo library.
///   </li>
///   <li>
///     <code>FUITakePhotoAttachmentAction</code>: Take photo using the camera.
///   </li>
///   <li>
///     <code>FUIDocumentPickerAttachmentAction</code>: Select file using standard <code>UIDocumentPickerViewController</code>.
///   </li>
/// </ul>
/// \code
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUIAttachmentsFormCell.reuseIdentifier, for: indexPath) as! FUIAttachmentsFormCell
///     cell.attachmentsController.delegate = self
///     cell.attachmentsController.dataSource = self
///     
///     let addPhotoAction = FUIAddPhotoAttachmentAction()
///     addPhotoAction.delegate = self
///     cell.attachmentsController.addAttachmentAction(addPhotoAction)
///     
///     let takePhotoAction = FUITakePhotoAttachmentAction()
///     takePhotoAction.delegate = self
///     cell.attachmentsController.addAttachmentAction(takePhotoAction)
///     
///     let filePickerAction = FUIDocumentPickerAttachmentAction()
///     filePickerAction.delegate = self
///     cell.attachmentsController.addAttachmentAction(filePickerAction)
///     
///     return cell
/// }
///
/// var attachmentURLs: [URL] = [URL]()
///
/// // MARK: FUIAttachmentsViewControllerDataSource methods
/// func attachmentsViewController(_ attachmentsViewController: FUIAttachmentsViewController, iconForAttachmentAtIndex index: Int) -> (image: UIImage, contentMode: UIViewContentMode)? {
///    let urlString = self.attachmentURLs[index].absoluteString
///    guard let image = self.attachmentThumbnails[urlString] else {
///        return nil
///    }
///    return (image!, .scaleAspectFill)
/// }
///
/// func numberOfAttachments(in attachmentsViewController: FUIAttachmentsViewController) -> Int {
///    return attachmentURLs.count
/// }
///
/// func attachmentsViewController(_ attachmentsViewController: FUIAttachmentsViewController, urlForAttachmentAtIndex index: Int) -> URL? {
///    return attachmentURLs[index]
/// }
///
/// // MARK:  FUIAttachmentsViewControllerDelegateMethods
/// func attachmentsViewController(_ attachmentsViewController: FUIAttachmentsViewController, couldNotPresentAttachmentAtIndex index: Int) {
///    
/// }
///
/// func attachmentsViewController(_ attachmentsViewController: FUIAttachmentsViewController, didPressDeleteAtIndex index: Int) {
///    self.attachmentURLs.remove(at: index)
///    self.tableView.reloadSections(IndexSet(integer:attachmentSection), with: .automatic)
/// }
///
///
/// //MARK: FUIAddPhotoAttachmentActionDelegate
/// func addPhotoAttachmentAction(_ action: FUIAddPhotoAttachmentAction, didSelectPhoto asset: PHAsset, at url: URL) {
///    setupThumbnails(url, with: asset)
///    self.addAttachmentURL(url)
/// }
///
/// //MARK: FUITakePhotoAttachmentActionDelegate
///
/// func takePhotoAttachmentAction(_ action: FUITakePhotoAttachmentAction, didTakePhoto asset: PHAsset, at url: URL) {
///    setupThumbnails(url, with: asset)
///    self.addAttachmentURL(url)
/// }
///
///
/// func addAttachmentURL(_ url: URL) {
///    self.attachmentURLs.append(url)
///    DispatchQueue.main.async {
///        self.tableView.reloadSections(IndexSet(integer:self.attachmentSection), with: .automatic)
///        self.tableView.scrollToRow(at: IndexPath(row: 0, section: self.attachmentSection) , at: .middle, animated: true)
///    }
/// }
///
/// func setupThumbnails(_ url: URL, with asset: PHAsset) {
///     let imageManager = PHImageManager.default()
///     imageManager.requestImage(for: asset, targetSize: CGSize(width: 80, height: 80), contentMode: .default, options: nil, resultHandler: { image, array in
///         self.attachmentThumbnails[url.absoluteString] = image
///         DispatchQueue.main.async {
///             self.tableView.reloadSections(IndexSet(integer:self.attachmentSection), with: .automatic)
///             self.tableView.scrollToRow(at: IndexPath(row: 0, section: self.attachmentSection) , at: .middle, animated: true)
///         }
///     })
/// }
///
/// //MARK: FUIDocumentPickerAttachmentActionDelegate {
/// var documentPicker: UIDocumentPickerViewController {
///     return UIDocumentPickerViewController(documentTypes: ["public.data"], in: .import)
/// }
///
/// func documentPickerAttachmentAction(_ action: FUIDocumentPickerAttachmentAction, didPickFileAt url: URL) {
///     if let savedUrl = saveFileToTempFolder(url) {
///         self.addAttachmentURL(savedUrl)
///     }
///     self.tableView.reloadSections(IndexSet(integer:self.attachmentSection), with: .automatic)
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported <code>TEXT</code> class paths:
/// \code
///  fdlFUIAttachmentsFormView_attachmentTitleLabel {}
///  fdlFUIAttachmentsViewController_alertActionTitle {}
///  fdlFUIFileThumbnailCollectionItemView_titleLabel {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
///  font-color: Color;
///  font-style: UIFontTextStyle;
///
/// \endcodeSupported <code>IMAGE</code> class paths:
/// \code
///  fdlFUIFileThumbnailCollectionItemView_detailImageView {}
///
/// \endcodeSupported <code>IMAGE</code> properties:
/// \code
///  tint-color: Color;
///
/// \endcodeSupported <code>BUTTON</code> class paths:
/// \code
/// fdlFUIAddButtonCell_addButton {}
///
/// \endcodeSupported <code>BUTTON</code> properties:
/// \code
///  image: Image;
///  tint-color: Color;
///
/// \endcodeSupported <code>CELL</code> class paths:
/// \code
///  fdlFUIAttachmentsFormCell_thumbnailCell {}
///  fdlFUIAttachmentsFormCell_addButtonCell {}
///
/// \endcodeSupported <code>CELL</code> properties:
/// \code
///  border-color: Color;
///  border-width: Integer;
///  corner-radius: Integer;
///
/// \endcodeSupported style classes
/// \code
///
///
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori22FUIAttachmentsFormCell")
@interface FUIAttachmentsFormCell : NibDesignableFUIBaseTableViewCell
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
@end

@class QLPreviewController;
@protocol QLPreviewItem;

/// The <code>FUIAttachmentsViewController</code> manages the presentation of a collection of attachment thumbnails, and previews of specific files.
/// <h2>Configuration</h2>
/// Developers should implement the <code>FUIAttachmentsViewControllerDataSource</code> and <code>FUIAttachmentsViewControllerDelegate</code>, to supply content to the controller, and handle events.
/// <h2>Attachment Actions</h2>
/// The controller also supports presentation of an “Add Attachment” action sheet, which displays a list of <code>FUIAttachmentAction</code> options.  Attachment actions are typically used for acquiring (adding) attachments.  Default <code>FUIAttachmentAction</code> implementations are provided, for obtaining data from the camera, or photo albums.  Developers should add <code>FUIAttachmentAction</code> instances to the controller, using <code>addAttachmentAction(action:)</code>.
/// <h2>Presenting Attachment Previews</h2>
/// The <code>FUIAttachmentsViewController</code> uses a native <code>QLPreviewController</code> to present file previews, when the user taps on an attachment icon.  The <code>QLPreviewController</code> requires a valid file URL, and will request the URL for a selected attachment, in the <code>FUIAttachmentsViewControllerDataSource</code> <code>urlForAttachmentAtIndex:</code> method.  If the developer returns <code>nil</code>, or, if the <code>QLPreviewController</code> cannot handle the URL provided, then the <code>FUIAttachmentsViewControllerDelegate</code> <code>couldNotPresentAttachmentAtIndex:</code> method will be invoked.  The developer should handle the presentation for these cases, using a custom view controller, or other presentation framework.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIAttachmentsViewController
/// fdlFUIAttachmentsViewController_alertActionTitle
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori28FUIAttachmentsViewController")
@interface FUIAttachmentsViewController : UIViewController <QLPreviewControllerDataSource, QLPreviewControllerDelegate>
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController * _Nonnull)controller SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id <QLPreviewItem> _Nonnull)previewController:(QLPreviewController * _Nonnull)controller previewItemAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)previewControllerDidDismiss:(QLPreviewController * _Nonnull)controller;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// Subclass of <code>UITextField</code>, which implements the <code>FUIObservableValue</code> protocol, to observe changes to the <code>text</code> property.  The <code>onChangeHandler: ((String?) -> Void)?</code> closure will be invoked on changes to the <code>text</code> property.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUITextField
/// fdlFUITextField_clearButton
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori12FUITextField")
@interface FUITextField : UITextField
/// :nodoc:
@property (nonatomic, copy) NSString * _Nullable text;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGRect)editingRectForBounds:(CGRect)bounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (CGRect)textRectForBounds:(CGRect)bounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (CGRect)placeholderRectForBounds:(CGRect)bounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)addSubview:(UIView * _Nonnull)view;
/// :nodoc:
- (BOOL)canPerformAction:(SEL _Nonnull)action withSender:(id _Nullable)sender SWIFT_WARN_UNUSED_RESULT;
@end


/// Subclass of <code>FUITextField</code>, which supports auto-resizing the text field width based on the text entered.
SWIFT_CLASS("_TtC8SAPFiori24FUIAutoResizingTextField")
@interface FUIAutoResizingTextField : FUITextField
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
@end

@class UIVisualEffectView;
@class UIImageView;

/// <code>FUIBannerMessageView</code> shows an overlay message centered in the screen underneath a navigation bar, or one of <code>FUIObjectHeader</code>, <code>FUIProfileHeader</code>, and <code>FUIKPIHeader</code>. <code>FUINavigationBar</code> contains a <code>FUIBannerMessageView</code> by default.
/// Call <code>show</code> function on a <code>FUIBannerMessageView</code> instance to show the message. By default, the message is shown centered on screen.
/// <h2>Usage</h2>
/// <code>FUINavigationBar</code> has a <code>FUIBannerMessageView</code> prepared for you. Usually you don’t need to create an instance of it.
/// For <code>FUIObjectHeader</code>, <code>FUIProfileHeader</code>, and <code>FUIKPIHeader</code>, however, you need to allocate a <code>FUIBannerMessageView</code> or its subclasses to the <code>bannerMessage</code> property of the corresponding header view.
/// <h3>Setup</h3>
/// To display the banner message in a navigation bar, setup a <code>FUINavigationBar</code> in your navigation controller. You can set either in a nib file or programmatically.
/// <h3>Show message</h3>
/// \code
/// guard let navBar = self.navigationController?.navigationBar as? FUINavigationBar else {
///    return
/// }
/// navBar.bannerView?.show(message: "This is a test banner", withDuration: 1, animated: true)
///
/// \endcode\code
/// /// An example of a UITableViewController with `FUIBannerMessageView` in an `FUIObjectHeader`
/// class BannerObjectHeaderBannerTVC: UITableViewController {
///
///     let objectHeader = FUIObjectHeader()
///
///     let bannerView = FUIBannerMessageView()
///
///     override func viewDidLoad() {
///         self.tableView.tableHeaderView = objectHeader
///         super.viewDidLoad()
///
///         bannerView.isFading = false
///         objectHeader.bannerView = bannerView
///     }
///
///     override func viewDidAppear(_ animated: Bool) {
///         super.viewDidAppear(animated)
///         bannerView.show(message: "200k pending to upload example with text showing wrapping to two lines", withDuration: 5 ,animated: true)
///     }
///
///     // ...
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIBannerMessageView
/// fdlFUIBannerMessageView_titleLabel
/// fdlFUIBannerMessageView_dividerTop
/// fdlFUIBannerMessageView_dividerBottom
/// fdlFUIBannerMessageView_blurView
/// fdlFUIBannerMessageView_contentView
/// fdlFUIBannerMessageView_closeImage
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori20FUIBannerMessageView")
@interface FUIBannerMessageView : NibDesignable
/// The content view of <code>FUIBannerMessageView</code> instance.
@property (nonatomic, readonly, strong) IBOutlet UIView * _Null_unspecified view;
/// The view which adds blurry effect.
@property (nonatomic, readonly, weak) IBOutlet UIVisualEffectView * _Null_unspecified blurView;
/// The label which contains the message.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified titleLabel;
/// The view serves as top divider.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified dividerTop;
/// The view serves as bottom divider.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified dividerBottom;
/// The “Close” icon image view.
/// Tap this icon to dismiss this <code>FUIBannerMessageView</code>.
@property (nonatomic, readonly, strong) IBOutlet UIImageView * _Null_unspecified closeImage;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
/// :nodoc:
@property (nonatomic, copy) NSString * _Nullable accessibilityLabel;
/// :nodoc:
@property (nonatomic) UIAccessibilityTraits accessibilityTraits;
@end

@class UIImage;

/// <code>FUIBarButtonItem</code> is an enhanced <code>UIBarButtonItem</code> to provide a way to specify the
/// image to be displayed based on the state when <code>title</code> is <code>nil</code> or empty.
/// For now, only normal and disabled states are used.
SWIFT_CLASS("_TtC8SAPFiori16FUIBarButtonItem")
@interface FUIBarButtonItem : UIBarButtonItem
/// :nodoc:
@property (nonatomic, strong) UIImage * _Nullable image;
/// :nodoc:
@property (nonatomic, getter=isEnabled) BOOL enabled;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

/// The ScanMode enum defines a set of predefined modes to scan codes with the <code>Scanner</code>. Each mode contains a set of different codes including 1D and 2D codes.
typedef SWIFT_ENUM(NSInteger, FUIBarcodeScanMode, open) {
/// qr mode scans only QR codes.
  FUIBarcodeScanModeQr = 0,
/// EAN and UPC mode scan UPC-E, EAN-8 and EAN-13 codes.
  FUIBarcodeScanModeEan_upc = 1,
/// ONE D mode scans Code-128, Code-39, Code-39-Mod-43, Code-93, EAN-13, EAN-8, Interleaved-2-of-5, UPC-E codes.
  FUIBarcodeScanModeOne_d = 2,
/// ALL mode scans all possible codes defined in the <code>AVMetadataObjectTypes</code> (see <a href="https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVMetadataMachineReadableCodeObject_Class/index.html#//apple_ref/doc/constant_group/Machine_Readable_Object_Types">AVFoundation</a>).
  FUIBarcodeScanModeAll = 3,
};


/// The <code>UIView</code> in the <code>FUIBarcodeScanViewController</code>.
SWIFT_CLASS("_TtC8SAPFiori18FUIBarcodeScanView")
@interface FUIBarcodeScanView : UIView
/// The only UI components in the <code>FUIBarcodeScanView</code> is a <code>UIImageView</code>
/// which displays a scan guides image.
@property (nonatomic, readonly, weak) IBOutlet UIImageView * _Null_unspecified scanGuidesImageView;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// This <code>UIViewController</code> is to be used for user to scan for 1D and 2D codes using the device’s camera.
/// Developer may use segue in their storyboard to access this <code>FUIBarcodeScanViewController</code> in FUIBarcodeScanViewController.storyboard.
/// The <code>delegate</code> property of the <code>FUIBarcodeScanViewController</code> and the properties of the FUIBarcodeScanner may be set in the prepare for
/// segue function as follows:
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
/// let destination = segue.destination as! UINavigationController
/// let vc = destination.viewControllers[0]
/// if vc is FUIBarcodeScanViewController {
/// let scanViewController = vc as! FUIBarcodeScanViewController
/// switch segue.identifier! {
/// case "CustomScanSegue":
/// scanViewController.barcodeScanner.scanMode = .qr
/// scanViewController.barcodeScanner.indicatorBorderColor = UIColor.red.cgColor
/// scanViewController.barcodeScanner.indicatorBorderWidth = 20
/// scanViewController.barcodeScanner.promptMessage = "Scan A QR Code"
/// scanViewController.barcodeScanner.scanResultTransformer = { s in
/// return s + "-transformed"
/// }
/// scanViewController.delegate = self
/// default:
/// break
/// }
/// }
/// }
///
///
///
/// \endcodeOr, developer may use codes to instantiate this controller as follows:
/// \code
///
/// func customScanFromCode(_ sender: Any) {
/// let scanViewController = FUIBarcodeScanViewController.createInstanceFromStoryboard()
/// scanViewController.barcodeScanner.scanMode = .qr
/// scanViewController.barcodeScanner.indicatorBorderColor = UIColor.red.cgColor
/// scanViewController.barcodeScanner.indicatorBorderWidth = 20
/// scanViewController.barcodeScanner.promptMessage = "Scan A QR Code"
/// scanViewController.barcodeScanner.scanResultTransformer = { s in
/// return "transformed"
/// }
/// scanViewController.delegate = self
///
/// let navController = UINavigationController(rootViewController: scanViewController)
/// self.navigationController?.present(navController, animated: true, completion: nil)
/// }
///
///
/// \endcodeAlso, developer needs to implement the <code>FUIBarcodeScanViewControllerDelegate</code> protocol
/// to be notified with a scan result:
/// \code
///
/// func barcodeScanViewController(_ barcodeScanViewController: FUIBarcodeScanViewController, didReceiveScanResult scanResult: FUIBarcodeScanResult?) {
/// print("scan result: \(String(describing: scanResult?.scanResultString))")
/// if scanResult?.scanResultString != "success" {
/// alertInvalidQRCode()
/// } else {
/// barcodeScanViewController.dismiss(animated: true, completion: nil)
/// }
/// }
///
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIBarcodeScanViewControllerDelegate</code> is declared as a weak reference. So on deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during the whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori28FUIBarcodeScanViewController")
@interface FUIBarcodeScanViewController : UIViewController
/// The close button which is on the left of the navigation bar.
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified closeButton;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) BOOL prefersStatusBarHidden;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
@end

@class UITouch;
@class UIEvent;

/// A base class of <code>UICollectionViewCell</code> which exposes properties for displaying an accessory view, and for displaying cell borders.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIBaseCollectionViewCell
/// fdlFUIBaseCollectionViewCell_selectedBackgroundView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori25FUIBaseCollectionViewCell")
@interface FUIBaseCollectionViewCell : UICollectionViewCell
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// The type of standard accessory view the cell should use (normal state).
/// The behavior of this view should imitate that of <code>UITableViewCell.accessoryType</code>.
/// The accessory view appears in the right side of the cell in the collection view’s normal (default) state. The standard accessory views include the disclosure chevron; for a description of valid <code>accessoryType</code> constants, see <code>UITableViewCellAccessoryType</code>. The default is <code>none</code>. If a custom accessory view is set through the <code>accessoryView</code> property, the value of this property is ignored.
@property (nonatomic) IBInspectable UITableViewCellAccessoryType accessoryType;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesCancelled:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
@end




/// Re-implementation of <code>FUICollectionViewTableViewCell</code>, which does not implement <code>NibDesignable</code> protocol.
/// important:
/// Autosizes to fit content, using <code>collectionViewLayout.collectionViewContentSize.height</code> property.
SWIFT_CLASS("_TtC8SAPFiori34FUIBaseCollectionViewTableViewCell")
@interface FUIBaseCollectionViewTableViewCell : UITableViewCell
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
@end


/// Base <code>UIView</code> subclass, implementing the <code>fixedLayoutMargins</code> feature.
SWIFT_CLASS("_TtC8SAPFiori23FUIBaseFixedMarginsView")
@interface FUIBaseFixedMarginsView : UIView
/// :nodoc:
@property (nonatomic) NSDirectionalEdgeInsets directionalLayoutMargins SWIFT_AVAILABILITY(ios,introduced=11.0);
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


SWIFT_CLASS("_TtC8SAPFiori18FUIBaseDrawingView")
@interface FUIBaseDrawingView : FUIBaseFixedMarginsView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutMarginsDidChange;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)layoutSubviews;
@end










/// A <code>UITableViewHeaderFooterView</code> subclass, which supports top and bottom padding and separators.
SWIFT_CLASS("_TtC8SAPFiori32FUIBaseTableViewHeaderFooterView")
@interface FUIBaseTableViewHeaderFooterView : UITableViewHeaderFooterView
/// :nodoc:
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesCancelled:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
@end

@class FUIEmailInputView;

/// This <code>FUIBasicAuthenticationScreen</code> is an <code>UIViewController</code> to display the screen to prompt
/// user to enter username and password to do basic authentication.
/// It has a headline label and a detail label to display the title and a detail message
/// for this screen. There are two input fields for user input username and password.
/// And one primary action button. The button will be enabled when both the username and
/// password are not empty.
/// There is also a cancel button on the navigation bar for user to cancel the
/// basic authentication process.
/// Developer should implement <code>FUIBasicAuthenticationDelegate</code> and set it to the
/// <code>delegate</code> property to handle user responses.
/// \code
/// func presentDynamicAuthenticationScreen() {
///     let controllers = FUIBasicAuthenticationScreen.createInstanceFromStoryboard()
///
///     let basicAuthController = controllers.basicAuthenticationScreen
///     basicAuthController.loadViewIfNeeded()
///     basicAuthController.delegate = self
///
///     self.navigationController?.present(controllers.navigationController, animated: true, completion: nil)
/// }
///
///
/// func didSignIn(_ controller: FUIBasicAuthenticationScreen, username: String, password: String, completion: @escaping ((_ errorMessage: String?) -> Void)) {
///     var signInErrorMessage: String? = nil
///
///     // Send username and password to server for verification here
///
///     // Simulate callback from verification process
///     DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
///         // This is for testing purposes only.
///         if !self.signInOk || username == password {
///             signInErrorMessage = "Sign In Failed"
///         }
///
///         completion(signInErrorMessage)
///         if signInErrorMessage == nil {
///             controller.dismiss(animated: true, completion: nil)
///         }
///     }
/// }
///
/// func didCancel(_ controller: FUIBasicAuthenticationScreen) {
///     print("User Cancelled Basic Authentication")
///     controller.dismiss(animated: true, completion: nil)
/// }
///
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUIBasicAuthenticationScreen_headlineLabel {
/// font-size: 28;
/// font-name: thinSystem;
/// font-color: @primary1;
/// }
///
/// fdlFUIBasicAuthenticationScreen_detailLabel {
/// font-style: body;
/// font-color: @primary1;
/// }
///
/// fdlFUIBasicAuthenticationScreen_primaryActionButton {
/// font-style: callout;
/// font-color: @primary6;
/// corner-radius: 8;
/// background-color-normal: @tintColorDark;
/// background-color-highlighted: @backgroundGradientTop;
///
/// background-color-disabled: @line;
/// font-color-disabled:  #28666666; /*primary2 with 0.4 alpha; "28" is the hex value of 20% for alpha; "666666" is primary2*/
/// }
///
/// fdlFUIBasicAuthenticationScreen_cancelButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIBasicAuthenticationScreen_messageBannerTitleLabel {
/// font-color: @primary7;
/// }
///
/// fdlFUIBasicAuthenticationScreen_messageBannerDividerTop {
/// background-color: @line;
/// }
///
/// fdlFUIBasicAuthenticationScreen_errorMessageBannerTitleLabel {
/// font-color: @negative;
/// }
///
/// fdlFUIBasicAuthenticationScreen_errorMessageBannerDividerTop {
/// background-color: @negative;
/// }
///
/// fdlFUIBasicAuthenticationScreen_navigationBar {
/// background-color: clear;
/// background-tint-color: @tintColor;
/// bar-style: default;
/// }
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIBasicAuthenticationDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori28FUIBasicAuthenticationScreen")
@interface FUIBasicAuthenticationScreen : FUIWelcomeController
/// The headline title label to display the title of this screen.
/// The default text of this label is “Authentication” from the localized strings files.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified headlineLabel;
/// The detail message label to display the message of this screen.
/// The default text of this label is
/// “Please provide your username and password to authenticate.”
/// from the localized strings files.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified detailLabel;
/// The field for inputting the username.
/// The default placeholder string is “username” from the localized strings files.
/// Developer could customize the placeholder string similar to the following:
/// \code
/// basicAuthController.usernameInputView.emailTextField.placeholder = "enter username"
///
/// \endcode
@property (nonatomic, readonly, weak) IBOutlet FUIEmailInputView * _Null_unspecified usernameInputView;
/// The field for inputting the password.
/// The default placeholder string is “password” from the localized strings files.
/// Developer could customize the placeholder string similar to the following:
/// \code
/// basicAuthController.passwordInputView.emailTextField.placeholder = "enter password"
///
/// \endcode
@property (nonatomic, readonly, weak) IBOutlet FUIEmailInputView * _Null_unspecified passwordInputView;
/// The sign in button.
/// The default button title is “Sign In” from the localized strings files.
@property (nonatomic, readonly, weak) IBOutlet FUIOnboardingButton * _Null_unspecified primaryActionButton;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUIBasicAuthenticationScreen (SWIFT_EXTENSION(SAPFiori)) <UITextFieldDelegate>
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
@end

@class UIColor;

/// Subclass of <code>UIButton</code>, which provides for rounded edge and rounded fill styles.  It also provides for per-state tint colors, persistent selection, and a closure-styled tap handler.
/// The <code>FUIButton</code> implements the Fiori Design Language in default configuration.
/// <h1>Usage</h1>
/// <h2>Initialization</h2>
/// Init button with expected style (for default, use <code>.none</code>).
/// <blockquote>
/// To use <code>FUIButton</code> style variants in Interface Builder, the convenience subclasses <code>FUIRoundedButton</code> (<code>.fuiRounded</code>) and <code>FUIRoundedFillButton</code> (<code>.fuiRoundedFilled</code>) are also available.
///
/// </blockquote>
/// \code
/// // init with expected style.
///
/// let normalButton = FUIButton() // equivalent to FUIButton(style: .none)
/// let roundedOutlineButton = FUIButton(style: .fuiRounded)       // equivalent to `FUIRoundedButton()`
/// let roundedFilledButton = FUIButton(style: .fuiRoundedFilled)  // equivalent to `FUIRoundedFillButton()`
///
/// \endcode<h2>Setting title(s)</h2>
/// <code>UIButton</code> provides two techniques for setting its title:
/// <ol>
///   <li>
///     <code>setTitle(_:, for:)</code>
///   </li>
///   <li>
///     <code>titleLabel.text</code>
///   </li>
/// </ol>
/// The behavior of the (2) is inconsistent, and discouraged by Apple.  As a result, <code>titleLabel.text</code> should be avoided in favor of technique <code>setTitle(_:_:)</code>.  The <code>FUIButton</code> <em>will</em> correct the behavior of <code>titleLabel.text</code>, if <code>setTitle(_:_:)</code> is <em>not</em> used.  However, if the developer at any point invokes <code>setTitle(_:, for:)</code> directly, <code>FUIButton</code> will cease to correct for <code>titleLabel.text</code>, and will defer to the developer to use the API correctly.
/// \code
/// button.setTitle("Follow", for: .normal)
/// button.setTitle("Unfollow", for: .selected)
///
/// \endcode<h2>Specify Selection Behavior</h2>
/// The default behavior of <code>UIButton</code> is to toggle between <code>.normal</code> and <code>.highlighted</code> <code>UIControlState</code>, on user touches started and touches ended.  The <code>.selected</code> state is never used.
/// <code>FUIButton</code> supports toggling between <code>.normal</code> and <code>.selected</code> <code>UIControlState</code>, by setting the <code>isPersistentSelection</code> flag to <code>true</code>.  This is particularly useful, if using the button to toggle a property.  The developer may use the <code>isSelected: Bool</code> API to toggle cause this transition.
/// \code
/// button.isPersistentSelection = true    // causes button to toggle between `.normal` and `.selected` states on user touch
///
/// \endcodeWhen <code>isPersistentSelection == true</code>, the button may transition briefly through the <code>.highlighted</code> state, between <code>.selected</code> and <code>.normal</code> on user touches.  Configure settings for <code>[.selected, .highlighted]</code>, if implementing custom behavior here.
/// <h2>Color Configuration</h2>
/// Call <code>setTintColor(_:_:)</code> to configure tint color for states. Setting <code>tintColor</code> is equivalent to call <code>setTintColor(color, for: UIControlState.normal)</code>. Default <code>tintColor</code> is <code>UIColor.preferedFioriColor(for: .tintColor, background: self.backgroundColorScheme)</code>.
/// \code
/// // set the `.normal` and `.disabled` tint colors
/// button.setTintColor(.preferredFioriColor(forStyle: .tintColor), for: .normal)
/// button.setTintColor.setTintColor(.preferredFioriColor(forStyle: .primary4), for: .disabled)
///
/// // set *either* the `.highlighted` or `.selected` tint colors
/// button.setTintColor(UIColor.preferredFioriColor(forStyle: .tintColorTapState), for: .highlighted)
/// // --or--
/// button.setTintColor.setTintColor(UIColor.preferredFioriColor(forStyle: .tintColorTapState), for: .highlighted)
///
/// \endcodeThese tint colors will be applied differently, depending upon the <code>.style</code> of the button.  In the <code>.fuiRounded</code> style, the tint is applied to the <code>layer</code> edge and <code>titleLabel.textColor</code>; in the <code>.fuiRoundedFill</code> style, the tint is applied to the background color.
/// In any style, you may choose to override the background color for state, which is useful for applying an inverted style.
/// \code
/// button.setBackgroundColor(UIColor.preferredFioriColor(forStyle: .tintColorLight), for: .highlighted)
///
/// \endcodeThe <code>FUIButton</code> also implements the <code>FUIBackgroundSchemeSupporting</code> protocol, which enables developers to inform the control whether it is being presented against a ‘light’ background, or ‘dark’ background.  The default style of the button will adapt to the background color scheme; defaults to <code>.light</code>.
/// <h2>Size Calculation</h2>
/// The <code>FUIButton</code> calculates an <code>intrinsicContentSize</code> from its <code>imageView</code> and <code>titleLabel</code>, its various insets, and its <code>directionalLayoutMargins</code>.
/// To manage the width of the text in the <code>titleLabel</code>, use the regular <code>UILabel</code> API to configure the wrapping behavior.
/// \code
/// button.titleLabel?.preferredMaxLayoutWidth = 200
/// button.titleLabel?.lineBreakMode = .byWordWrapping
///
/// \endcodeAs an additional configuration option, the <code>FUIButton</code> provides a flag <code>isPreservingPreferredMaxLayoutWidth</code>, which uses the <code>preferredMaxLayoutWidth</code> as a minimum width for the <code>titleLabel</code> when calculating <code>intrinsicContentSize</code>.  This is useful, when implementing a fixed-width button with variable texts, or toggling variable-width texts on state.
/// <blockquote>
/// Note:  This will not affect the <code>titleLabel</code> text wrapping behavior.
///
/// </blockquote>
/// \code
/// button.isPreservingPreferredMaxLayoutWidth = true
///
/// \endcode<h2>Selection handler:</h2>
/// Optional closure-based substitute for <code>addTarget(_:_:_:)</code> method for handling user taps.  Passes <code>self</code> as input parameter.
/// Is compatible with <code>addTarget(_:_:_:)</code> selector registration.
/// If used in combination with the target-action selector registration, handlers will be invoked in the following order:
/// <ol>
///   <li>
///     <code>didSelectHandler</code>
///   </li>
///   <li>
///     target-action selector
///   </li>
/// </ol>
/// <h2>Theming</h2>
/// Support <code>Button</code> class paths:
/// \code
/// Button {}
/// fdlFUIButton {}
///
/// \endcodeSupported <code>Button</code> attributes:
/// \code
/// tint-color { -selected | -highlighted | -selected-highlighted | -selected-disabled | -disabled } (Color)
/// background-color { -normal | -selected | -highlighted | -selected-highlighted | -selected-disabled | -disabled } (Color)
/// background-image { -selected | -highlighted | -selected-highlighted | -selected-disabled | -disabled } (Image)
/// content-insets (Box)
/// image-insets (Box)
/// title-insets (Box)
/// shadow-color (Color)
/// shadow-offset (Offset)
/// shadow-opacity (Number)
/// shadow-radius (Number)
///
/// \endcodeSupported <code>Text</code> attributes:
/// \code
/// font-color { -selected | -highlighted | -selected-highlighted | -selected-disabled | -disabled } (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-align (TextAlign)
/// text-alpha (Number)
/// text-auto-fit (Boolean)
/// text-line-clamp (Integer)
/// text-shadow-color { -selected | -highlighted | -selected-highlighted | -selected-disabled | -disabled } (Color)
/// text-shadow-offset (Offset)
///
/// \endcodeSupported <code>ImageView</code> attributes:
/// \code
/// image { -highlighted | -selected | -selected-highlightecd | -selected-disabled | -disabled } (Image)
///
/// \endcoderemark:
/// The <code>tint-color { -* }</code> attribute will override the <code>font-color { -* }</code> attribute on a state-by-state basis.  E.g.  <code>tint-color-highlighted</code> will override <code>font-color-highlighted</code>, but will not affect <code>font-color</code>.
SWIFT_CLASS("_TtC8SAPFiori9FUIButton")
@interface FUIButton : UIButton
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)setTitleColor:(UIColor * _Nullable)color forState:(UIControlState)state;
/// :nodoc:
- (void)tintColorDidChange;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)setTitle:(NSString * _Nullable)title forState:(UIControlState)state;
/// :nodoc:
@property (nonatomic, getter=isSelected) BOOL selected;
/// :nodoc:
@property (nonatomic, getter=isEnabled) BOOL enabled;
/// :nodoc:
@property (nonatomic, getter=isHighlighted) BOOL highlighted;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end




/// <code>FUIInlineValidationTableViewCell</code> is a base class for <code>FUIFormCell</code>s that need to support validation handling. The validation view will appear at the bottom of cell if validation message is set.
/// <em>This class is typically not used by developer.</em> Most of form cells are subclassing this class. To enable validation message on form cells by setting <code>validationMessage</code> property.
/// <h2>Code usage:</h2>
/// Set validationMessage on form cell.
/// \code
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUITitleFormCell.reuseIdentifier, for: indexPath) as! FUITitleFormCell
///     //Configure your cell
///
///     cell.validationMessage = "Validation msg"
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori32FUIInlineValidationTableViewCell")
@interface FUIInlineValidationTableViewCell : NibDesignableFUIBaseTableViewCell
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// Type of the accessory view
@property (nonatomic) IBInspectable UITableViewCellAccessoryType accessoryType;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Simple <code>UITableViewCell</code> subclass, containing a <code>UIButton</code> instance which can be
/// aligned to 3 <code>FUIHorizontalAlignment</code> positions:  <code>.left</code>, <code>.center</code>, <code>.right</code>.
/// <img src="../ReadmeImages/FK_ButtonCellAnnotations.png?raw=true" alt="FUIButtonFormCell" width="376">
/// Color settings:
/// Setting tintColor for button for a state using setTintColor(_:for:) api. Currently <code>disabled</code>, <code>normal</code> and <code>selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcode<h2>Usage:</h2>
/// Implement the action handler for the <code>UIButton</code> instance, to respond to <code>UIControl</code> events.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIButtonFormCell
/// fdlFUIButtonFormCell_button
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori17FUIButtonFormCell")
@interface FUIButtonFormCell : FUIInlineValidationTableViewCell
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// Main <code>@IBOutlet</code> in the view.  May be positioned in cell, using <code>alignment</code> property.  Assign target action, using <code>UIButton</code> <code>addTarget(_:_:_:)</code> interface.
@property (nonatomic, readonly, weak) IBOutlet FUIButton * _Null_unspecified button;
/// :nodoc:
- (void)prepareForReuse;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class FUICalendarFloorplanViewController;

/// This protocol defines the functions to be invoked when user tapped the ‘Done’ button on the <code>FUICalendarFloorplanViewController</code>.
SWIFT_PROTOCOL("_TtP8SAPFiori28FUICalendarFloorplanDelegate_")
@protocol FUICalendarFloorplanDelegate
@optional
/// This function is invoked when user tapped the ‘Done’ button.
/// \param controller The <code>FUICalendarFloorplanViewController</code>.
///
- (void)didTapDone:(FUICalendarFloorplanViewController * _Nonnull)controller;
@end


/// The FUICalendarFloorplanViewController can be used to quickly create a controller displaying an FUICalendarView and a UITableView.
/// The FUICalendar style to be displayed can be specified in the controller init method.All calendar styles are supported except expandable. In the case of rangeSelectionView and datesSelectionView, no tableview is displayed and the calendarView occupies the full screen. In the case of month or week styles, if the allowsStyleSwitching flag is is enabled, clicking the right bar button in the navigation bar allows the calendar to switch between month and week styles.
/// <img src="../ReadmeImages/FUICalendarFloorplan-Month.png?raw=true" alt="FUICalendarView"/>
/// <img src="../ReadmeImages/FUICalendarFloorplan-Week.png?raw=true" alt="FUICalendarView"/>
SWIFT_CLASS("_TtC8SAPFiori34FUICalendarFloorplanViewController")
@interface FUICalendarFloorplanViewController : UIViewController
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
@end


/// <code>FUICalendarView</code> control extends <code>UIView</code> and provides APIs to add calendar functionality in your app with minimal effort. There are five variations of FUICalendarView, as specified by the FUICalendarStyle enum based data display and selection options.
/// <h3>Month</h3>
/// <img src="../ReadmeImages/FUICalendar-MonthView.png?raw=true" alt="FUICalendarView"/>
/// This is the default view with vertical scrolling enabled. It shows the dates for one entire month at a time, where upon a scrolling action, the previous or next month is displayed on the screen based on the scroll direction.
/// The dates for the month are arranged in 7 columns (with a view above denoting the corresponding weekdays) spanning a maximum of five or six rows, based on order of the first day of the week shown in the view displayed above and the total number of days in the month.
/// The first day of the week can be set to either sunday, monday or saturday while instantiating the calendar.  In addition to showing the dates for the particular month, some dates from the previous month and the next month are also displayed, but appear in a greyed out font color to differentiate them from the current month dates.
/// The previous month dates are displayed in beginning of the first row and the next month dates appear on the last row. For example, if the month starts on a wednesday and the weekday display view shows day of week starting from sunday,  then in the very first row of the month being displayed, the previous month dates are shown from sunday to tuesday.
/// If the month ends on a friday, then the remaining dates in that row (for saturday and sunday) denote the dates of the next month. Only one date can be selected at any time. The default selection behavior is that the first date of every month is automatically selected when the month is displayed.
/// If the month contains today’s date, then the current date shows selected instead. When the user clicks on another date, then that date appears selected. When ‘isPersistentSelection’ is set to true, the selection behavior is different from the default selection behavior, where no date appears selected when the calendar is initially displayed (unless developer has set a selected date using selectDate: API). When the user selects a date, that date stays selected regardless of scrolling to another month. In both the isPersistentSelection and default mode, the developer can force a date to be selected at calendar startup by calling the selectDate: API for month, week, expandable and datesSelection styles) or selectDateRange: API for rangeSelection style.
/// <h3>Week</h3>
/// <img src="../ReadmeImages/FUICalendar-WeekView.png?raw=true" alt="FUICalendarView"/>
/// This view shows a single row of dates on the screen with 7 columns, one for each day of the week. This view incorporates horizontal scrolling, where the user can scroll left or right, displaying the set of dates for the particular week being displayed. In this mode, the previous month dates are displayed only for the very first month in the entire calendar range.
/// The default selection behavior is that the first date of every month is automatically selected and if the user chooses another date, then that date appears selected. In addition, when the user scrolls, in the next set of 7 dates shown after the scroll, the date corresponding to the day of the week of the previously selected date appears automatically selected. For example, if the user selects date 22 of the month and it falls on a wednesday, then after a forward scroll, date 29 is selected since it will be the next Wednesday.
/// If isPersistentSelection is set to true, then When the user selects a date, that date stays selected regardless of scrolling. In both the isPersistentSelection and default mode, the developer can force a date to be selected at calendar start up or after a scroll by calling the selectDate: or selectDateRange: API , after calendar init or from within the calendarView(_:didChangeVisibleDatesTo:) delegate.
/// <h3>Expandable</h3>
/// <img src="../ReadmeImages/FUICalendar-ExpandableView1.png?raw=true" alt="FUICalendarView"/>
/// <img src="../ReadmeImages/FUICalendarExpandableView2.png?raw=true" alt="FUICalendarView"/>
/// This view is a combination of month and week styles. The user can toggle between the two modes using a handle which animates the transition between the modes.
/// <h3>rangeSelection</h3>
/// <img src="../ReadmeImages/FUICalendar-rangeSelectionView.png?raw=true" alt="FUICalendarView"/>
/// This view displays the dates similar the month style, but takes the entire screen space. Hence dates for more than one month can be displayed at a time.Also,this view allows the user to select a contiguous range of dates. isPersistentSelection is always set to true and the selected dateRange stays selected regardless of scrolling to another month. The first date selected is the startDate of the range and when a second dates is selected it becomes the end date of the range, with the entire range of dates between the start and end dates( inclusive) being selected. To modify the set of selected dates, click on a selected date within the range and it becomes the new end date with all the dates later than that getting deselected. To unselect the entire range, click outside the range, anywhere in the calendar view. The end range of the range must be a later date than the start date. If the user clicks on a date earlier than the start date, then the newly selected date now becomes the start date and the original start date is deselected.
/// <h3>datesSelection</h3>
/// <img src="../ReadmeImages/FUICalendar-datesSelectionView.png?raw=true" alt="FUICalendarView"/>
/// Similar to rangeSelection, this style takes the entire screen space. However, it differs from the rangeSelection in how the dates are selected, allowing for the selection of multiple non contiguous dates. It also provides a swipeToSelect functionality, where swiping across the screen would select or deselect the corresponding dates at that location.
/// The FUICalendar can be instantiated to display in any one of the above display modes. In addition, the developer can specify the start and end dates of the entire calendar range and the displayDateAtStartup start up. If the start, end and display dates are nil, that is, the user does not supply any values for those parameters, then the calendar is instantiated with a two year range from Jan 1st of the current year to Dec 31st of the next year and the display date on start up is set to the current date.
/// The user can also choose to provide only the start date, end date or display date. If the start and end dates are provided, then set up the range accordingly. If no display date is provided in this case and if the current date falls inbetween this provided range, then the calendar shows the current date on start up, else the start date is displayed on start up. If only the display date is provided, then the range is from Jan 1st of the year of the displayDate to Dec 31st of next year.
/// <h2>Theming</h2>
/// <h3>FUICalendarView</h3>
/// \code
/// fdlFUICalendarView_property {}
///
/// \endcodeSupported <code>monthHeaderText</code> properties:
/// \code
/// font-color: Color;
/// font-size: Size;
/// font-style: UIFontTextStyle;
/// font-name: FontName;
///
/// \endcode<h3>FUICalendarItemView</h3>
/// \code
/// fdlFUICalendarItemView_property {}
///
/// \endcodeSupported <code>title</code> properties:
/// \code
/// font-color: Color;
/// font-size: Size;
/// font-style: UIFontTextStyle;
/// font-name: FontName;
/// tint-color { -disabled }: Color; // Title text color for dates that are out of current range.
/// tint-color { -highlighted }: Color; // Title text color for Today.
/// tint-color { -selected }: Color; // Title text color for selected days.
///
/// font-name { -highlighted }: FontName; // Title text for Today.
/// font-name { -selected }: FontName; // Title text for selected days.
///
/// \endcodeSupported <code>weekNumberText</code> properties:
/// \code
/// font-color: Color;
/// font-size: Size;
/// font-style: UIFontTextStyle;
/// font-name: FontName;
///
/// \endcodeSupported <code>selectionSingle</code>, <code>selectionRange</code> properties:
/// \code
/// background-color: Color; // Color for Views when selected.
///
/// \endcodeSupported <code>eventView</code> properties:
/// \code
/// background-color: Color; // The color of the eventView displayed below each date.
///
/// \endcode<h3>FUIWeekLabelView</h3>
/// \code
/// fdlFUIWeekLabelView_property {}
///
/// \endcodeSupported <code>weekDayText</code> properties:
/// \code
/// font-color: Color;
/// font-size: Size;
/// font-style: UIFontTextStyle;
/// font-name: FontName;
///
/// tint-color { -highlighted }: Color; // Title text color for Today.
///
/// \endcode\code
///
/// // Sample view controller implementing the FUICalendarView control
///
/// private let formatter:DateFormatter = {
/// let dateformatter = DateFormatter()
/// dateformatter.timeZone = Calendar.current.timeZone
/// dateformatter.locale = Calendar.current.locale
/// dateformatter.dateFormat = "yyyy MM dd"
/// return dateformatter
/// }()
///
/// class CalendarMonthViewController: UIViewController, FUICalendarViewDelegate {
///
/// var calendarView = FUICalendarView() // initializes in the default month mode and shows the current date on start up
///
/// override func viewDidLoad() {
/// super.viewDidLoad()
///
/// self.viewRespectsSystemMinimumLayoutMargins = false
/// self.view.backgroundColor = .white
/// self.view.addSubview(calendarView )
/// calendarView.delegate = self
///
/// calendarView.translatesAutoresizingMaskIntoConstraints = false
/// calendarView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
/// calendarView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 0).isActive = true
/// calendarView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0).isActive = true
///
/// let dt = formatter.date(from:"2019 01 23")
/// calendarView.selectDate(dt!)
/// }
///
/// override func viewDidAppear(_ animated: Bool) {
/// super.viewDidAppear(animated)
/// }
///
/// // Implement the FUICalendarViewDelegate methods
///
/// // Implement this method to set the title of the controller.
/// // This method is called whenever there is a change in the status, for example, upon each scroll, the title is updated to the current month being displayed. When a
/// // date is selected, then the title is updated to denote the corresponding month.
/// func  calendarView(_ calendarView: FUICalendarView, didChangeTitleTo title: String) {
/// self.navigationItem.title = title
/// }
///
///
/// // Called when there is a change in the selected dates
/// func  calendarView(_ calendarView: FUICalendarView, didChangeSelections selections: [FUIDateSelection]) {
///
/// }
///
/// // Called after a scrolling action
/// func  calendarView(_ calendarView: FUICalendarView, didChangeVisibleDates visibleDates: FUIVisibleDates) {
///
/// }
///
/// // Called when a cell (displaying the date) is selected.
/// func calendarView(_ calendarView: FUICalendarView, didSelectCell: FUICalendarItemCollectionViewCell, at: Date) {
///
/// }
///
/// // Called when a cell (displaying the date) is deselected.
/// func calendarView(_ calendarView: FUICalendarView, didDeselectCell: FUICalendarItemCollectionViewCell, at: Date) {
///
/// }
///
/// // Called before a cell (displaying the date) is displayed.
/// func calendar(_ calendarView: FUICalendarView, willDisplay cell: FUICalendarItemCollectionViewCell, forItemAt date: Date, indexPath: IndexPath) {
///
/// }
///
/// }
///
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUICalendarViewDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori15FUICalendarView")
@interface FUICalendarView : FUIBaseDrawingView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)reloadData;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end

@class UIGestureRecognizer;

@interface FUICalendarView (SWIFT_EXTENSION(SAPFiori)) <UIGestureRecognizerDelegate>
/// :nodoc:
- (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer * _Nonnull)otherGestureRecognizer SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer shouldReceiveTouch:(UITouch * _Nonnull)touch SWIFT_WARN_UNUSED_RESULT;
@end




/// A subclass of <code>MKPointAnnotation</code> which conforms to <code>FUIAnnotation</code> and it is tied to a callout tag showing the name of a route on the map.
SWIFT_CLASS("_TtC8SAPFiori20FUICalloutAnnotation")
@interface FUICalloutAnnotation : MKPointAnnotation
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>UITableViewCell</code> containing a <code>UICollectionView</code>, configured for displaying <em>Card</em> collection view items.
/// <ul>
///   <li>
///     <code>FUIChartCardCollectionViewCell</code>
///   </li>
///   <li>
///     <code>FUIKPICardCollectionViewCell</code>
///   </li>
///   <li>
///     <code>FUIKPIProgressCardCollectionViewCell</code>
///   </li>
/// </ul>
/// Takes responsibility for correct layout and sizing for the card items, for different screen dimensions.
SWIFT_CLASS("_TtC8SAPFiori34FUICardCollectionViewTableViewCell")
@interface FUICardCollectionViewTableViewCell : FUIBaseCollectionViewTableViewCell
/// :nodoc:
- (void)layoutMarginsDidChange;
/// :nodoc:
- (void)prepareForReuse;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end


SWIFT_CLASS("_TtC8SAPFiori14FUIDrawingView")
@interface FUIDrawingView : FUIBaseDrawingView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// View implementation of <code>FUIChartFloorplan</code>. Shared by <code>FUIChartFloorplanViewController</code> and <code>FUIChartFloorplanTableViewCell</code>.
/// Composed of <code>FUIChartTitleView</code>, <code>FUIChartSummaryView</code>, <code>FUIChartPlotView</code>, and <code>FUIChartLegendView</code>. The <code>FUIChartView</code> of the <code>FUIChartPlotView</code> is exposed as a public property, and should be used directly by the developer.
/// <h2>Data Sources</h2>
/// Developer should implement the <code>FUIChartViewDataSource</code> to supply data to the <code>FUIChartView</code>.
/// Developer should implement the <code>FUIChartSummaryDataSource</code> to supply <code>FUIChartSummaryItem</code> instances to be displayed when users select categories in the chart view.
/// <h2>Delegates</h2>
/// Developer may optionally implement the <code>FUIChartSummaryDelegate</code>, to handle selection of the <code>FUIChartSummaryItem(s)</code>.
/// <h2>Usage</h2>
/// \code
/// self.title = "Sales Chart"
/// self.chartView.chartType = .bar
/// self.chartView.numberOfGridlines = 4
/// self.chartView.dataSource = self
///
/// self.summaryView.dataSource = self
/// self.titleText.text = "Total APE ($) by Salesperson"
/// self.status.text = "Updated 20m ago"
/// self.categoryAxisTitle.text = "Salesperson"
/// self.valuesAxisTitle.text = "Total APE ($)"
///
/// let item = FUIChartSummaryItem()
/// item.categoryIndex = -1
/// item.isEnabled = false
/// item.isPreservingTrendHeight = false
///
/// let values: [Double] = {
///     var values: [Double] = []
///     for series in chartView.series {
///         let categoriesUpperBound = series.numberOfValues - 1
///         if let valuesInSeries = series.valuesInCategoryRange((0...categoriesUpperBound), dimension: 0) {
///             values.append(valuesInSeries.flatMap({ $0 }).reduce(0.0, +))
///         }
///     }
///     return values
/// }()
///
/// let numberFormatter  = NumberFormatter()
/// numberFormatter.numberStyle = .currency
/// numberFormatter.maximumFractionDigits = 0
///
/// item.valuesText = values.map { "\(numberFormatter.string(from: $0 as NSNumber)!)k" }
/// item.titleText.text = "Team ($) APE"
/// self.summaryView.addItem(item)
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// \code
/// fdlFUIChartFloorplanView_title {}
/// fdlFUIChartFloorplanView_subtitle {}
/// fdlFUIChartFloorplanView_status {}
/// fdlFUIChartFloorplanView_seriesTitles {}
/// fdlFUIChartFloorplanView_valuesAxisTitle {}
/// fdlFUIChartFloorplanView_secondaryValuesAxisTitle {}
/// fdlFUIChartFloorplanView_categoryAxisTitle {}
///
/// \endcodeSupported properties:
/// \code
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUIChartFloorplanView")
@interface FUIChartFloorplanView : FUIDrawingView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Legend view component of <code>FUIChartLegendTableViewCell</code>, <code>FUIChartFloorplanView</code>, <code>FUIChartFloorplanViewController</code>, and <code>FUIChartFloorplanTableViewCell</code>.
/// Typically not used directly by developer.
/// <h2>Usage</h2>
/// \code
/// let view = FUIChartLegendView()
/// view.seriesTitles = ["2016", "2017"]
/// view.seriesColor = [UIColor.preferredFioriColor(forStyle: .chart1), UIColor.preferredFioriColor(forStyle: .chart2)]
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// fdlFUIChartLegendView_seriesTitles {}
/// Supported properties:
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
SWIFT_CLASS("_TtC8SAPFiori18FUIChartLegendView")
@interface FUIChartLegendView : FUIDrawingView <UIGestureRecognizerDelegate>
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (void)didMoveToWindow;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
@end


/// Plot content view of Chart Floorplan, and related components.
/// <h2>Usage</h2>
/// \code
/// let view = FUIChartPlotView()
/// view.valuesAxisTitle.text = "Salesperson"
/// view.categoryAxisTitle.text = "Sum of Sales ($)"
/// view.chartView.categoryAxis.labelLayoutStyle = .range
/// view.chartView.dataSource = self
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// fdlFUIChartPlotView_valuesAxisTitle {}
/// fdlFUIChartPlotView_secondaryValuesAxisTitle {}
/// fdlFUIChartPlotView_categoryAxisTitle {}
/// Supported properties:
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
SWIFT_CLASS("_TtC8SAPFiori16FUIChartPlotView")
@interface FUIChartPlotView : FUIDrawingView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
@end


/// Summary content view of Chart Floorplan, and related components.
/// <h2>Data Source</h2>
/// Developer should implement <code>FUIChartSummaryDataSource</code> to supply a summary item when user selects a category in the <code>FUIChartFloorplan</code> views.
/// Often, the Developer will want to pin an ‘aggregate’ summary item to the left of the summary view, which might sum values for each series over the range of categories in the chart, display the macro trend, etc.  For this case, return an item for <code>categoryIndex == -1</code>.
/// <h2>Delegate</h2>
/// Developer may also optionally implement <code>FUIChartSummaryDelegate</code>, to handle user taps on summary items in the <code>FUIChartSummaryView</code>.  According to the design guidelines, this should typically drill-down into the data slice for the selected category(ies).
/// <h2>Usage</h2>
/// \code
/// let item = FUIChartSummaryItem()
///
/// // Category index `-1` used for 'aggregate' column.  True category indexes are requested by `dataSource`.
/// item.categoryIndex = -1
/// item.isEnabled = false
///
/// let values: [Double] = {
/// var values: [Double] = []
/// let seriesCount = chartData().count
///    for i in 0..<seriesCount {
///        values.append(chartData()[i].map({ $0 * 1000 }).suffix(from: 1).reduce(0, +))
///    }
///     return values
/// }()
///
/// item.valuesText = values.map { formattedTitleForDouble($0)! }
/// item.title.text = "TTM"
///
/// // If `chartView != nil`, supply an item to the `dataSource`.  Otherwise, add category index to selected set.
/// summaryView.addItem(at: item.category)
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIChartSummaryDelegate</code> is declared as a weak reference. So on deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori19FUIChartSummaryView")
@interface FUIChartSummaryView : FUIDrawingView
/// :nodoc:
- (void)drawRect:(CGRect)rect;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Title view component of <code>FUIChartTitleTableViewCell</code>, <code>FUIChartFloorplanView</code>, <code>FUIChartFloorplanViewController</code>, and <code>FUIChartFloorplanTableViewCell</code>.
/// Typically not used directly by developer.
/// <h2>Usage</h2>
/// \code
/// let view = FUIChartTitleView()
///
/// view.title.text = "Sum of Sales ($) by Month, Quarter, and Year"
/// view.subtitle.text = "2016-2017"
/// view.status.text = "Updated 3 hours ago"
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// \code
/// fdlFUIChartTitleView_title {}
/// fdlFUIChartTitleView_subtitle {}
/// fdlFUIChartTitleView_status {}
///
/// \endcodeSupported properties:
/// \code
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori17FUIChartTitleView")
@interface FUIChartTitleView : FUIDrawingView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// A UIView subclass that displays charts.
SWIFT_CLASS("_TtC8SAPFiori12FUIChartView")
@interface FUIChartView : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Nullable backgroundColor;
/// :nodoc:
@property (nonatomic, getter=isOpaque) BOOL opaque;
/// :nodoc:
- (void)didMoveToWindow;
@end






/// <code>FUICheckoutIndicatorView</code> is an IBDesignable UI component.
/// It uses two distinct states to display either a (download) progress or a <code>completed</code> status.
/// You can change between the displayed states by modifying the <code>displayState</code> property.
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let checkoutIndicatorView = FUICheckoutIndicatorView(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop a <code>UIView</code> component to Interface Builder’s canvas.
///   </li>
///   <li>
///     Switch custom class name from <code>UIView</code> to <code>FUICheckoutIndicatorView</code> and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Create an outlet of the FUICheckoutIndicatorView to be able to access its properties.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
/// // After the checkout indicator view is shown, you might want to start a lengthy (download or finalization) process e.g. synchronize data.
/// // Once this process is complete, change the displayState to .completed and hide the view when the completion handler is called:
/// checkoutIndicatorView.state = .completed {
///    self.checkoutIndicatorView.isHidden = true
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUICheckoutIndicatorView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori24FUICheckoutIndicatorView")
@interface FUICheckoutIndicatorView : NibDesignable
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
@end

@protocol MKAnnotation;

/// The <code>FUICircleAnnotationView</code> inherits from the <code>MKAnnotationView</code> and is presented as a circle annotation on the <code>MKMapView</code>. It is used to display annotation objects which have similar display effect as <code>MKCircle</code> object.
/// <blockquote>
/// <em>Note</em>
/// We disabled setter of <code>zPosition</code> to prevent it from being modified when setting <code>displayPriority</code>. Set <code>stickyZPosition</code> instead.
///
/// </blockquote>
/// <h2>Example</h2>
/// <ol>
///   <li>
///     Add annotation objects to map
///   </li>
/// </ol>
/// \code
/// let point1 = MKPointAnnotation()
/// point1.coordinate = CLLocationCoordinate2D(latitude: 37.3318, longitude: -122.0312)
/// let point2 = MKPointAnnotation()
/// point2.coordinate = CLLocationCoordinate2D(latitude: 37.3988313, longitude: -122.1487375)
/// let annotations = [point1 as MKAnnotation, point2 as MKAnnotation]
/// mapView.addAnnotations(annotations)
///
/// \endcode<ol>
///   <li>
///     Set the circle annotation view in the <code>mapView(_:viewFor:)</code> method.
///   </li>
/// </ol>
/// \code
/// let reuseIdentifier = "DefaultCircleAnnotationView"
/// let view = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier) as? FUICircleAnnotationView
/// ?? FUICircleAnnotationView(annotation: editAnnotation, reuseIdentifier: reuseIdentifier, clusteringIdentifier: nil)
/// view.outerColor = UIColor.preferredFioriColor(forStyle: .primary1)
/// view.outerWidth = 2.0
/// view.innerColor = UIColor.preferredFioriColor(forStyle: .tintColorTapState)
/// view.circleRadius = 6.0
/// return view
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori23FUICircleAnnotationView")
@interface FUICircleAnnotationView : MKAnnotationView
/// Restore all user-defined properties to default before resue.
- (void)prepareForReuse;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithAnnotation:(id <MKAnnotation> _Nullable)annotation reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUICircleAnnotationView (SWIFT_EXTENSION(SAPFiori))
/// Override the layer factory for this class to return a custom CALayer class.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) Class _Nonnull layerClass;)
+ (Class _Nonnull)layerClass SWIFT_WARN_UNUSED_RESULT;
@end


/// View component of <code>FUIImageCollectionViewCell</code>. Typically not used directly by developer.
/// <h2>Usage</h2>
/// \code
/// let itemView = FUIImageCollectionItemView()
/// itemView.detailImageView.image = UIImage(named: "profile")
/// // To enable a default gradient layer behind the placeholder text.
/// itemView.detailImageView.isGradientLayerEnabled = true
/// // Set placeholder text.
/// itemView.detailImageView.placeholder.text = "This is a placeholder"
/// itemView.detailImageViewSize = CGSize(width: 90, height: 90)
///
/// \endcode<h2>Theming</h2>
/// <code>nuiClass</code>:
/// \code
/// fdlFUIImageCollectionItemView {}
///
/// \endcodeSupported <code>IMAGE</code> class paths:
/// \code
/// fdlFUIImageCollectionItemView_detailImageView {}
///
/// \endcodeSupported <code>IMAGE</code> properties:
/// \code
/// tint-color: Color;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIImageCollectionItemView")
@interface FUIImageCollectionItemView : FUIDrawingView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// View component of <code>FUIItemCollectionViewCell</code>.  Typically not used directly by developer.
/// <h2>Usage</h2>
/// \code
/// let itemView = FUICollectionItemView()
/// itemView.detailImageView.image = UIImage(named: "profile")
/// itemView.detailImageViewSize = CGSize(width: 90, height: 90)
/// itemView.title.text = "Franck Syren"
/// itemView.subtitle.text = "Java Developer"
/// itemView.status.text = "Available"
///
/// \endcode<h2>Theming</h2>
/// <code>nuiClass</code>:
/// \code
/// fdlFUICollectionItemView {}
///
/// \endcodeSupported <code>TEXT</code> class paths:
/// \code
/// fdlFUICollectionItemView_title {}
/// fdlFUICollectionItemView_subtitle {}
/// fdlFUICollectionItemView_status {}
/// fdlFUICollectionItemView_placeholder {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
///
/// \endcodeSupported <code>IMAGE</code> class paths:
/// \code
/// fdlFUICollectionItemView_detailImageView {}
///
/// \endcodeSupported <code>IMAGE</code> properties:
/// \code
/// tint-color: Color;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUICollectionItemView")
@interface FUICollectionItemView : FUIImageCollectionItemView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UICollectionReusableView</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori35NibDesignableCollectionReusableView")
@interface NibDesignableCollectionReusableView : UICollectionReusableView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>UICollectionReusableView</code> supplementary view for headers and footers.  API matches that of <code>FUITableViewHeaderFooterView</code>, excluding <code>leading-</code> and <code>trailingPadding</code> properties.
/// The <code>FUICollectionSectionHeaderFooterView</code> has two style options:  <code>.title</code>, and <code>.attribute</code>.
/// In <code>.title</code> style, only the <code>titleLabel</code> is displayed.
/// In <code>.attribute</code> style, the <code>titleLabel</code> is displayed, and the <code>attributeLabel</code> may also be displayed.  Also, in <code>.attribute</code> style, the disclosure indicator is displayed by default.
/// To set background color, use <code>setBackgroundColor(_:)</code> instead of setting <code>backgroundColor</code> directly.
SWIFT_CLASS("_TtC8SAPFiori36FUICollectionSectionHeaderFooterView")
@interface FUICollectionSectionHeaderFooterView : NibDesignableCollectionReusableView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end

@class UICollectionView;

/// <code>UITableViewCell</code> subclass, containing a full-frame collectionView.  The <code>FUICollectionViewTableViewCell</code> will resize its height to accomodate all the items in collection view.
SWIFT_CLASS("_TtC8SAPFiori30FUICollectionViewTableViewCell")
@interface FUICollectionViewTableViewCell : NibDesignableFUIBaseTableViewCell
/// <code>UICollectionView</code> subclass, which covers the bounds of the cell.
@property (nonatomic, readonly, strong) IBOutlet UICollectionView * _Null_unspecified collectionView;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
@end

@class FUIImageView;
@class FUILabel;

/// <code>FUIContactCell</code> is a variant of <code>UITableViewCell</code> defined in SAPFiori. It contains a <code>UIImageView</code>, several <code>UILabel</code>s, and a <code>FUIActivityControl</code> component.
/// It supports three activity items by default. You can change this by setting <code>maxVisibleItems</code> on the <code>activityControl</code> property.
/// <img src="../ReadmeImages/ContactCellAnnotations.png?raw=true" alt="FUIContactCell"/>
/// <h2>Code usage:</h2>
/// \code
///
/// //Create a FUIContactCell in a TableView
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUIContactCell.reuseIdentifier) as! FUIContactCell
///     let activities: [ActivityItem] = [ActivityItem.phone, ActivityItem.message]
///     let contact = DataSource.contact[indexPath.row]
///     cell.detailImage = contact.image
/// // To enable a default gradient layer behind the placeholder text.
///      cell.detailImageView.isGradientLayerEnabled = true
/// // Set placeholder text.
///     cell.detailImageView.placeholder.text = "This is a placeholder"
///     cell.headlineText = contact.name
///     cell.subheadlineText = contact.title
///     cell.descriptionText = contact.address
///     cell.activityControl.addActivities(activities)
///
/// // Optionally, adjust activity item size (defaults to `CGSize(width: 25.0, height: 25.0)`)
///     self.activityControl.itemSize = CGSize(width: 25, height: 25)
/// // Optionally, adjust limit on visible items in activity control (defaults to `3`)
///     self.activityControl.maxVisibleItems = 3
/// // Optionally, adjust activity control spacing (defaults to `29.0`)
///     self.activityControl.stackView.spacing = 29.0
///
/// // Implement onActivitySelectedHandler.
///    cell.onActivitySelectedHandler = { activityItem in
///        
///        switch activityItem {
///        case ActivityItem.phone:
///            let _ = contact.call()
///        case ActivityItem.message:
///            let _ = contact.sendMessage()
///        case ActivityItem.videoCall:
///            let _ = contact.video()
///        default:
///            break
///        }
///    }
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIContactCell
/// fdlFUIContactCell_headlineLabel
/// fdlFUIContactCell_subheadlineLabel
/// fdlFUIContactCell_descriptionLabel
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori14FUIContactCell")
@interface FUIContactCell : NibDesignableFUIBaseTableViewCell
/// The FUIImageView holds a detail image.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified detailImageView;
/// The UILabel holds headline text.
@property (nonatomic, readonly, weak) IBOutlet FUILabel * _Null_unspecified headlineLabel;
/// The UILabel holds subheadline text.
@property (nonatomic, readonly, weak) IBOutlet FUILabel * _Null_unspecified subheadlineLabel;
/// The UILabel holds description text.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified descriptionLabel;
/// The FUIActivityControl object used in ContactCell.
@property (nonatomic, readonly, strong) IBOutlet FUIActivityControl * _Null_unspecified activityControl;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)layoutSubviews;
/// Text of headline label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable headlineText;
/// Text of subheadline label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subheadlineText;
/// Text of <code>descriptionLabel</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable descriptionText;
/// Image of ContactCell.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable detailImage;
/// Text of <code>tags</code> for IB display purpose only
@property (nonatomic, copy) IBInspectable NSString * _Nullable ibDisplayActivityControl;
/// :nodoc:
- (void)didMoveToWindow;
/// :nodoc:
- (void)prepareForReuse;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// A <code>UIViewController</code> containing a tableView of <code>FUIMapLegendItem</code>s.  This controller is intended to be presented within a <code>UIPopoverPresentationController</code>. It calculates its preferred content size based on the tableView’s content height and tableView’s content width between a maximum and minimum value.
/// <h2>Available in FUIMapLegend:</h2>
/// <ul>
///   <li>
///     <code>items</code>: an array of <code>FUIMapLegendItem</code> that will be displayed in the tableView.
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8SAPFiori28FUIResizablePopoverContainer")
@interface FUIResizablePopoverContainer : UIViewController
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// Returns the a <code>CGSize</code> considering the content’s height and the content’s width between the minimum of 150 and maximum of 550.  On iPhone, the width is the screen’s width.
@property (nonatomic) CGSize preferredContentSize;
@end

@class UITableView;

/// A view controller showing popover list for creating geometry in map view.
/// <h2>Usage</h2>
/// Initialize the popover content view controller.
/// \code
/// var popoverContent = FUICreateGeometryPopOverTableViewController()
///
/// \endcodeDefine selection behavior and do some setup for map legend items.
/// \code
/// @objc private func presentCreatePopover() {
///    popoverContent.items = createGeometryItems
///    popoverContent.modalPresentationStyle = .popover
///    let popover = popoverContent.popoverPresentationController
///    let createGeometryResultsController = CreateGeometryResultsController()
///    popoverContent.didSelectHandler = { [unowned self] createItem in
///        createGeometryResultsController.editingGeometryMapLegendItem = createItem
///        self.navigationController?.pushViewController(createGeometryResultsController, animated: true)
///    }
///    popover?.barButtonItem = plusBarButtonItem
///    self.present(popoverContent, animated: true, completion: nil)
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori43FUICreateGeometryPopOverTableViewController")
@interface FUICreateGeometryPopOverTableViewController : FUIResizablePopoverContainer <UITableViewDataSource, UITableViewDelegate>
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidDisappear:(BOOL)animated;
/// :nodoc:
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class UIDatePicker;

/// A <code>UITableViewCell</code> subclass, which allows a user to read or enter a value, using a date picker.
/// <img src="../ReadmeImages/FK_DatePickerCellAnnotations.png?raw=true" alt="FUIDatePickerFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property.
///   </li>
///   <li>
///     <code>value</code>: The value of the property, as <code>Date</code>
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value
///   </li>
/// </ul>
/// Optionally, UITableViewController could provide
/// <ul>
///   <li>
///     <code>dateFormatter</code>: A developer-defined <code>UIDateFormatter</code>, for transposing between <code>Date</code> type and <code>String</code>.
///   </li>
///   <li>
///     <code>datePickerMode</code>: The <code>UIDatePickerMode</code> for the date picker. Default is <code>.dateAndTime</code>. Note that <code>.countDownTimer</code> mode is not supported.  Use the <code>FUIDurationPickerFormCell</code> for duration values.
///   </li>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color setting:
/// Setting text color of filter buttons for a state using setTintColor(_:for:) api. Currently <code>.disabled</code>, <code>.normal</code> and <code>selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcodeThe following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
/// let dateFormatter = DateFormatter()
///
/// override func viewDidLoad() {
/// super.viewDidLoad()
///
/// dateFormatter.dateFormat = "dd-MM-yyyy"
/// self.tableView.register(FUIDatePickerFormCell.self, forCellReuseIdentifier: FUIDatePickerFormCell.reuseIdentifier)
/// // ...
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUIDatePickerFormCell.reuseIdentifier, for: indexPath) as! FUIDatePickerFormCell
/// cell.keyName = "End Date"
///
/// cell.dateFormatter = dateFormatter
/// cell.datePickerMode = .date
/// cell.value = cell.dateFormatter.date(from: myObject.endDate)   // "02-17-2017"
///
/// // MARK:  implement onChangeHandler
/// cell.onChangeHandler = { newValue in
/// myObject.endDate = cell.dateFormatter.string(from: newValue)
/// }
///
/// return cell
/// }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIDatePickerFormCell
/// fdlFUIDatePickerFormCell_keyLabel
/// fdlFUIDatePickerFormCell_valueLabel
/// fdlFUIDatePickerFormCell_selectedBackgroundView
/// fdlFUIDatePickerFormCell_valueLabel_selected
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori21FUIDatePickerFormCell")
@interface FUIDatePickerFormCell : FUIInlineValidationTableViewCell
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The UILabel that holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The UILabel that holds the value string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified valueLabel;
/// The key name of the property.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// The <code>UIDatePicker</code> for this cell.
/// It will be displayed only when this cell is selected.
@property (nonatomic, readonly, strong) UIDatePicker * _Nonnull datePicker;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end




/// This class is an implementation of <code>FUIAttachmentAction</code> to allow
/// user to choose a file using <code>UIDocumentPickerViewController</code> as an attachment in <code>FUIAttachmentsFormView</code>.
/// If the application wants to have its <code>Document</code> directory accessible by the <code>UIDocumentPickerViewController</code>,
/// the application needs to have the following 2 properties set to true in its plist:
/// <ul>
///   <li>
///     “Supports opening documents in place” (LSSupportsOpeningDocumentsInPlace)
///   </li>
///   <li>
///     “Application supports iTunes file sharing” (UIFileSharingEnabled)
///   </li>
/// </ul>
/// <h2>Note that the file URL returned by the document picker is a temporary url. The content of the file may not be available after the document picker is closed. Therefore, developer should copy the file content to a location that it may attach the file content later.</h2>
/// \code
///
/// class TestFormTableViewController: FUIFormTableViewController {
///     override func viewDidLoad() {
///         // ...
///
///         // prepare temporary directory to hold attachment files
///     }
///
///     // ...
///
///     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///         // ...
///
///         let cell = tableView.dequeueReusableCell(withIdentifier: FUIAttachmentsFormCell.reuseIdentifier, for: indexPath) as! FUIAttachmentsFormCell
///         cell.attachmentsController.delegate = self
///         cell.attachmentsController.dataSource = self
///         cell.attachmentsController.reloadData()
///
///         let documentPickerAction = FUIDocumentPickerAttachmentAction()
///         documentPickerAction.delegate = self
///         cell.attachmentsController.addAttachmentAction(documentPickerAction)
///
///         return cell
///     }
/// }
///
/// extension TestFormTableViewController: FUIDocumentPickerAttachmentActionDelegate {
///     var documentPicker: UIDocumentPickerViewController {
///       return UIDocumentPick  erViewController(documentTypes: ["public.data"], in: .import)
///     }
///
///     func documentPickerAttachmentAction(_ action: FUIDocumentPickerAttachmentAction, didPickFileAt url: URL) {
///         if let savedUrl = saveFileToTempFolder(url) {
///             self.addAttachmentURL(savedUrl)
///         }
///         self.tableView.reloadSections(IndexSet(integer:self.attachmentSection), with: .automatic)
///    }
/// }
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIDocumentPickerAttachmentActionDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori33FUIDocumentPickerAttachmentAction")
@interface FUIDocumentPickerAttachmentAction : NSObject
/// Returns a newly initialized <code>FUIDocumentPickerAttachmentAction</code>.
- (nonnull instancetype)init;
@end

@class UIDocumentPickerViewController;

@interface FUIDocumentPickerAttachmentAction (SWIFT_EXTENSION(SAPFiori)) <UIDocumentPickerDelegate>
/// :nodoc:
- (void)documentPicker:(UIDocumentPickerViewController * _Nonnull)controller didPickDocumentsAtURLs:(NSArray<NSURL *> * _Nonnull)urls;
/// :nodoc:
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController * _Nonnull)controller;
@end



/// A <code>UITableViewCell</code> subclass, which allows a user to read or enter a value, using a duration picker.
///  <img src="../ReadmeImages/FK_DurationPickerCellAnnotations.png?raw=true" alt="FUIDurationPickerFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property
///   </li>
///   <li>
///     <code>value</code>: The value of the property, as <code>TimeInterval</code>
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value
///   </li>
/// </ul>
/// Optionally, the developer may provide
/// <ul>
///   <li>
///     <code>minInterval</code>: The minute interval to be used in the picker.
///   </li>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color configuration:
/// Call setTintColor(_:for:) to configure tint color for disabled, normal, selected <code>UIControlState</code>. Setting <code>tintColor</code> is equivalent to call setTintColor(color, for: UIControlState.normal).
/// <ul>
///   <li>
///     disabled: Color to be used when control is disabled.
///   </li>
///   <li>
///     normal: Color to be used when control is enabled.
///   </li>
///   <li>
///     selected: Color to be used when control is selected.
///   </li>
/// </ul>
/// The following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
/// override func viewDidLoad() {
///     super.viewDidLoad()
///     self.tableView.register(FUIDurationPickerFormCell, forCellReuseIdentifier: FUIDurationPickerFormCell.reuseIdentifier)
///     // ...
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUIDurationPickerFormCell.reuseIdentifier, for: indexPath) as! FUIDurationPickerFormCell
///     cell.keyName = "Duration"
///     cell.value = myObject.eventDuration  // in seconds
///
///     // MARK:  implement an onChangeHandler
///     cell.onChangeHandler = { newValue in
///        myObject.eventDuration = newValue
///     }
///
///     return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIDurationPickerFormCell
/// fdlFUIDurationPickerFormCell_keyLabel
/// fdlFUIDurationPickerFormCell_valueLabel
/// fdlFUIDurationPickerFormCell_valueLabel_selected
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori25FUIDurationPickerFormCell")
@interface FUIDurationPickerFormCell : FUIInlineValidationTableViewCell
/// The UILabel holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The UILabel holds the selected value strings.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified valueLabel;
/// The <code>UIDatePicker</code> for this cell. It’s datePickerMode property is set to countDownTimer.
/// It will be displayed only when this cell is selected.
@property (nonatomic, readonly, weak) IBOutlet UIDatePicker * _Null_unspecified durationPicker;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The key name of the cell.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end




@interface FUIDurationPickerFormCell (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
@end


/// The <code>FUIDynamicAuthenticationScreen</code> is an <code>UIViewController</code> to display the screen to
/// prompt user to enter information needed for authentication.
/// It has a message label and a number of the input fields for user to enter information needed.
/// The input fields are configured using the <code>informationFields</code> property.
/// There is a ‘Cancel’ button on the navigation bar for user to cancel the authentication process.
/// There is also a ‘Done’ button on the navigation bar for user to submit the information. The <code>Done</code>
/// button is disabled until all the input fields are not empty.
/// Developer should implement <code>FUIDynamicAuthenticationDelegate</code> and set it to the
/// <code>delegate</code> property to handle user responses.
/// \code
///
/// var dynamicAuthenticationScreen: FUIDynamicAuthenticationScreen?
/// var completionBlock: ((_ errorMessage: String?) -> Void)?
///
/// func presentDynamicAuthenticationScreen() {
///     let controllers = FUIDynamicAuthenticationScreen.createInstanceFromStoryboard()
///     let dynamicAuthController = controllers.dynamicAuthenticationScreen
///
///     dynamicAuthController.informationFields = [
///         FUIAuthenticationInformationField(placeholder: "username", isSecureText: false, informationString: "Admin"),
///         FUIAuthenticationInformationField(placeholder: "password", isSecureText: true, informationString: nil),
///         FUIAuthenticationInformationField(placeholder: "url", isSecureText: false, informationString: nil),
///         FUIAuthenticationInformationField(placeholder: "test field", isSecureText: false, informationString: nil)
///     ]
///     dynamicAuthController.delegate = self
///
///     self.navigationController?.present(controllers.navigationController, animated: true, completion: nil)
/// }
///
/// func verify(_ controller: FUIDynamicAuthenticationScreen, informationStrings: [String], completion: @escaping ((_ errorMessage: String?) -> Void)) {
///     dynamicAuthenticationScreen = controller
///     completionBlock = completion
///
///     // Send information to server for verification here
///
///     // Simulate callback from verification process
///     DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
///         self.verificationDone()
///     }
/// }
///
/// func verificationDone() {
///     completionBlock?(verificationErrorMessage)
///     if verificationErrorMessage == nil {
///         dynamicAuthenticationScreen?.dismiss(animated: true, completion: nil)
///     }
/// }
///
/// func didCancel(_ controller: FUIBasicAuthenticationScreen) {
///    print("User Cancelled Basic Authentication")
///    controller.dismiss(animated: true, completion: nil)
/// }
///
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUIDynamicAuthenticationScreen_detailLabel {
/// font-color: @primary1;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_cancelButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_doneButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_messageBannerTitleLabel {
/// font-color: @primary7;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_messageBannerDividerTop {
/// background-color: @line;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_errorMessageBannerTitleLabel {
/// font-color: @negative;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_errorMessageBannerDividerTop {
/// background-color: @negative;
/// }
///
/// fdlFUIDynamicAuthenticationScreen_navigationBar {
/// background-color: clear;
/// background-tint-color: @tintColor;
/// bar-style: default;
/// }
///
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIDynamicAuthenticationDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori30FUIDynamicAuthenticationScreen")
@interface FUIDynamicAuthenticationScreen : FUIWelcomeController
/// The detail message label to display the message of this screen.
/// The default text of this label is
/// “Please provide the information below to start the activation process.”
/// from the localized strings files.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified detailLabel;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUIDynamicAuthenticationScreen (SWIFT_EXTENSION(SAPFiori)) <UITextFieldDelegate>
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)textFieldDidBeginEditing:(UITextField * _Nonnull)textField;
/// :nodoc:
- (BOOL)textField:(UITextField * _Nonnull)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
@end

@class UITextView;

/// This <code>UIViewController</code> is used to display the End User License Agreement, EULA.
/// There are two buttons on the tool bar at the bottom of the screen, “Agree” and “Disagree”, to choose to
/// confirm or reject the agreement. In addition, there is a “Cancel” button at the
/// left on the navigation bar.
/// Developer should provide the text for the <code>headlineLabel</code> property, the attributed text for the <code>eulaTextView</code> property,
/// and set the delegate property to handle user interactions.
/// \code
/// let eulaController = FUIEULAViewController.createInstanceFromStoryboard()
///
/// eulaController.headlineLabel.text = "CUSTOM EULA"
/// eulaController.eulaTextView.attributedText = NSAttributedString(string: "This is a legally binding agreement (\"Agreement\") between ...", attributes: [NSAttributedStringKey.font: UIFont(name: "Georgia", size: 24.0)!
/// ])
/// eulaController.delegate = self
///
/// let navController = UINavigationController.init(rootViewController: eulaController)
/// self.navigationController?.present(navController, animated: true, completion: nil)
///
///
/// \endcode<h2>Theming</h2>
/// \code
///
/// fdlFUIEULAView_headlineLabel {
/// font-size: 28;
/// font-name: thinSystem;
/// font-color: @primary1;
/// }
///
/// fdlFUIEULAView_confirmButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIEULAView_rejectButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIEULAView_cancelButton {
/// background-tint-color: @tintColorDark;
/// }
///
/// fdlFUIEULAView_navigationBar {
/// background-color: clear;
/// background-tint-color: @tintColor;
/// bar-style: default;
/// }
///
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIEULADelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori21FUIEULAViewController")
@interface FUIEULAViewController : FUIWelcomeController
/// The <code>UILabel</code> to hold the EULA title - Developer should set the text for this headline label.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified headlineLabel;
/// The <code>UITextView</code> to hold the EULA text - Developer should set the text using its <code>attributedText</code> property.
@property (nonatomic, readonly, weak) IBOutlet UITextView * _Null_unspecified eulaTextView;
/// The confirmation button - The default string is from localized strings file -
/// “Agree”.
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified confirmButton;
/// The confirmation button - The default string is from localized strings file -
/// “Disagree”.
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified rejectButton;
/// The cancel button.
/// This is configured as the iOS system “Cancel” bar button item.
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified cancelButton;
/// :nodoc:
@property (nonatomic, readonly, copy) NSArray<UIKeyCommand *> * _Nullable keyCommands;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

@class NSLayoutConstraint;

/// A simple UIView subclass to take email address as input.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIEmailInputView
/// fdlFUIEmailInputView_emailTextField
/// fdlFUIEmailInputView_bottomBorderView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori17FUIEmailInputView")
@interface FUIEmailInputView : NibDesignable <UITextFieldDelegate>
/// The text field of FUIEmailInputView.
@property (nonatomic, readonly, strong) IBInspectable IBOutlet FUIAutoResizingTextField * _Null_unspecified emailTextField;
/// The buttom padding height constraint from the bottom boarder to the view’s bottom.
/// Sets the constant property of this constraint to add padding at the bottom of this <code>FUIEmailInputView</code>.
/// The default constant property value is 0.
@property (nonatomic, readonly, strong) IBOutlet NSLayoutConstraint * _Null_unspecified bottomPaddingViewHeightConstraint;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT;
@end


/// <code>FUIFeedbackScreen</code> is an <code>UIViewController</code> used to display a feedback screen for the application.  The screen mainly displays feedback messages and a feedback action button.
/// <img src="../ReadmeImages/FUIFeedbackScreenAnnotations.png?raw=true" alt="FUIFeedbackScreen"/>
/// There are 4 <code>FUILabels</code> created for feedback messages.  They are <code>messageNameLabel</code>, <code>messageDetailLabel</code>, <code>messageEmphasisLabel</code>, and <code>messageFootnoteLabel</code>.  Since the screen is implemented based on the <code>FUIFeebackScreen</code> design spec with an action button and either a combination of <code>messageNameLabel</code> and <code>messageDetailLabel</code> and all 4 labels., it is expected that application sets label text to either <code>messageNameLabel</code> and <code>messageDetailLabel</code> only or all the 4 labels.
/// The action button, <code>messageActionButton</code>, has <code>Touch Up Inside</code> event hooked up with the <code>didTapActionButton</code> closure.  Application can implement <code>didTapActionButton</code> closure to perform desired tasks after the button is tapped.
/// <code>FUIFeedbackScreen</code> is implemented in <code>FUIFeedbackScreen.storyboard</code>.  There are two ways to launch the screen:
/// <ul>
///   <li>
///     Use another story board and using a “Present Modally” segue to <code>FUIFeedbackScreen</code> storyboard in SAPFiori framework bundle.
///     App programmer needs to provide the properties needed in <code>UIController</code>’s prepare for segue function:
///   </li>
/// </ul>
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
/// let vc = segue.destination as! FUIFeedbackScreen
///     vc.didTapActionButton = {
///     self.showAppMainView(vc)
/// }
/// vc.navigationItem.title = "Error"
/// //layout 1 that sets the 2 labels' text and the button
/// //vc.messageNameLabel.text = "Task does not exist"
/// //vc.messageDetailLabel.text = "Unable to save changes as the task does not exists."
/// //vc.messageActionButton.setTitle("Continue", for: .normal)
///
/// //layout 2 that sets all 4 labels' text and the button
/// vc.messageNameLabel.text = "Sign In Failed"
/// vc.messageDetailLabel.text = "You can try entering your passcode again in"
/// vc.messageEmphasisLabel.text = "5 minutes"
/// vc.messageFootnoteLabel.text = "Or reset your passcode by entering your credentials."
/// vc.messageActionButton.setTitle("Reset Passcode", for: .normal)
/// }
///
///
/// \endcode<ul>
///   <li>
///     Programmatically loads it:
///   </li>
/// </ul>
/// \code
///
/// let vc = FUIFeedbackScreen()
/// vc.didTapActionButton = {
/// self.showAppMainView(vc)
/// }
/// vc.navigationItem.title = "Error"
/// //layout 1 that sets the 2 labels' text and the button
/// //vc.messageNameLabel.text = "Task does not exist"
/// //vc.messageDetailLabel.text = "Unable to save changes as the task does not exists."
/// //vc.messageActionButton.setTitle("Continue", for: .normal)
///
/// //layout 2 that sets all 4 labels' text and the button
/// vc.messageNameLabel.text = "Sign In Failed"
/// vc.messageDetailLabel.text = "You can try entering your passcode again in"
/// vc.messageEmphasisLabel.text = "5 minutes"
/// vc.messageFootnoteLabel.text = "Or reset your passcode by entering your credentials."
/// vc.messageActionButton.setTitle("Reset Passcode", for: .normal)
///
///
/// \endcode<h2>Theming</h2>
/// Example nss definitions
/// \code
/// fdlFUIFeedbackScreen_messageNameLabel {
///     font-style: body;
///     font-color: @primary1;
/// }
///
/// fdlFUIFeedbackScreen_messageDetailLabel {
///     font-style: subheadline;
///     font-color: @primary1;
/// }
///
///
/// fdlFUIFeedbackScreen_messageEmphasisLabel {
///     font-size: 17;
///     font-name: boldSystem;
///     font-color: @primary1;
/// }
///
/// fdlFUIFeedbackScreen_messageFootnoteLabel {
///     font-style: subheadline;
///     font-color: @primary1;
/// }
///
/// fdlFUIFeedbackScreen_messageActionButton {
///     font-style: callout;
///     font-color: @primary6;
///     corner-radius: 8;
///     background-color-normal: @tintColorDark;
///     background-color-highlighted: @backgroundGradientTop;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori17FUIFeedbackScreen")
@interface FUIFeedbackScreen : UIViewController
/// A message name label displayed as the first label on the screen
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified messageNameLabel;
/// A message detail label displayed below <code>messageNameLabel</code>
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified messageDetailLabel;
/// A message detail label displayed below <code>messageDetailLabel</code>
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified messageEmphasisLabel;
/// A message detail label displayed below <code>messageEmphasisLabel</code>
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified messageFootnoteLabel;
/// The only action button on the screen.  Tapping this button can execute the block of code implemented in <code>didTapActionButton</code> closure by the application.
@property (nonatomic, readonly, strong) IBOutlet FUIOnboardingButton * _Null_unspecified messageActionButton;
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
- (void)updateViewConstraints;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIFilterFeedbackControl</code> provides an easy way for programmers to represent a list
/// of applied filters.
/// This <code>FUIFilterFeedbackControl</code> usually appears at the top of the screen above a UITableView.
/// Although you can set this view to any height, it is recommended to set the height of this cell to <code>CGFloat(44)</code>.
/// And set its height constraint to the same value.
/// Developers can use in Interface Builder by adding a UIView to their storyboard or XIB, then setting its class to <code>FUIFilterFeedbackControl</code>.
/// Then set the <code>filterGroups</code>, and <code>filterResultsUpdater</code> properties.
/// \code
/// @IBOutlet var filterFeedbackControl: FUIFilterFeedbackControl!
///
/// // ...
///
/// var sortGroup = FUIFilterGroup()
/// var mileGroup = FUIFilterGroup()
/// var nearGroup = FUIFilterGroup()
///
/// override func viewDidLoad() {
/// super.viewDidLoad()
///
/// let sortDistanceItem = FUIFilterItem("Sort: Distance", isFavorite: false, isActive: true)
/// let sortPriceItem = FUIFilterItem("Sort: Price", isFavorite: false, isActive: false)
/// let sortRatingsItem = FUIFilterItem("Sort: Ratings", isFavorite: false, isActive: false)
/// let sortAvailabilityItem = FUIFilterItem("Sort: Availability", isFavorite: false, isActive: false)
///
/// let mile1Item = FUIFilterItem("0.1 mi", isFavorite: true, isActive: false)
/// let mile2Item = FUIFilterItem("0.2 mi", isFavorite: true, isActive: false)
/// let mile3Item = FUIFilterItem("0.3 mi", isFavorite: true, isActive: false)
/// let mile4Item = FUIFilterItem("0.4 mi", isFavorite: true, isActive: true)
///
/// sortGroup.items = [sortDistanceItem, sortPriceItem, sortRatingsItem, sortAvailabilityItem]
/// sortGroup.allowsEmptySelection = false
/// sortGroup.isMutuallyExclusive = true
///
/// mileGroup.items = [mile1Item, mile2Item, mile3Item, mile4Item]
/// mileGroup.allowsEmptySelection = true
/// mileGroup.isMutuallyExclusive = true
///
/// let nearGasItem = FUIFilterItem("Nearby Gas", isFavorite: true, isActive: false)
/// let nearCoffeeItem = FUIFilterItem("Nearby Coffee", isFavorite: true, isActive: false)
/// let nearRestaurantsItem = FUIFilterItem("Nearby Restaurants", isFavorite: true, isActive: false)
///
/// nearGroup.items = [nearGasItem, nearCoffeeItem, nearRestaurantsItem]
/// nearGroup.allowsEmptySelection = true
/// nearGroup.isMutuallyExclusive = false
///
/// filterFeedbackControl.filterGroups = [sortGroup, mileGroup, nearGroup]
/// filterFeedbackControl.filterResultsUpdater = self
///
/// // ...
/// }
///
/// func updateFilterResults(for filterFeedbackControl: FUIFilterFeedbackControl) {
/// let effectiveItems = filterFeedbackControl.filterItems
///
/// // ...
/// }
///
/// \endcode<h2>Theming</h2>
/// <code>FUIFilterFeedbackControl</code> is using a list of <code>SegmentedControl</code> componentes.
/// Therefore, theming of <code>FUIFilterFeedbackControl</code> should be using the <code>SegmentedControl</code> theming elements.
/// \code
///
/// fdlSegmentedControl_item_contentView {
/// border-color: @primary4;
/// }
///
/// fdlSegmentedControl_item_titleLabel {
/// font-color: @primary2;
/// }
///
/// fdlSegmentedControl_item_contentView_selected {
/// border-color: @tintColorDark;
/// }
///
/// fdlSegmentedControl_item_titleLabel_selected {
/// font-color: @tintColorDark;
/// }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// // Customize border color
/// fdlFUIFilterFeedbackControl_lineView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori24FUIFilterFeedbackControl")
@interface FUIFilterFeedbackControl : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
@end

@class UICollectionViewLayout;

/// A <code>UITableViewCell</code> subclass, which allows a user to read or enter a set of values, using a grid of buttons.  Commonly used for composing filters.
///  <img src="../ReadmeImages/FK_FilterCellAnnotations.png?raw=true" alt="FUIFilterFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property.
///   </li>
///   <li>
///     <code>value</code>: An array of the selected indexes in the control.  Uses the same index as the <code>valueOptions</code> array.
///   </li>
///   <li>
///     `valueOptions: A String array, of titles for the buttons in the control
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value
///   </li>
/// </ul>
/// Optionally, the developer may provide
/// <ul>
///   <li>
///     <code>allowsMultipleSelection</code>: Indicates if multiple buttons may be selected simultaneously (<code>true</code>).  If <code>false</code>, the control behaves in “radio” mode.  Defaults to <code>true</code>.
///   </li>
///   <li>
///     <code>allowsEmptySelection</code>: Indicates if the control allows zero items to be selected (<code>true</code>).  If false, then once a value has been selected by the developer or user, taps by the user on the last selected item will be ignored, instead of de-selecting the item.  Defaults to <code>true</code>.
///   </li>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color setting:
/// Setting text color of filter buttons for a state using setTintColor(_:for:) api. Currently <code>disabled</code>, <code>normal</code> and <code>selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcodeThe following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
///  // optionally, create an array of value option to localized string mappings
///   let buttonTitles: [[String: String]] = [["radius": "Distance"], ["price": "Price"], ["rating": "Ratings"], ["avail": "Availability"]]
///
///  // Register FUIFilterFormCell in viewDidLoad() method in the controller.
///  override func viewDidLoad() {
///      super.viewDidLoad()
///      self.tableView.register(FUIFilterFormCell.self, forCellReuseIdentifier: FUIFilterFormCell.reuseIdentifier)
///  }
///
///  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///      let cell = tableView.dequeueReusableCell(withIdentifier: FUIFilterFormCell.reuseIdentifier, for: indexPath) as! FUIFilterFormCell
///  
///      cell.valueOptions = buttonTitles.flatMap { $0.map { $0.value }}
///      cell.keyName = "Sort By"
///      cell.value = [1]
///      cell.allowsMultipleSelection = true
///      cell.allowsEmptySelection = false
///  
///      // MARK:  implement onChangeHandler
///      cell.onChangeHandler = { [weak self] newValue in
///         self.applyFilter(forDimensions: newValue)      // here, the cell input is set to a filter function
///      }
///
///     return cell
///  }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIFilterFormCell
/// fdlFUIFilterFormCell_keyLabel
/// fdlFUIFilterFormCell_item_contentView
/// fdlFUIFilterFormCell_item_titleLabel
/// fdlFUIFilterFormCell_item_contentView_selected
/// fdlFUIFilterFormCell_item_titleLabel_selected
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori17FUIFilterFormCell")
@interface FUIFilterFormCell : FUIInlineValidationTableViewCell <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
/// The array of the valid options.
/// note:
/// Setting this property will be ignored when property <code>filterGroup</code> is not <code>nil</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull valueOptions;
/// The UILabel holds the key name string.
@property (nonatomic, readonly, weak) IBInspectable IBOutlet UILabel * _Null_unspecified keyLabel;
/// The collection view containing items to be displayed.
@property (nonatomic, readonly, weak) IBOutlet UICollectionView * _Null_unspecified collectionView;
/// :nodoc:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView * _Nonnull)collectionView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (CGSize)collectionView:(UICollectionView * _Nonnull)collectionView layout:(UICollectionViewLayout * _Nonnull)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (BOOL)collectionView:(UICollectionView * _Nonnull)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated;
/// :nodoc:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class UIScrollView;

/// When <code>FUIFormCell</code>s are to be used in an application, application’s implementation of
/// <code>UITableViewController</code> that hosts these <code>FUIFormCell</code>s must be a subclass of this
/// <code>FUIFormTableViewController</code>. <code>FUIFormTableViewController</code> hides all the complications
/// and interactions for handling all different types of <code>FUIFormCell</code>s.
/// Application’s implementation of the <code>UITableViewController</code> needs to only
/// implement the following functions:
/// \code
///
/// class FormCellTestTVC: FUIFormTableViewController {
///    override func viewDidLoad() {
///        // MUST: Call viewDidLoad function of super class.
///        super.viewDidLoad()
///
///        // Register FUIFormCells that will be used
///        self.tableView.register(FUITitleFormCell.self, forCellReuseIdentifier: FUITitleFormCell.reuseIdentifier)
///        ...
///    }
///
///    override func numberOfSections(in tableView: UITableView) -> Int {
///        // Return how many section in the table
///        return ...
///    }
///
///    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
///        // Return number of rows in each section
///        ...
///    }
///
///    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///        // Return the cell to be used at the IndexPath specified
///        let cell = tableView.dequeueReusableCell(withIdentifier: FUITitleFormCell.reuseIdentifier, for: indexPath) as! FUITitleFormCell
///        cell.value = "Work Request"
///
///        cell.isEditable = true
///        // MARK:  implement onChangeHandler
///        cell.onChangeHandler = { newValue in
///            myObject.title = newValue
///        }
///        return cell
///    }
///
///
/// \endcodeIn addition, if there are some other actions on the table view, it is required that
/// the action functions should also call function <code>endEditing</code> of the table view with the
/// <code>force</code> parameter to <code>true</code> so that all
/// editing cells have its onChangeHandler called. For example, the function didSaveTapped
/// below is the action when the “Save” button tapped:
/// \code
///    @IBAction func didSaveTapped(_ sender: AnyObject) {
///        self.tableView.endEditing(true)
///
///        // save object ...
///    }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIFormTableViewController")
@interface FUIFormTableViewController : UITableViewController
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView willDisplayCell:(UITableViewCell * _Nonnull)cell forRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (CGFloat)tableView:(UITableView * _Nonnull)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
- (void)scrollViewWillBeginDragging:(UIScrollView * _Nonnull)scrollView;
@end


/// <code>FUIImageView</code> is an enhanced Fiori style <code>UIImageView</code> that provides the option of applying a circular mask to the view’s <code>image</code> property. The view also exposes properties for specifying the width and color of an optional border around the image.
/// remark:
///
/// Implements <code>@IBDesignable</code>
/// <h2>Usage</h2>
/// <ul>
///   <li>
///     Initializing programmatically:
///   </li>
/// </ul>
/// \code
/// let imageView = FUIImageView(image: UIImage(named: "myProfilePic"))
/// //set image view to be circular
/// imageView.isCircular = true
///
/// // To enable a default gradient layer behind the placehoder text
/// imageView.isGradientLayerEnabled = true
///
/// // Set placeholder text
/// imageView.placeholder.text = "This is a placehoder"
///
/// // Set placeholder background color
/// imageView.placeholderBackgroundColor = UIColor.white
///
/// \endcode<ul>
///   <li>
///     Placing inside a Storyboard or xib:
///   </li>
/// </ul>
/// <ol>
///   <li>
///     Drag and drop an <code>UIImageView</code> component to Interface Builder canvas.
///   </li>
///   <li>
///     Switch class name from  <code>UIImageView</code> to <code>FUIImageView', and set module to </code>SAPFiori`.
///   </li>
///   <li>
///     To apply, set <code>@IBInspectable</code> property <code>isCircular</code>, to <code>true</code>
///   </li>
/// </ol>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori12FUIImageView")
@interface FUIImageView : UIImageView
/// :nodoc:
@property (nonatomic, strong) UIImage * _Nullable image;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
/// Override of <code>backgroundColor</code>, which prevents the <code>alpha</code> level of the <code>cgColor</code> from being set to <code>0</code>.
/// This enables the background color to remain constant when the <code>FUIImageView</code> is a subview of
/// the <code>contentView</code> of a <code>UITableViewCell</code>, when the cell is tapped.
/// This makes it much more convenient to produce solid color profile images, when setting the <code>tintColor</code>
/// of the view to <code>.white</code>, and using <code>isCircular = true</code>.
/// <em>Example:</em>
/// \code
/// let cell = FUIObjectTableViewCell(/*...*/)
/// cell.detailImageView.image = FUIIconLibrary.map.marker.asset.withRenderingMode(.alwaysTemplate)
/// cell.detailImageView.backgroundColor = UIColor.blue
/// cell.detailImageView.tintColor = UIColor.white
/// cell.detailImageView.isCircular = true
///
/// \endcode
@property (nonatomic, strong) UIColor * _Nullable backgroundColor;
/// Override intrinsicContentSize to provide a default image size for Auto Layout
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image highlightedImage:(UIImage * _Nullable)highlightedImage OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Property defining the circular type of the image view.  Default is false, which has no ciruclar mask to the image
@property (nonatomic) IBInspectable BOOL isCircular;
/// Property defining the border color.
@property (nonatomic, strong) IBInspectable UIColor * _Nullable borderColor;
/// Property defining the border width. A width of 0.0 will
/// result in no border being shown.
@property (nonatomic) IBInspectable CGFloat borderWidth;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForFirstBaselineLayout;
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForLastBaselineLayout;
@end


/// The <code>FUIGridRowImageItem</code> is a subclass of <code>FUIImageView</code> which conforms to <code>FUIGridRowItem</code> protocol for representing a image item in <code>FUIGridTableViewCell</code>.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIGridRowImageItem
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori19FUIGridRowImageItem")
@interface FUIGridRowImageItem : FUIImageView
/// :nodoc:
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
- (void)didMoveToSuperview;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image highlightedImage:(UIImage * _Nullable)highlightedImage SWIFT_UNAVAILABLE;
@end


/// <code>FUIGridTableViewHeaderFooterView</code> is a FIori UI component that extends <code>UITableViewHeaderFooterView</code> for showing a list of <code>FUIGridRowItem</code> column titles. It will display as a section header or footer in table view.
/// Columns widths may be specified in absolute points, or as a set of fractions in <code>0.0..<1</code>.  A developer may also designate one column for flexible width, by assigning the value <code>-1</code> to that column width.
/// remark:
/// Developers should always use the same column widths or percents for all headers, footers and rows in a grid.  Developers should also set common accessory types to rows, headers and footers.
/// The <code>FUIGridTableViewHeaderFooterView</code> is adaptive for <code>regular</code> and <code>compact</code> horizontal content modes.  <em>It is hidden by design, when in <code>compact</code> mode.</em>  The AutoLayout automatic dimension technique should be used for computing the height.
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// override open func viewDidLoad() {
/// super.viewDidLoad()
/// tableView.sectionHeaderHeight = UITableViewAutomaticDimension
/// tableView.estimatedSectionHeaderHeight = 100
/// tableView.register(FUIGridTableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: FUIGridTableViewHeaderFooterView.reuseIdentifier)
/// }
///
/// \endcode<h2>Override <code>tableView(_: viewForHeaderInSection:)</code> dataSource method and configure header.</h2>
/// \code
/// // header data list
/// var headerData: [FUIGridRowItem] {
/// let item0 = FUIGridRowHeaderItem(text: " ")
/// let item1 = FUIGridRowHeaderItem(text: "Symbol")
/// let item2 = FUIGridRowHeaderItem(text: "Open")
/// let item3 = FUIGridRowHeaderItem(text: "High")
/// let item4 = FUIGridRowHeaderItem(text: "Low")
/// let item5 = FUIGridRowHeaderItem(text: "Close")
/// return [item0, item1, item2, item3, item4, item5]
/// }
///
/// // set column widths.  Should be shared by rows and header.
/// let columnWidths = [-1, 0.2, 0.1, 0.1, 0.1, 0.1]
///
/// // configure header view
/// header.items = headerData
/// header.columnWidthPercent = columnWidths
/// header.accessoryType = .disclosureIndicator // match row cell accessory types!
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori32FUIGridTableViewHeaderFooterView")
@interface FUIGridTableViewHeaderFooterView : FUIBaseTableViewHeaderFooterView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
/// Type of the accessory view.
@property (nonatomic) IBInspectable UITableViewCellAccessoryType accessoryType;
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIGridTableViewHeader</code> is a FIori UI component that extends <code>UITableViewHeaderFooterView</code> for showing a list of <code>FUIGridRowItem</code> column titles. It will display as a section header in table view.
/// Columns widths may be specified in absolute points, or as a set of fractions in <code>0.0..<1</code>.  A developer may also designate one column for flexible width, by assigning the value <code>-1</code> to that column width.
/// remark:
/// Developers should always use the same column widths or percents for all headers, footers and rows in a grid.  Developers should also set common accessory types to rows, headers and footers.
/// The <code>FUIGridTableViewHeader</code> is adaptive for <code>regular</code> and <code>compact</code> horizontal content modes.  <em>It is hidden by design, when in <code>compact</code> mode.</em>  The AutoLayout automatic dimension technique should be used for computing the header height.
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// override open func viewDidLoad() {
/// super.viewDidLoad()
/// tableView.sectionHeaderHeight = UITableViewAutomaticDimension
/// tableView.estimatedSectionHeaderHeight = 100
/// tableView.register(FUIGridTableViewHeader.self, forHeaderFooterViewReuseIdentifier: FUIGridTableViewHeader.reuseIdentifier)
/// }
///
/// \endcode<h2>Override <code>tableView(_: viewForHeaderInSection:)</code> dataSource method and configure header.</h2>
/// \code
/// // header data list
/// var headerData: [FUIGridRowItem] {
/// let item0 = FUIGridRowHeaderItem(text: " ")
/// let item1 = FUIGridRowHeaderItem(text: "Symbol")
/// let item2 = FUIGridRowHeaderItem(text: "Open")
/// let item3 = FUIGridRowHeaderItem(text: "High")
/// let item4 = FUIGridRowHeaderItem(text: "Low")
/// let item5 = FUIGridRowHeaderItem(text: "Close")
/// return [item0, item1, item2, item3, item4, item5]
/// }
///
/// // set column widths.  Should be shared by rows and header.
/// let columnWidths = [-1, 0.2, 0.1, 0.1, 0.1, 0.1]
///
/// // configure header view
/// header.items = headerData
/// header.columnWidthPercent = columnWidths
/// header.accessoryType = .disclosureIndicator // match row cell accessory types!
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori22FUIGridTableViewHeader")
@interface FUIGridTableViewHeader : FUIGridTableViewHeaderFooterView
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end



/// <code>FUIGridTableViewSummaryFooter</code> is a Fiori UI component that extends <code>UITableViewHeaderFooterView</code> for showing a list of <code>FUIGridRowItem</code> column titles. It displays as a section footer in table view.
/// Columns widths may be specified in absolute points, or as a set of fractions in <code>0.0..<1</code>.  A developer may also designate one column for flexible width, by assigning the value <code>-1</code> to that column width.
/// remark:
/// Developers should always use the same column widths or percents for all headers, footers and rows in a grid.  Developers should also set common accessory types to rows, headers and footers.
/// The <code>FUIGridTableViewSummaryFooter</code> is adaptive for <code>regular</code> and <code>compact</code> horizontal content modes.  <em>It is hidden by design, when in <code>compact</code> mode.</em>  The AutoLayout automatic dimension technique should be used for computing the footer height.
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// override open func viewDidLoad() {
/// super.viewDidLoad()
/// tableView.sectionFooterHeight = UITableViewAutomaticDimension
/// tableView.estimatedSectionFooterHeight = 100
/// tableView.register(FUIGridTableViewSummaryFooter.self, forHeaderFooterViewReuseIdentifier: FUIGridTableViewSummaryFooter.reuseIdentifier)
/// }
///
/// \endcode<h2>Override <code>tableView(_: viewForFooterInSection:)</code> dataSource method and configure header.</h2>
/// \code
/// // header data list
/// var footerData: [FUIGridRowItem] {
/// let item0 = FUIGridRowSummaryItem(text: "Total")
/// let item1 = FUIGridRowSummaryItem(text: "10")
/// let item2 = FUIGridRowSummaryItem(text: "10")
/// let item3 = FUIGridRowSummaryItem(text: "10")
/// let item4 = FUIGridRowSummaryItem(text: "10")
/// let item5 = FUIGridRowSummaryItem(text: "10")
/// return [item0, item1, item2, item3, item4, item5]
/// }
///
/// // set column widths.  Should be shared by rows and header.
/// let columnWidths = [-1, 0.2, 0.1, 0.1, 0.1, 0.1]
///
/// // configure header view
/// footer.items = headerData
/// footer.columnWidthPercent = columnWidths
/// footer.accessoryType = .disclosureIndicator // match row cell accessory types!
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori29FUIGridTableViewSummaryFooter")
@interface FUIGridTableViewSummaryFooter : FUIGridTableViewHeaderFooterView
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end

@class UICollectionViewLayoutAttributes;
@class UICollectionViewLayoutInvalidationContext;
@class UICollectionViewUpdateItem;

/// A concrete layout class that manages the layout of hierarchy view.
/// This layout organizes items into different columns from left to right (right to left if in opposite layout direction) where items in one column happens to be the children of expanded item in the previous column. This layout is specially designed for hierarchy view so it is supposed to be used along with hierarchy view.
SWIFT_CLASS("_TtC8SAPFiori32FUIHierarchyCollectionViewLayout")
@interface FUIHierarchyCollectionViewLayout : UICollectionViewLayout <UIScrollViewDelegate>
/// :nodoc:
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) Class _Nonnull invalidationContextClass;)
+ (Class _Nonnull)invalidationContextClass SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) BOOL flipsHorizontallyInOppositeLayoutDirection;
/// :nodoc:
- (void)prepareLayout;
/// :nodoc:
@property (nonatomic, readonly) CGSize collectionViewContentSize;
/// :nodoc:
- (NSArray<UICollectionViewLayoutAttributes *> * _Nullable)layoutAttributesForElementsInRect:(CGRect)rect SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewLayoutAttributes * _Nullable)layoutAttributesForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewLayoutAttributes * _Nullable)layoutAttributesForDecorationViewOfKind:(NSString * _Nonnull)elementKind atIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)invalidateLayoutWithContext:(UICollectionViewLayoutInvalidationContext * _Nonnull)context;
/// :nodoc:
- (UICollectionViewLayoutInvalidationContext * _Nonnull)invalidationContextForPreferredLayoutAttributes:(UICollectionViewLayoutAttributes * _Nonnull)preferredAttributes withOriginalAttributes:(UICollectionViewLayoutAttributes * _Nonnull)originalAttributes SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)shouldInvalidateLayoutForPreferredLayoutAttributes:(UICollectionViewLayoutAttributes * _Nonnull)preferredAttributes withOriginalAttributes:(UICollectionViewLayoutAttributes * _Nonnull)originalAttributes SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForCollectionViewUpdates:(NSArray<UICollectionViewUpdateItem *> * _Nonnull)updateItems;
/// :nodoc:
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView;
@end




/// A view that manages a collection of items in a multi-column layout.
/// <h3>Initial loading process:</h3>
/// <ol>
///   <li>
///     Hierarchy view asks data source for a root item and put it in the first column. Hierarchy view will be empty if <code>nil</code> is returned for root. If so, hierarchy view finishes loading.
///   </li>
///   <li>
///     Hierarchy view asks data source for number of children of the root and get each child item iteratively.
///   </li>
///   <li>
///     Hierarchy view asks data source for the parent of root item. If that parent exists, insert it into preview column before the root.
///   </li>
/// </ol>
/// <img src="../ReadmeImages/HierarchyView_Initial_Loading.png?raw=true" alt="HierarchyView"/>
/// <h3>Interaction behavior:</h3>
/// <h2>Expand children</h2>
/// Tap on the hierarchy accessory view will drill down one level in the hierarchy view to show the children of tapped item.
/// <img src="../ReadmeImages/HierarchyView_Expand_Children_Pad.gif?raw=true" alt="HierarchyView"/>
/// <img src="../ReadmeImages/HierarchyView_Expand_Children_Phone.gif?raw=true" alt="HierarchyView"/>
/// <h2>Swipe</h2>
/// Quick swipe left/right to view the previous or next level in the hierarchy.
/// <img src="../ReadmeImages/HierarchyView_Swipe_Pad.gif?raw=true" alt="HierarchyView"/>
/// <img src="../ReadmeImages/HierarchyView_Swipe_Phone.gif?raw=true" alt="HierarchyView"/>
/// <h2>Pan</h2>
/// Pan left/right to navigate further in hierarchy view.
/// <img src="../ReadmeImages/HierarchyView_Pan_Pad.gif?raw=true" alt="HierarchyView"/>
/// <h3>Usage</h3>
/// Have your data source object conform to <code>FUIHierarchyViewDataSource</code> protocol and set it to hierarchy view’s <code>dataSource</code> property.
/// \code
/// class YourHierarchyViewDataSource: FUIHierarchyViewDataSource {}
///
/// hierarchyView.dataSource = YourHierarchyViewDataSource()
///
/// \endcodeRegister your custom cell if needed. Otherwise hierarchy view will use <code>FUIHierarchyCollectionItem</code> by default.
/// \code
/// hierarchyView.register(YourCustomCollectionViewCell.self, forCellWithReuseIdentifier: "ReuseIdentifierForYourCustomCell")
///
/// \endcodeImplement dataSource methods.
/// \code
/// // Define your data model.
/// var model = HierarchyViewModel()
///
/// func rootUUID(in hierarchyView: FUIHierarchyView) -> String? {
///     return model.rootObject?.uuid
/// }
///
/// func hierarchyView(_ hierarchyView: FUIHierarchyView, numberOfChildrenForItemWith uuid: String) -> Int {
///     guard let object = model.getObject(for: uuid) else {
///         preconditionFailure("Object with String: \(uuid) does not exsit in model")
///     }
///
///     if let children = object.children {
///         return children.count
///     }
///
///     // Get children asynchroniously if they haven't been loaded yet. When loading completes, cache those children for future access and insert children into hierarchy view by calling `insertChildren(of:at:)`.
///     object.asyncFetchChildren { children in
///         self.model.updateCache(objects: children)
///         self.hierarchyView.insertChildren(of: uuid, at: IndexSet(integersIn: 0..<children.count))
///     }
///
///     // Return zero children before children is loaded.
///     return 0
/// }
///
/// func hierarchyView(_ hierarchyView: FUIHierarchyView, uuidForChildItemAt index: Int, with parentUUID: String) -> String {
///     guard let parent = model.getObject(for: parentUUID) else {
///         preconditionFailure("Parent object with String: \(parentUUID) does not exsit")
///     }
///
///     guard let children = parent.children else {
///         preconditionFailure("Children of parent: \(parent) is not loaded yet")
///     }
///
///     return children[index].uuid
/// }
///
/// func hierarchyView(_ hierarchyView: FUIHierarchyView, parentForItemWith uuid: String) -> String? {
///     guard let object = model.getObject(for: uuid) else {
///         preconditionFailure("Object with String: \(uuid) does not exsit in model")
///     }
///
///     if let parent = object.parent {
///         return parent.uuid
///     }
///
///     // Get parent asynchronously if they haven't been loaded yet. When loading completes, cache the parent for future access and insert it into hierarchy view by calling `invalidateParent(of:)`.
///     object.asyncFetchParent { parent in
///         guard let parent = parent else {
///             return
///         }
///
///         self.model.updateCache(objects: [parent])
///         self.model.updateRootObject(newRootObject: parent)
///         self.hierarchyView.invalidateParent(of: uuid)
///     }
///
///     // Return nil before parent is loaded.
///     return nil
/// }
///
/// func hierarchyView(_ hierarchyView: FUIHierarchyView, cellForItemWith uuid: String) -> FUIHierarchyCollectionItem {
///     let cell = hierarchyView.dequeueReusableCell(withReuseIdentifier: “ReuseIdentifierForYourCustomCell”, with: uuid) as! YourCustomCollectionViewCell
///     guard let object = model.getObject(for: uuid) else {
///         return cell
///     }
///
///     cell.title.text = object.name
///     cell.subtitle.text = object.type
///     cell.body.text = object.location
///     cell.accessoryType = .disclosureIndicator
///     if object.numberOfChildren > 0 {
///         cell.isHierarchyButtonHidden = false
///         cell.hierarchyAttributeText = String(object.numberOfChildren)
///     }
///     else {
///         cell.isHierarchyButtonHidden = true
///     }
///
///     return cell
/// }
///
/// func hierarchyView(_ hierarchyView: FUIHierarchyView, titleForItemWith uuid: String) -> String? {
///     return model.getObject(for: uuid)?.name
/// }
///
/// \endcodeMake your delegate object conform to <code>FUIHierarchyViewDelegate</code> protocol and assign it to hierarchy view’s delegate property if needed.
/// \code
/// class YourHierarchyViewDelegate: FUIHierarchyViewDelegate {}
///
/// hierarchyView.delegate = YourHierarchyViewDelegate()
///
/// \endcode<h3>Theming</h3>
/// Supported class paths:
/// \code
/// fdlFUIHierarchyView {}
/// fdlFUIHierarchyView_header {}
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori16FUIHierarchyView")
@interface FUIHierarchyView : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)didMoveToSuperview;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)drawRect:(CGRect)rect;
@end




/// The FUIHierarchyViewDelegate protocol defines methods that allow you to manage the selection of items or tapping on hierarchy accessory view of collection item cell in a hierarchy view. The methods of this protocol are all optional.
SWIFT_PROTOCOL("_TtP8SAPFiori24FUIHierarchyViewDelegate_")
@protocol FUIHierarchyViewDelegate
@optional
/// Tells the delegate that hierarchy button of the item with the specified uuid was tapped.
/// \param hierarchyView The hierarchy view object that is notifying you of the action.
///
/// \param uuid The uuid of the item whose hierarchy button was tapped.
///
- (void)hierarchyView:(FUIHierarchyView * _Nonnull)hierarchyView hierarchyButtonTappedForItemWith:(NSString * _Nonnull)uuid;
/// Tells the delegate that the item with the specified uuid was selected.
/// \param hierarchyView The hierarchy view object that is notifying you of the action.
///
/// \param uuid The uuid of the item which was selected.
///
- (void)hierarchyView:(FUIHierarchyView * _Nonnull)hierarchyView didSelectItemWith:(NSString * _Nonnull)uuid;
@end


/// A view controller which specializes in managing a hierarchy view. When <code>FUIHierarchyViewController</code> initiates, it sets data source and delegate of hierarchy view to self.
/// <h3>Components</h3>
/// <ul>
///   <li>
///     hierarchyView
///   </li>
/// </ul>
/// <h3>Usage</h3>
/// Subclass <code>FUIHierarchyViewController</code> when you need to show a hierarchy view. It conforms to <code>FUIHierarchyViewDataSource</code> and <code>FUIHierarchyViewDelegate</code> by default.
/// \code
/// class MyController: FUIHierarchyViewController {}
///
/// \endcodeOverride <code>viewDidLoad</code> and do some setup here. You should register your custom cell if needed. Otherwise hierarchy view will use <code>FUIHierarchyCollectionItem</code> by default.
/// \code
/// override func viewDidLoad() {
///     super.viewDidLoad()
///     hierarchyView.register(YourCustomCollectionViewCell.self, forCellWithReuseIdentifier: "ReuseIdentifierForYourCustomCell")
///     // do more setup here.
/// }
///
/// \endcodeImplement dataSource and delegate methods
/// \code
///
/// // Define your data model.
/// var model = HierarchyViewModel()
///
/// override func rootUUID(in hierarchyView: FUIHierarchyView) -> String? {
///     return model.rootObject?.uuid
/// }
///
/// override func hierarchyView(_ hierarchyView: FUIHierarchyView, numberOfChildrenForItemWith uuid: String) -> Int {
///     guard let object = model.getObject(for: uuid) else {
///         preconditionFailure("Object with String: \(uuid) does not exsit in model")
///     }
///
///     if let children = object.children {
///         return children.count
///     }
///
///     // Get children asynchronously if they haven't been loaded yet. When loading completes, cache those children for future access and insert children into hierarchy view by calling `insertChildren(of:at:)`.
///     object.asyncFetchChildren { children in
///         self.model.updateCache(objects: children)
///         self.hierarchyView.insertChildren(of: uuid, at: IndexSet(integersIn: 0..<children.count))
///     }
///
///     // Return zero children before children is loaded.
///     return 0
/// }
///
/// override func hierarchyView(_ hierarchyView: FUIHierarchyView, uuidForChildItemAt index: Int, with parentUUID: String) -> String {
///     guard let parent = model.getObject(for: parentUUID) else {
///         preconditionFailure("Parent object with String: \(parentUUID) does not exsit")
///     }
///
///     guard let children = parent.children else {
///         preconditionFailure("Children of parent: \(parent) is not loaded yet")
///     }
///
///     return children[index].uuid
/// }
///
/// override func hierarchyView(_ hierarchyView: FUIHierarchyView, parentForItemWith uuid: String) -> String? {
///     guard let object = model.getObject(for: uuid) else {
///         preconditionFailure("Object with String: \(uuid) does not exsit in model")
///     }
///
///     if let parent = object.parent {
///         return parent.uuid
///     }
///
///     // Get parent asynchronously if they haven't been loaded yet. When loading completes, cache the parent for future access and insert it into hierarchy view by calling `invalidateParent(of:)`.
///     object.asyncFetchParent { parent in
///         guard let parent = parent else {
///             return
///         }
///
///         self.model.updateCache(objects: [parent])
///         self.model.updateRootObject(newRootObject: parent)
///         self.hierarchyView.invalidateParent(of: uuid)
///     }
///
///     // Return nil before parent is loaded.
///     return nil
/// }
///
/// override func hierarchyView(_ hierarchyView: FUIHierarchyView, cellForItemWith uuid: String) -> FUIHierarchyCollectionItem {
///     let cell = hierarchyView.dequeueReusableCell(withReuseIdentifier: “ReuseIdentifierForYourCustomCell”, with: uuid) as! YourCustomCollectionViewCell
///     guard let object = model.getObject(for: uuid) else {
///     return cell
///     }
///
///     cell.title.text = object.name
///     cell.subtitle.text = object.type
///     cell.body.text = object.location
///     cell.accessoryType = .disclosureIndicator
///     if object.numberOfChildren > 0 {
///         cell.isHierarchyButtonHidden = false
///         cell.hierarchyAttributeText = String(object.numberOfChildren)
///     }
///     else {
///         cell.isHierarchyButtonHidden = true
///     }
///
///     return cell
/// }
///
/// override func hierarchyView(_ hierarchyView: FUIHierarchyView, titleForItemWith uuid: String) -> String? {
///     return model.getObject(for: uuid)?.name
/// }
///
///
/// \endcode<h3>Theming</h3>
/// Supported class paths:
/// \code
/// fdlHierarchyViewController_hierarchyView {}
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIHierarchyViewController")
@interface FUIHierarchyViewController : UIViewController <FUIHierarchyViewDelegate>
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end





/// A header view sits at top of hierarchy view. Header label displays the title of the selected parent item in previous section. You can use left/right button to navigate back or forth in the hierarchy.
/// <h2>Theming</h2>
/// Supported class paths:
/// \code
/// fdlFUIHierarchyViewHeader {}
/// fdlFUIHierarchyViewHeader_title {}
/// fdlFUIHierarchyViewHeader_leftButton {}
/// fdlFUIHierarchyViewHeader_rightButton {}
///
/// \endcodePlease refer to <code>FUIButton</code> documentation for all supported attributes.
SWIFT_CLASS("_TtC8SAPFiori22FUIHierarchyViewHeader")
@interface FUIHierarchyViewHeader : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
@end


/// This layout extends <code>UICollectionViewFlowLayout</code>, by adding a new optional property:  <code>minimumScaledItemSize</code>, which enables the collection view cell items’ dimensions to be scaled upwards, to fill the width of the collection view’s <code>contentSize</code>.
/// The developer may allow the layout to scale any number of cell items to fit the <code>contentSize</code> width, or, may set a pre-determined number of items which ought to fit the <code>contentSize</code> width, by setting the <code>numberOfColumns</code> property.  This is useful, when the number of items rendered in the collection view vary on different screens, but a common size is desired.
/// This layout also controls the inter-item spacing, and line spacing, so that the <code>minimumInteritemSpacing</code> and <code>minimumLineSpacing</code> values provided by the developer are used precisely, rather than being adjusted by the AutoLayout engine.
/// Item will be scaled if you set following three properties(Set a number greater than zero to enable corresponding feature):
/// <ul>
///   <li>
///     estimatedItemSize: Scale item to the size provided by systemLayoutSizeFitting(_:).
///   </li>
///   <li>
///     numberOfColumns: Scale item based on the aspect ratio of <code>itemSize</code>.
///   </li>
///   <li>
///     minimumScaledItemSize: Scale item upwards to fill the row based on the aspect ratio of <code>minimumScaledItemSize</code>.
///   </li>
/// </ul>
/// Other configurations:
/// <ul>
///   <li>
///     isLayoutJustified: A boolean value indicating if adjusting inter-item spacing to make cells fit the full width.
///   </li>
///   <li>
///     numberOfRows: Max number of rows allowed. Default value is 0, which means there is no limit on number of rows.
///   </li>
///   <li>
///     isTopAligned: A boolean value indicating if items on the same row are top aligned.
///   </li>
/// </ul>
/// <h2>Code usage</h2>
/// <ol>
///   <li>
///     Assign an instance of FUIHorizontalScrollCollectionViewLayout to your collection view.
///   </li>
/// </ol>
/// \code
/// self.collectionView.collectionViewLayout = FUICollectionViewLayout.horizontalScroll
///
/// \endcode<ol>
///   <li>
///     Implement collectionView(_:cellForItemAt:) dataSource.
///   </li>
/// </ol>
/// \code
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
///     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUIObjectCollectionViewCell.reuseIdentifier, for: indexPath) as! FUIObjectCollectionViewCell  //You may use any type of collection view cell here.
///     //configue cell here
///     //...
///     return cell
/// }
///
/// \endcode<ol>
///   <li>
///     Implement following methods if you need section header/footer. You can also set headerReferenceHeight/footerReferenceHeight to apply same height for all headers/footers.
///   </li>
/// </ol>
/// \code
/// func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
///     let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath) as! FUICollectionSectionHeaderFooterView
///     //configue header/footer view here
///     //...
///     return view
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
///     switch section {
///     case 0:
///     return CGSize(width: 40, height: 40)
///     default:
///     return CGSize(width: 60, height: 60)
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
///     switch section {
///     case 0:
///     return CGSize(width: 40, height: 40)
///     default:
///     return CGSize(width: 60, height: 60)
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori37FUIHorizontalFlowCollectionViewLayout")
@interface FUIHorizontalFlowCollectionViewLayout : UICollectionViewFlowLayout
/// Scroll direction of the layout. Only vertical scroll is supported in FUIHorizontalFlowCollectionViewLayout.
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;
- (UICollectionViewLayoutAttributes * _Nullable)layoutAttributesForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSArray<UICollectionViewLayoutAttributes *> * _Nullable)layoutAttributesForElementsInRect:(CGRect)rect SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareLayout;
/// :nodoc:
@property (nonatomic, readonly) CGSize collectionViewContentSize;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)invalidateLayoutWithContext:(UICollectionViewLayoutInvalidationContext * _Nonnull)context;
@end


/// This layout should be used when the user should pan horizontally in the collection view, to view items off-screen to the left or right. Items in a section extend in a single row to infinity, so items will not wrap to new lines.
/// A developer should set the <code>itemSize</code> property of the layout, to specify the standard dimensions of the cell items.
/// <h2>Code usage</h2>
/// <ol>
///   <li>
///     Assign an instance of FUIHorizontalScrollCollectionViewLayout to your collection view.
///   </li>
/// </ol>
/// \code
/// self.collectionView.collectionViewLayout = FUICollectionViewLayout.horizontalScroll
///
/// \endcode<ol>
///   <li>
///     Implement collectionView(_:cellForItemAt:) dataSource.
///   </li>
/// </ol>
/// \code
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
///     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUIObjectCollectionViewCell.reuseIdentifier, for: indexPath) as! FUIObjectCollectionViewCell  //You may use any type of collection view cell here.
///     //configue cell here
///     //...
///     return cell
/// }
///
/// \endcode<ol>
///   <li>
///     Implement following methods if you need section header/footer. You can also set headerReferenceHeight/footerReferenceHeight to apply same height for all headers/footers.
///   </li>
/// </ol>
/// \code
/// func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
///     let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath) as! FUICollectionSectionHeaderFooterView
///     //configue header/footer view here
///     //...
///     return view
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
///     switch section {
///     case 0:
///     return CGSize(width: 40, height: 40)
///     default:
///     return CGSize(width: 60, height: 60)
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
///     switch section {
///     case 0:
///     return CGSize(width: 40, height: 40)
///     default:
///     return CGSize(width: 60, height: 60)
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori39FUIHorizontalScrollCollectionViewLayout")
@interface FUIHorizontalScrollCollectionViewLayout : UICollectionViewFlowLayout
/// FUIHorizontalScrollCollectionViewLayout only support horizontal scroll direction.
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;
/// :nodoc:
@property (nonatomic, readonly) BOOL flipsHorizontallyInOppositeLayoutDirection;
/// :nodoc:
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) Class _Nonnull invalidationContextClass;)
+ (Class _Nonnull)invalidationContextClass SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)shouldInvalidateLayoutForPreferredLayoutAttributes:(UICollectionViewLayoutAttributes * _Nonnull)preferredAttributes withOriginalAttributes:(UICollectionViewLayoutAttributes * _Nonnull)originalAttributes SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewLayoutInvalidationContext * _Nonnull)invalidationContextForBoundsChange:(CGRect)newBounds SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewLayoutInvalidationContext * _Nonnull)invalidationContextForPreferredLayoutAttributes:(UICollectionViewLayoutAttributes * _Nonnull)preferredAttributes withOriginalAttributes:(UICollectionViewLayoutAttributes * _Nonnull)originalAttributes SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)invalidateLayoutWithContext:(UICollectionViewLayoutInvalidationContext * _Nonnull)context;
/// :nodoc:
@property (nonatomic, readonly) CGSize collectionViewContentSize;
/// :nodoc:
- (UICollectionViewLayoutAttributes * _Nullable)layoutAttributesForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewLayoutAttributes * _Nullable)layoutAttributesForSupplementaryViewOfKind:(NSString * _Nonnull)elementKind atIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSArray<UICollectionViewLayoutAttributes *> * _Nullable)layoutAttributesForElementsInRect:(CGRect)rect SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareLayout;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// This layout is a variant of F<code>UIHorizontalScrollCollectionViewLayout</code>, which calculates cell size based on auto-resizing value returned from systemLayoutSizeFitting(_:). If all of your cells have the same size, use <code>FUIHorizontalScrollCollectionViewLayout</code> instead.
/// <h1>Code usage</h1>
/// <h2>Assign an instance of FUIHorizontalScrollDynamicSizeCollectionViewLayout to your collection view and do any configuration you need.</h2>
/// \code
/// let layout = FUICollectionViewLayout.horizontalScrollDynamicSize
/// self.collectionView.collectionViewLayout = layout
/// self.collectionView.register(FUICollectionItemCell.self, forCellWithReuseIdentifier: FUICollectionItemCell.reuseIdentifier)
///
/// \endcode<h2>Implement collectionView(_:cellForItemAt:) dataSource.</h2>
/// \code
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
/// let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUICollectionItemCell.reuseIdentifier, for: indexPath) as! FUICollectionItemCell  //You may use any type of collection view cell here.
/// //configue cell here
/// //...
/// return cell
/// }
///
/// \endcode<h2>Implement following methods if you need section header/footer. You can also set headerReferenceHeight/footerReferenceHeight to apply same height for all headers/footers.</h2>
/// \code
/// func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
/// let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath) as! FUICollectionSectionHeaderFooterView
/// //configue header/footer view here
/// //...
/// return view
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
/// switch section {
/// case 0:
/// return CGSize(width: 40, height: 40)
/// default:
/// return CGSize(width: 60, height: 60)
/// }
///
/// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
/// switch section {
/// case 0:
/// return CGSize(width: 40, height: 40)
/// default:
/// return CGSize(width: 60, height: 60)
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori50FUIHorizontalScrollDynamicSizeCollectionViewLayout") SWIFT_DEPRECATED_MSG("Use `FUIHorizontalScrollCollectionViewLayout` and set `estimatedItemSize` to a non-zero value to enable auto-sizing.")
@interface FUIHorizontalScrollDynamicSizeCollectionViewLayout : FUIHorizontalScrollCollectionViewLayout
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end











@class FUILoadingIndicatorView;
@class ASWebAuthenticationSession;

/// Multifunctional view for displaying Information or Splash screen.
/// The UI elements can be hidden or showed depending on functionality.
/// The text properties must be set before displaying the view.
/// <h2>Theming</h2>
/// Example nss definitions
/// \code
/// fdlFUIInfoViewScreen_titleTextView {
///    font-color:  @primary1;
///    placeholder-color: green;
/// }
///
/// fdlFUIInfoViewScreen_informationTextView {
///    font-color:  @primary1;
///    placeholder-color: green;
/// }
///
/// fdlFUIInfoViewScreen_primaryButton {
///    font-color: @primary1;
/// }
///
/// fdlFUIInfoViewScreen_secondaryButton {
///    font-color: @primary1;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUIInfoViewController")
@interface FUIInfoViewController : UIViewController <ASWebAuthenticationPresentationContextProviding>
/// Indicator view for presenting the process is in progress
@property (nonatomic, weak) IBOutlet FUILoadingIndicatorView * _Null_unspecified loadingIndicatorView;
/// Information text about the next process
@property (nonatomic, weak) IBOutlet UITextView * _Null_unspecified informationTextView;
/// Title text
@property (nonatomic, weak) IBOutlet UITextView * _Null_unspecified titleTextView;
/// Main button for primary action
@property (nonatomic, weak) IBOutlet FUIOnboardingButton * _Null_unspecified primaryButton;
/// Additional button for secondary action
@property (nonatomic, weak) IBOutlet FUIOnboardingButton * _Null_unspecified secondaryButton;
/// :nodoc:
- (void)viewDidLoad;
/// Notifies the view controller that its view is about to be added to a view hierarchy.
/// The <code>FUIProcessingIndicatorView</code> instance will be start animating
/// \param animated If true, the view is being added to the window using an animation.
///
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (ASPresentationAnchor _Nonnull)presentationAnchorForWebAuthenticationSession:(ASWebAuthenticationSession * _Nonnull)session SWIFT_WARN_UNUSED_RESULT SWIFT_AVAILABILITY(ios,introduced=13.0);
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end



/// FUIInlineValidationView is a <code>UIView</code> contains a <code>UILabel</code>. It is used by <code>FUIInlineValidationTableViewCell</code> as a validation view appearing at the bottom to show the validation message.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIInlineValidationView
/// fdlFUIInlineValidationView_titleLabel
/// fdlFUIInlineValidationView_separatorView
/// fdlFUIInlineValidationView_backgroundView
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori23FUIInlineValidationView")
@interface FUIInlineValidationView : NibDesignable
/// Background view of <code>FUIInlineValidationView</code>
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified backgroundView;
/// separator of <code>FUIInlineValidationView</code>. It is implemented as a <code>UIView</code>.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified separator;
/// A <code>UIlabel</code> holds the validation message.
@property (nonatomic, readonly, weak) IBOutlet FUILabel * _Null_unspecified titleLabel;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
@end


/// <code>UITableViewCell</code> containing a <code>UICollectionView</code>.
/// Takes responsibility for correct layout and sizing for the items, for different screen dimensions.
SWIFT_CLASS("_TtC8SAPFiori34FUIItemCollectionViewTableViewCell")
@interface FUIItemCollectionViewTableViewCell : FUIBaseCollectionViewTableViewCell
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)layoutMarginsDidChange;
/// :nodoc:
- (void)prepareForReuse;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIKPIHeader</code> extends <code>UIView</code> for a tableview header displaying KPI items, of type FUIKPIView and FUIKPIProgressView. A maximum of four KPI values can be displayed in the header, hence if more than four items are provided in the items array as input to the header, only the first four are diplayed and the rest of the items are ignored. When both FUIKPIView and FUIKPIProgressView items are provided, the items are sorted such that the FUIKPIProgressViews are displayed first, followed by the FUIKPIViews. Only FUIKPIProgessViews with chartSize of ‘large’can be displayed in the header , if an FUIProgressView of charSize  ‘small’is supplied, it is ignored. Based on the number of KPI items that can be shown based on the screen size, a page control is used to display multiple pages in the header, as required. The kpi items in the header can be enabled or disabled. The default KPI header background is of color scheme .dark, hence to display the kpi items with the appropriate tintColor as per the fiori design guidelines for iOS, it is required that the kpi items supplied to the header have a color scheme of .dark as well. The developer can choose to supply a custom tint color for the kpis. It is important to set the colorScheme of the kpi before the call to override the tintColor, as shown below.( since setting the colorScheme resets the tintColor to the defaults, if the calls are not in order, then the custom tintColors are not displayed.)
/// \code
///
/// kpiView.colorScheme = .dark
/// kpiView.setTintColor(.yellow, for: .normal)
///
///
/// \endcode<h2>Regular (Landscape) Horizontal Size Class: Variations</h2>
/// <img src="../ReadmeImages/KPIHeader-RegularMode.png?raw=true" alt="FUIKPIHeader"/>
/// <h2>Compact (Portrait) Horizontal Size Class: Variations</h2>
/// <img src="../ReadmeImages/KPIHeader-CompactMode.png?raw=true" alt="FUIKPIHeader"/>
/// <h2>Example Initialization and Configuration:</h2>
/// In table view controller’s <code>viewDidLoad</code> function:
/// \code
///
/// //Programmatically add a KPIHeader to tableview
///
/// let kpiView1 = FUIKPIView()
/// let kpiView1Icon = FUIKPIIconItem(icon: #imageLiteral(resourceName: "asset").withRenderingMode(.alwaysTemplate))
/// let kpiView1Metric = FUIKPIMetricItem(string: "5")
/// let kpiView1Unit1 = FUIKPIUnitItem(string: "k")
/// kpiView1.items = [kpiView1Icon, kpiView1Metric,kpiView1Unit1]
/// kpiView1.captionlabel.text = "Orders processed"
/// kpiView1.isEnabled = false
/// kpiView1.colorScheme = .dark
///
/// var kpiChartLarge: FUIKPIProgressView!
/// kpiChartLarge = FUIKPIProgressView()
/// kpiChartLarge.chartSize = FUIKPIProgressViewSize.large
/// let fractionLarge = FUIKPIFractionItem(string: "12")
/// let unitLarge = FUIKPIFractionItem(string: "/")
/// let fractionLarge2 = FUIKPIFractionItem(string: "25")
/// kpiChartLarge.items = [fractionLarge, unitLarge, fractionLarge2]
/// kpiChartLarge.progress = Float(0.64)
/// kpiChartLarge.captionLabelText = "Completed"
/// kpiChartLarge.colorScheme = .dark
///
/// let kpiArray = [kpiView1, kpiChartLarge]
///
/// let KPIHeader = FUIKPIHeader()
/// KPIHeader.items = kpiArray
/// self.tableView.tableHeaderView  = KPIHeader
///
///
/// \endcode<h2>Note:</h2>
/// <code>FUIKPIHeader</code> added to <code>UITableView</code> as tableHeaderView is compatible with <code>UIRefreshControl</code>
/// added to the same table view.  Please note that if an <code>UIRefreshControl</code> object is set after
/// adding an <code>FUIKPIHeader</code> object as tableHeaderView, the <code>UIRefreshControl</code> subview must be moved
/// to the front in the <code>tableView</code>; otherwise, the <code>UIRefreshControl</code> object will be hidden.
/// \code
///
/// //set kpiHeader to tableHeaderView first
/// self.tableView.tableHeaderView = kpiHeader
/// //set a refresh control next
/// self.refreshControl = UIRefreshControl()
/// self.refreshControl?.addTarget(self, action: #selector(refreshTriggered), for: .valueChanged)
/// self.refreshControl?.tintColor = UIColor.white
/// //bring refresh control to the front to make it visible
/// self.tableView.bringSubview(toFront: self.refreshControl!)
///
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUIKPIHeader_background {
/// background-color: @backgroundGradientTop;
/// }
///
/// fdlFUIKPIHeader_kpiView {
/// tint-color: @primary6;
/// }
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori12FUIKPIHeader")
@interface FUIKPIHeader : FUIDrawingView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UIControl</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori20NibDesignableControl")
@interface NibDesignableControl : UIControl
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// The <code>FUIKPIProgressView</code> is an <code>UIView</code> subclass, which enables a developer to present “KPI” information in a formatted manner consistent with the Fiori Design Language.
/// The <code>FUIKPIProgressView</code> takes 4 types of component items, and a caption string:
/// <ul>
///   <li>
///     <code>chartSize</code>: KPICharts can be small (104px circle) or large (130px circle).  Large is default
///   </li>
///   <li>
///     <code>metric</code>:  The value which is being displayed.  For example, in: “42%” and “42/100”, the metric is “42”.
///   </li>
///   <li>
///     <code>fraction</code>:  The value which is being displayed when in a fraction form. For example, in: 42/100, the fraction elements are “42” and “100” with “/” being a “unit” item.
///   </li>
///   <li>
///     <code>unit</code>: the unit information for the metric displayed.  For example, in “42%”, the unit is “%”.  Multiple unit components are permitted per metric.  However, a maximum of two units should be used on each side of the metric.
///   </li>
///   <li>
///     <code>progress</code>: The percentage of the KPI chart/circle that should be filled in.  For example, to have half of the circle chart filled in, the progress is “0.50”.  Progress bar animates on load.
///   </li>
///   <li>
///     <code>captionLabel</code>: An optional label displayed directly beneath the KPI components.  The label will shift to underneath the circle if sizing requires. For small charts, the caption can be up to 86px in length.  Greater than that, it moves outside of the circle and can wrap to up to 2 lines of 122 px per line.  For large charts, the caption inside the circle can be up to 94px.  Beyond that, it moves outside the circle and wraps to up to 2 lines of 216px per line.
///   </li>
/// </ul>
/// The KPI components are implemented as <code>FUIKPIMetricItem</code>, <code>FUIKPIFractionItem</code>, or <code>FUIKPIUnitItem</code>.  All implement <code>FUIKPIViewItem</code> protocol.  The developer should create instances of each of these components, and pass them to the <code>items: [FUIKPIViewItem]</code> property of the <code>FUIKPIProgressView</code>.
/// note:
/// This API of component items is conceptually similar to that of <code>UIToolbar</code>’s <code>items: [UIBarButtonItem]?</code> property.
/// <h2>Color configuration:</h2>
/// <ul>
///   <li>
///     Call setTintColor(_:for:) to configure tint color for disabled, normal, highlighted <code>UIControlState</code>. Setting <code>tintColor</code> is equivalent to call setTintColor(color, for: UIControlState.normal). If <code>tintColor</code> is not set by developer, <code>colorScheme</code> will be applied.
///   </li>
///   <li>
///     disabled: Color to be used when control is disabled.
///   </li>
///   <li>
///     normal: Color to be used when control is enabled.
///   </li>
///   <li>
///     highlighted: Color to be used when control is tapped on.
///   </li>
/// </ul>
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let kpiChartView = FUIKPIProgressView(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop a <code>UIView</code> component to Interface Builder’s canvas.
///   </li>
///   <li>
///     Switch custom class name from <code>UIView</code> to <code>FUIKPIProgressView</code> and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Create an outlet of the <code>FUIKPIProgressView</code> to be able to access its properties.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
///
/// self.kpiChartView.chartSize = FUIKPIProgressViewSize.small
/// let metric = FUIKPIMetricItem(string: "33")
/// let unit = FUIKPIUnitItem(string: "%")
/// self.kpiChartView.items = [metric, unit]
/// self.kpiChartView.progress = Float(0.33)
/// self.kpiChartView.captionLabelText = "Complete"
///
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUIKPIProgressView {
/// progress-tint-color: @chart1;
/// track-tint-color: @primary5;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori18FUIKPIProgressView")
@interface FUIKPIProgressView : NibDesignableControl
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Inititialization for a FUIKPIProgressView.
/// \param frame For best results, create <code>frame</code> with <code>CGRect(origin:CGPoint, size: .zero)</code> as height and width of <code>CGRect</code> are zero’d out to allow for dynamic content.
///
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// Chart circle size
@property (nonatomic) IBInspectable BOOL isLarge;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// Boolean value to determine whether a user is able to interact with the control
@property (nonatomic, getter=isEnabled) BOOL enabled;
/// Boolean value to determine whether the control should be displayed in a highlighted state
@property (nonatomic, getter=isHighlighted) BOOL highlighted;
/// :nodoc:
- (void)updateConstraints;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForFirstBaselineLayout;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForLastBaselineLayout;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
@end






/// The <code>FUIKPIView</code> is an <code>UIView</code> subclass, which enables a developer to present “KPI” information in a formatted manner consistent with the Fiori Design Language.
/// The <code>FUIKPIView</code> takes 3 types of component items, and a caption string:
/// <ul>
///   <li>
///     <code>metric</code>:  the value which is being displayed.  For example, in: “$256k”, the metric is “256”.
///   </li>
///   <li>
///     <code>unit</code>: the unit information for the metric displayed.  For example, in “$256k”, the units are “$” and “k”.  Multiple unit components are permitted per metric.  However, a maximum of two units should be used on each side of the metric.
///   </li>
///   <li>
///     <code>icon</code>:  a 32px x 32px icon may be displayed.  Icons should only be displayed to the <em>left</em> of a metric.  Units may still be displayed to the right of the metric, when an icon is displayed.
///   </li>
///   <li>
///     <code>captionLabel</code>: optional label, displayed beneath the KPI components.
///   </li>
/// </ul>
/// The KPI components are implemented as <code>FUIKPIMetricItem</code>, <code>FUIKPIUnitItem</code>, and <code>FUIKPIIconItem</code>.  All implement <code>FUIKPIViewItem</code> protocol.  The developer should create instances of each of these components, and pass them to the <code>items: [FUIKPIViewItem]</code> property of the <code>FUIKPIView</code>.
/// note:
/// This API of component items is conceptually similar to that of <code>UIToolbar</code>’s <code>items: [UIBarButtonItem]?</code> property.
/// <h2>Color configuration:</h2>
/// <ul>
///   <li>
///     Call setTintColor(_:for:) to configure tint color for disabled, normal, highlighted <code>UIControlState</code>. Setting <code>tintColor</code> is equivalent to call setTintColor(color, for: UIControlState.normal). If <code>tintColor</code> is not set by developer, <code>colorScheme</code> will be applied.
///   </li>
///   <li>
///     disabled: Color to be used when control is disabled.
///   </li>
///   <li>
///     normal: Color to be used when control is enabled.
///   </li>
///   <li>
///     highlighted: Color to be used when control is tapped on.
///   </li>
/// </ul>
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let kpiView = FUIKPIView(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop a <code>UIView</code> component to Interface Builder’s canvas.
///   </li>
///   <li>
///     Switch custom class name from <code>UIView</code> to <code>FUIKPIView</code> and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Create an outlet of the <code>FUIKPIView</code> to be able to access its properties.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
///
/// // Do any additional setup after loading the view.
///
/// let unit = FUIKPIUnitItem(string: "$")
/// let metric = FUIKPIMetricItem(string: "294")
/// let unit2 = FUIKPIUnitItem(string: "USD")
///
/// self.kpiView.items = [unit, metric, unit2]
/// self.kpiView.captionlabel.text = "Label example can wrap to two lines"
///
///
/// let icon = FUIKPIIconItem(icon: #imageLiteral(resourceName: "ProfilePic"))
/// let metric2 = FUIKPIMetricItem(string: "2")
///
/// self.kpiIconView.items = [icon, metric2, unit2]
/// self.kpiIconView.captionlabel.text = "Documents Example of Two Line Wrap"
///
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUIKPIView {
/// tint-color: @primary2;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori10FUIKPIView")
@interface FUIKPIView : NibDesignableControl
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Initialization method for a <code>FUIKPIView</code> takes a ’CGRect”
/// \param frame CGRect of the initial frame
///
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
@property (nonatomic, getter=isEnabled) BOOL enabled;
/// :nodoc:
@property (nonatomic, getter=isHighlighted) BOOL highlighted;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
/// Optional label, displayed beneath the KPI components.  Wraps to 2 lines, with a preferred max width of 216 px.
@property (nonatomic, readonly, weak) IBOutlet FUILabel * _Null_unspecified captionlabel;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForFirstBaselineLayout;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForLastBaselineLayout;
@end






/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UICollectionViewCell</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori38NibDesignableFUIBaseCollectionViewCell")
@interface NibDesignableFUIBaseCollectionViewCell : FUIBaseCollectionViewCell
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// FUIKeyValueCollectionViewCell is a variant of <code>UICollectionViewCell</code> defined in <code>SAPFiori</code>. It contains a <code>UILabel</code> and a <code>UITextField</code>.
/// <h2>Code usage:</h2>
/// Register <code>FUIKeyValueCollectionViewCell</code> for a collection view object.
/// \code
///
/// self.collectionView.register(FUIKeyValueCollectionViewCell.self, forCellWithReuseIdentifier: FUIKeyValueCollectionViewCell.reuseIdentifier)
///
///
/// \endcodeImplement collection view’s dataSource method <code>collectionView(_:cellForItemAt:)</code>
/// \code
///
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
///     let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: FUIKeyValueCollectionViewCell.reuseIdentifier, for: indexPath) as! FUIKeyValueCollectionViewCell
///
///     switch indexPath.item {
///         case 0:
///         cell.keyName = "Name"
///         cell.value = "Broken Plates on Pole"
///         case 1:
///         cell.keyName = "Sort No."
///         cell.value = "0001"
///         default:
///         break
///     }
///
///     return cell
/// }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori29FUIKeyValueCollectionViewCell")
@interface FUIKeyValueCollectionViewCell : NibDesignableFUIBaseCollectionViewCell
/// The key name of the cell.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// The value of the cell.
@property (nonatomic, copy) IBInspectable NSString * _Nullable value;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
@end

@class UIFont;

/// Subclass of UILabel, implementing <code>onChangeHandler</code> that is invoked on changes to the <code>value</code> property.
/// <h2>Theming</h2>
/// Base class paths:
/// \code
/// fdlFUILabel {}
///
/// \endcodeSupported <code>Text</code> attributes:
/// \code
/// font-color (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-align (TextAlign)
/// text-line-clamp (Integer)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori8FUILabel")
@interface FUILabel : UILabel
/// :nodoc:
@property (nonatomic, copy) NSString * _Nullable text;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)drawTextInRect:(CGRect)rect;
/// :nodoc:
@property (nonatomic) NSInteger numberOfLines;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified textColor;
/// :nodoc:
@property (nonatomic, strong) UIFont * _Null_unspecified font;
/// :nodoc:
@property (nonatomic) NSTextAlignment textAlignment;
/// :nodoc:
@property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
/// :nodoc:
@property (nonatomic, readonly) BOOL canBecomeFirstResponder;
/// :nodoc:
- (void)copy:(id _Nullable)sender;
/// :nodoc:
- (BOOL)canPerformAction:(SEL _Nonnull)action withSender:(id _Nullable)sender SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
@end





@class NSAttributedString;

/// Special case of FUILabel, used for maintaining backwards compatiblity in controls which were originally developed by laying-out several <code>FUILabel</code> instances, but which have been now been transitioned to an <code>NSAttributedStringDrawing</code> layout technique, in which the contents of several string properties are concatenated into <code>NSAttributedString</code>s and laid-out using <code>NSParagraphStyle</code> configurations (e.g. FUIObjectTableViewCell).
/// The <code>FUILabelProxy</code> may be used by the developer for supplying configurations and text, but will not be laid-out in the parent view.  Its configurations and content will be read by a <code>NSAttributedString</code> concatenation engine.
/// See API and Theming header-doc for <code>FUILabel</code>
/// remark:
/// Should not be used directly by app developer.  Use <code>FUILabel</code>, instead.
SWIFT_CLASS("_TtC8SAPFiori13FUILabelProxy")
@interface FUILabelProxy : FUILabel
/// :nodoc:
@property (nonatomic, strong) NSAttributedString * _Nullable attributedText;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end



@protocol UISearchBarDelegate;
@protocol FUIListPickerDataSource;
@protocol FUIListPickerSearchResultsUpdating;

/// The protocol defines the properties and functions for listing the options
/// in an <code>UITableView</code> for the corresponding <code>ListPickerFormCell</code>.
SWIFT_PROTOCOL("_TtP8SAPFiori13FUIListPicker_")
@protocol FUIListPicker
/// The prompt string to be displayed on the footer of the
/// list table view. If this is nil, there will be no
/// table view footer.
@property (nonatomic, copy) NSString * _Nullable prompt;
/// This property indicates if search bar is to be displayed in the ListPicker.
/// The default is false.
@property (nonatomic) BOOL isSearchEnabled;
/// If this property is true, after user taps an item in search mode, the search
/// will be canceled with the selection state changed for that item.
@property (nonatomic) BOOL isSearchCancelledAfterSelection;
/// If this property is true, the navigation bar will be hidden when search is active.
/// Otherwise, the navigation bar will remain when search is active.
/// The default is true.
@property (nonatomic) BOOL hidesNavigationBarDuringSearch;
/// If this is set, the delegate object of the search bar associated with this <code>FUIListPicker</code>
/// will be set to this <code>UISearchBarDelegate</code> implementation.
/// The default is nil.
@property (nonatomic, strong) id <UISearchBarDelegate> _Nullable searchBarDelegate;
/// The costom placeholder text on the search bar.
/// If this is not nil, the placeholder in the search bar will be set to this text.
/// Otherwise, the standard <code>UISearchBar</code> placeholder will be used.
@property (nonatomic, copy) NSString * _Nullable searchBarPlaceholderText;
/// If this is true, there will be a barcode scanner icon at the
/// bookmark location of the search bar to allow user use
/// barcode scanner.
@property (nonatomic) BOOL isBarcodeScannerEnabled;
/// The <code>FUIBarcodeScanMode</code> for the barcode scanner.
@property (nonatomic) enum FUIBarcodeScanMode barcodeScanMode;
/// A closure to transform the scan result string.
/// The transformed string will be used as the search text.
/// If this property is nil, the result string from scanner will be used
/// as the search text directly without transformation.
@property (nonatomic, copy) NSString * _Nonnull (^ _Nullable barcodeScanResultTransformer)(NSString * _Nonnull);
/// The <code>ListPickerDataSource</code> implementation for the available options.
/// If this is set, the <code>valueOptions</code> property of the associated
/// <code>FUIListPickerFormCell</code> will be ignored.
/// If this is not set by the developer, and <code>valueOptions</code> property of the associated
/// <code>FUIListPickerFormCell</code> is set, a <code>StringListPickerDataSource</code> will be created
/// using <code>valueOptions</code> and set to both properties ‘dataSource’ and ‘searchResultsUpdating’.
@property (nonatomic, strong) id <FUIListPickerDataSource> _Nullable dataSource;
/// Is the <code>ListPickerDataSource</code> implementation is unique identifier based or not.
@property (nonatomic) BOOL isDataSourceRequiringUniqueIdentifiers;
/// The <code>ListPickerSearchResultsUpdating</code> implementation for handling search results.
/// Please refer to the <code>dataSource</code> property that if <code>dataSource</code> property is not set
/// by the developer, and <code>valueOptions</code> property of the associated
/// <code>FUIListPickerFormCell</code> is set, a <code>StringListPickerDataSource</code> will be created
/// using <code>valueOptions</code> and set to both properties ‘dataSource’ and ‘searchResultsUpdating’.
@property (nonatomic, strong) id <FUIListPickerSearchResultsUpdating> _Nullable searchResultsUpdating;
/// The section header title for selected entries in long list.
/// The default is from localized strings file - “Selected”.
@property (nonatomic, copy) NSString * _Nullable selectedEntriesSectionTitle;
/// The section header title for all entries in long list.
/// The default is from localized strings file - “All”.
@property (nonatomic, copy) NSString * _Nullable allEntriesSectionTitle;
/// The title string for the “Select All” button.
/// The default is from localized strings file - “Select All”.
@property (nonatomic, copy) NSString * _Nullable selectAllButtonTitle;
/// The title string for the “Deselect All” button.
/// The default is from localized strings file - “Deselect All”.
@property (nonatomic, copy) NSString * _Nullable deselectAllButtonTitle;
/// The title of the list picker.
@property (nonatomic, copy) NSString * _Nullable title;
/// Estimated height of UITableViewCells displayed in <code>FUIListPicker</code> table view.  Should be used in same
/// manner as <code>UITableView.estimatedRowHeight</code>.
@property (nonatomic) CGFloat estimatedRowHeight;
/// This property indicates if the table should be sectioned.
/// i.e., when the number of items in the list requires more than one screen to displayed all of them,
/// there will be a “Selected” section, to display the selected items, and an “All” section to display all items.
/// If <code>isSelectedSectionEnabled</code> is false, there will be only one section to display all items.
/// The default value is true.
@property (nonatomic) BOOL isSelectedSectionEnabled;
/// The tint color to be applied to the cells in the list table view.
/// This is used to set the color of the selection check mark.
@property (nonatomic, strong) UIColor * _Nullable tintColor;
/// Register the <code>UITableViewCell</code> classes that will be used in
/// displaying cells from <code>dataSource</code>.
/// Note that the standard <code>UITableViewCell</code> is by default registered using
/// the identifier “UITableViewCell”.
- (void)register:(Class _Nullable)cellClass forCellReuseIdentifier:(NSString * _Nonnull)identifier;
/// Reload the data in the selection list table view.
- (void)reloadData;
@end


/// An object that adopts the FUIListPickerDataSource protocol is responsible for
/// providing the data and views required to display the list of options
/// available in <code>FUIListPickerFormCell</code> or <code>FUIListPickerTableViewController</code>.
/// The data source could be sectioned by implementing the following function:
/// \code
/// func numberOfSections(in listPicker: FUIListPicker)  -> Int
///
/// \endcodeimportant:
/// Only data source using unique identifier could be sectioned. That is, the
/// property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true.
/// <h2>Implementation Note:</h2>
/// The list picker will not show any item if any of the required functions is not implemented.
/// The following optional functions are required to be implemented for data source not using unique identifier:
/// \code
/// func numberOfRows(in listPickerTableView: UITableView) -> Int
///
/// func listPickerTableView(_ tableView: UITableView, cellForRowAt index: Int, isFiltered: Bool) -> UITableViewCell
///
/// \endcodeThe following optional functions are required to be implemented for data source using unique identifier but not sectioned:
/// \code
/// func numberOfRows(in listPickerTableView: UITableView) -> Int
///
/// func listPickerTableView(_ tableView: UITableView, cellForRowAt index: Int, isFiltered: Bool) -> UITableViewCell
///
/// func listPickerTableView(_ tableView: UITableView, cellForItemWithUniqueIdentifier uniqueIdentifier: String) -> UITableViewCell
///
/// func listPickerTableView(_ tableView: UITableView, uniqueIdentifierForItemAt index: Int) -> String
///
/// func listPickerTableView(_ tableView: UITableView, indexForUniqueIdentifier uniqueIdentifier: String) -> Int
///
/// \endcodeThe following optional functions are required to be implemented for data source using unique identifier and sectioned:
/// \code
/// func numberOfSections(in listPicker: FUIListPicker) -> Int
///
/// func listPickerTableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
///
/// func listPickerTableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath, isFiltered: Bool) -> UITableViewCell
///
/// func listPickerTableView(_ tableView: UITableView, uniqueIdentifierForItemAtIndexPath indexPath: IndexPath) -> String
///
/// func listPickerTableView(_ tableView: UITableView, cellForItemWithUniqueIdentifier uniqueIdentifier: String) -> UITableViewCell
///
/// func listPickerTableView(_ tableView: UITableView, indexPathForUniqueIdentifier uniqueIdentifier: String) -> IndexPath?
///
/// \endcode
SWIFT_PROTOCOL("_TtP8SAPFiori23FUIListPickerDataSource_")
@protocol FUIListPickerDataSource
@optional
/// Gets the number of rows to be displayed.
///
/// returns:
/// If a search is in effect, returns the number of rows
/// in filtered data. Otherwise, returns the number of rows in the original options.
- (NSInteger)numberOfRows SWIFT_WARN_UNUSED_RESULT SWIFT_UNAVAILABLE_MSG("'numberOfRows' has been renamed to 'numberOfRowsIn:'");
/// Gets the number of rows to be displayed.
/// important:
/// This function is required if the data source is not sectioned.
/// \param listPickerTableView The <code>UITableView</code> for the list to be displaye.
///
///
/// returns:
/// If a search is in effect, returns the number of rows
/// in filtered data. Otherwise, returns the number of rows in the original options.
- (NSInteger)numberOfRowsIn:(UITableView * _Nonnull)listPickerTableView SWIFT_WARN_UNUSED_RESULT;
/// This function should return a <code>UITableViewCell</code> at the index position.
/// If isFiltered is true, the index is to the filtered list.
/// If isFiltered is false, the index is to the unfiltered list.
/// important:
/// This function is required if the data source is not sectioned.
/// \param tableView The <code>UITableView</code> for the cell to be displayed.
///
/// \param index The index to the array of the items for the cell to be displayed.
///
/// \param isFiltered Indicates if the index is to the filtered array or not.
///
///
/// returns:
/// The <code>UITableViewCell</code> to be displayed.
- (UITableViewCell * _Nonnull)listPickerTableView:(UITableView * _Nonnull)tableView cellForRowAt:(NSInteger)index isFiltered:(BOOL)isFiltered SWIFT_WARN_UNUSED_RESULT;
/// This function should return a <code>UITableViewCell</code> for the specified Unique Identifier.
/// This is typically used for displaying the selected list in the table view.
/// important:
/// This function is required if the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true.
/// \param tableView The <code>UITableView</code> for the cell to be displayed.
///
/// \param uniqueIdentifier The Unique Identifier for the item in the list.
///
- (UITableViewCell * _Nonnull)listPickerTableView:(UITableView * _Nonnull)tableView cellForItemWithUniqueIdentifier:(NSString * _Nonnull)uniqueIdentifier SWIFT_WARN_UNUSED_RESULT;
/// Obtain the Unique Identifier at the current index, whether the list is filtered or not.
/// important:
/// This function is required if the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true,
/// but is not a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param index The index to the current array of items, whether it is filtered or not.
///
///
/// returns:
/// The Unique Identifier for the item at the index location.
- (NSString * _Nonnull)listPickerTableView:(UITableView * _Nonnull)tableView uniqueIdentifierForItemAt:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// Obtain the index to the current list, whether the list is filtered or not.
/// important:
/// This function is required if the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true,
/// but is not a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param uniqueIdentifier The Unique Identifier for the item in the list.
///
///
/// returns:
/// The index to the current list for the unique identifier. Or, -1 if the unique identifier is not in the current list.
- (NSInteger)listPickerTableView:(UITableView * _Nonnull)tableView indexForUniqueIdentifier:(NSString * _Nonnull)uniqueIdentifier SWIFT_WARN_UNUSED_RESULT;
/// Asks the data source for the number of sections in the data source.
/// important:
/// This function is ignored if the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is false.
/// This data source is a “sectioned” data source if this function is implemented and the property <code>isDataSourceRequiringUniqueIdentifiers</code>
/// of the <code>FUIListPicker</code> is true.  There are other functions required to be implemented in a “sectioned” data source.
/// \param listPicker The <code>FUIListPicker</code> for the data source.
///
///
/// returns:
/// The number of sections in this data source.
- (NSInteger)numberOfSectionsIn:(id <FUIListPicker> _Nonnull)listPicker SWIFT_WARN_UNUSED_RESULT;
/// Asks the data source for the number of rows in the specified section.
/// important:
/// This function is required for a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param section The specified section.
///
///
/// returns:
/// The number of rows in the specified section.
- (NSInteger)listPickerTableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Asks the data source for the header title of the specified section.
/// important:
/// This function is invoked only if this is a “sectioned” data source. There is no section header title when this function is not implemented.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param section The specified section.
///
///
/// returns:
/// The header title for the specified section.
- (NSString * _Nullable)listPickerTableView:(UITableView * _Nonnull)tableView titleForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// This function should return a <code>UITableViewCell</code> at the <code>IndexPath</code> position.
/// If <code>isFiltered</code> is true, the index is to the filtered list.
/// If <code>isFiltered</code> is false, the index is to the unfiltered list.
/// important:
/// This function is required for a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the cell to be displayed.
///
/// \param indexPath The <code>IndexPath</code> to the array of the items for the cell to be displayed.
///
/// \param isFiltered Indicates if the <code>IndexPath</code> is to the filtered array or not.
///
///
/// returns:
/// The <code>UITableViewCell</code> to be displayed.
- (UITableViewCell * _Nonnull)listPickerTableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath isFiltered:(BOOL)isFiltered SWIFT_WARN_UNUSED_RESULT;
/// Obtain the Unique Identifier at the specified <code>IndexPath</code>, whether the list is filtered or not.
/// important:
/// This function is required for a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param indexPath The <code>IndexPath</code> to the current list of items, whether it is filtered or not.
///
///
/// returns:
/// The Unique Identifier for the item at the <code>IndexPath</code> location.
- (NSString * _Nonnull)listPickerTableView:(UITableView * _Nonnull)tableView uniqueIdentifierForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Obtain the <code>IndexPath</code> to the current list, whether the list is filtered or not.
/// important:
/// This function is required for a “sectioned” data source.
/// \param tableView The <code>UITableView</code> for the list picker.
///
/// \param uniqueIdentifier The Unique Identifier for the item in the list.
///
///
/// returns:
/// The <code>IndexPath</code> to the current list for the unique identifier. Or, nil if the unique identifier is not in the current list.
- (NSIndexPath * _Nullable)listPickerTableView:(UITableView * _Nonnull)tableView indexPathForUniqueIdentifier:(NSString * _Nonnull)uniqueIdentifier SWIFT_WARN_UNUSED_RESULT;
@end


/// The reusable UI component implemented as an <code>UITableViewCell</code> to display a key-value pair property, which is integrated with a <code>FUIListPicker</code> controller for displaying a list of values.
/// <h3>Single-line version</h3>
/// <img src="../ReadmeImages/FK_SingleLineListCellAnnotations.png?raw=true" alt="FUIListPickerFormCell-single" width="376">
/// <h3>Multi-line version</h3>
/// <img src="../ReadmeImages/FK_MultiLineListCellAnnotations.png?raw=true" alt="FUIListPickerFormCell-multi" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property.
///   </li>
///   <li>
///     <code>value</code>: The default selections.
///   </li>
///   <li>
///     <code>valueOptions</code>: The list of optional values user may choose from.
///   </li>
///   <li>
///     <code>allowsMultipleSelection</code>: Indicates if user can select multiple values. Default is true, meaning by default user may select multiple values.
///   </li>
///   <li>
///     <code>isEditable</code>: If the selection(s) could be modified or not. The default is true.
///   </li>
///   <li>
///     <code>listPicker</code>: The <code>FUIListPicker</code> for this <code>FUIListPickerFormCell</code>.
///   </li>
/// </ul>
/// Note that the display of the selections in the <code>valueLabel</code> is the
/// responsibility of the developer if the <code>dataSource</code> property of the <code>listPicker</code>
/// is set. Developer is to set the text of the <code>valueLabel</code> to reflect the selections.
/// Otherwise, if developer sets <code>valueOptions</code> and leaves <code>dataSource</code> of <code>listPicker</code> to nil,
/// then the text in <code>valueLabel</code> will be set internally.
/// Here are the code snippets in app’s <code>UITableViewController</code> implementation:
/// (The app’s <code>UITableViewController</code> needs to be a subclass of <code>FUIFormTableViewController</code>.)
/// \code
///
///        var propValue7: [Int] = [1, 3, 6]
///        var valueOptions7 = ["One", "Two", "Three", "Four", "Five", "Six", "Seven"]
///        var listPickerDataSource7 = StringListPickerDataSource(options: valueOptions7)
///
///        override func viewDidLoad() {
///            super.viewDidLoad()
///            self.tableView.register(FUIListPickerFormCell.self, forCellReuseIdentifier: FUIListPickerFormCell.reuseIdentifier)
///            // ...
///        }
///
///        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///            // ...
///            let cell = tableView.dequeueReusableCell(withIdentifier: FUIListPickerFormCell.reuseIdentifier, for: indexPath) as! FUIListPickerFormCell
///            cell.keyName = "Choose Multiple"
///            cell.value = propValue7
///            cell.allowsMultipleSelection = true
///            cell.valueLabel.text = descriptionForSelectedStrings(valueOptions7, at: propValue7) // See below
///
///            cell.listPicker.dataSource = listPickerDataSource7
///            cell.listPicker.searchResultsUpdating = listPickerDataSource7
///            cell.listPicker.isSearchEnabled = true
///            cell.listPicker.prompt = "Please select multiple items"
///
///            cell.listPicker.searchBar?.isBarcodeScannerEnabled = true
///            cell.listPicker.searchBar?.barcodeScanner?.scanMode = .EAN_UPC
///            cell.listPicker.searchBar?.barcodeScanner?.scanResultTransformer = { (scanString) -> String in
///                return self.transformStringToSearchBar(scanResultString: scanString)
///            }
///            // MARK:  implement onChangeHandler
///            cell.onChangeHandler = { [weak self] newValue in
///                self.propValue3 = newValue
///            }
///            return cell
///            // ...
///        }
///
///        func descriptionForSelectedStrings(_ options: [String], at indexes: [Int]) -> String {
///            return options.enumerated().filter({ (index, element) -> Bool in
///                return indexes.contains(index)
///            }).reduce ("") { string, element in
///                return string.isEmpty ? element.1 : "\(string), \(element.1)"
///            }
///        }
///
///
/// \endcode<h2>Theming</h2>
/// Supported <code>UILabel</code> class paths:
/// \code
/// fdlFUIListPickerFormCell_keyLabel {}
/// fdlFUIListPickerFormCell_keyLabel-disabled {}
/// fdlFUIListPickerFormCell_valueLabel {}
///
/// \endcodeSupported <code>UILabel</code> properties:
/// \code
/// font-color: (Color)
/// font-style: (UIFontTextStyle)
///
/// \endcodeSupported <code>UIView</code> class paths:
/// \code
/// fdlFUIListPickerFormCell_selectedBackgroundView {}
///
/// \endcodeSupported <code>UIView</code> properties:
/// \code
/// background-color: (Color)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUIListPickerFormCell")
@interface FUIListPickerFormCell : FUIInlineValidationTableViewCell
/// The key name of the property.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The UILabel holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The <code>UILabel</code> that holds the selected value strings.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified valueLabel;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)updateConstraints;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
@end




/// An implementation of <code>FUIListPickerSearchResultsUpdating</code> protocol is responsible
/// to maintain a filtered list of options, based on the search string specified,
/// for the corresponding <code>FUIListPickerDataSource</code> implementation.
/// <h2>Implementation Note:</h2>
/// Depending on the <code>FUIListPickerDataSource</code>, different optional functions in the corresponding <code>FUIListPickerSearchResultsUpdating</code> are required to be implemented.
/// The list picker will not show any item if any of the required functions is not implemented.
/// The following optional functions are required to be implemented for data source not using unique identifier:
/// \code
/// func listPicker(_ listPicker: FUIListPicker, filteredDataSourceContainsItemAt unfilteredIndex: Int) -> Bool
///
/// func listPicker(_ listPicker: FUIListPicker, unfilteredDataSourceIndexOfItemAt filteredIndex: Int) -> Int
///
/// \endcodeThe following optional functions are required to be implemented for data source using unique identifier but not sectioned:
/// \code
/// func listPicker(_ listPicker: FUIListPicker, filteredDataSourceContainsItemWithUniqueIdentifier uniqueIdentifier: String) -> Bool
///
/// \endcodeThe following optional functions are required to be implemented for data source using unique identifier and sectioned:
/// \code
/// func listPicker(_ listPicker: FUIListPicker, filteredDataSourceContainsItemWithUniqueIdentifier uniqueIdentifier: String) -> Boo
///
/// \endcode
SWIFT_PROTOCOL("_TtP8SAPFiori34FUIListPickerSearchResultsUpdating_")
@protocol FUIListPickerSearchResultsUpdating
/// Update search results based on the specified <code>searchString</code>.
/// \param listPicker The requesting <code>ListPicker</code> object.
///
/// \param forSearchString The search string.
/// If it is an empty string, the search is ended.
///
- (void)listPicker:(id <FUIListPicker> _Nonnull)listPicker updateSearchResults:(NSString * _Nonnull)forSearchString;
@optional
/// Check if the specified index is in filtered list.
/// \param listPicker The requesting <code>ListPicker</code> object.
///
/// \param unfilteredIndex The unfiltered index to be checked.
///
///
/// returns:
/// True, if the specified index is in filtered list.
- (BOOL)listPicker:(id <FUIListPicker> _Nonnull)listPicker filteredDataSourceContainsItemAt:(NSInteger)unfilteredIndex SWIFT_WARN_UNUSED_RESULT;
/// Gets the index to the original list from the index of filtered list.
/// \param listPicker The requesting <code>ListPicker</code> object.
///
/// \param filteredIndex The index to the filtered indexes.
///
///
/// returns:
/// The index to the original list from the index of filtered list.
- (NSInteger)listPicker:(id <FUIListPicker> _Nonnull)listPicker unfilteredDataSourceIndexOfItemAt:(NSInteger)filteredIndex SWIFT_WARN_UNUSED_RESULT;
/// Check if the specified unique identifier is in the filtered list of items,
/// when the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true.
/// important:
/// This function is required if the property <code>isDataSourceRequiringUniqueIdentifiers</code> of the <code>FUIListPicker</code> is true.
/// \param listPicker The requesting <code>ListPicker</code> object.
///
/// \param uniqueIdentifier The unique identifier to check.
///
///
/// returns:
/// True, if the specified uniqueIdentifier is in the filtered list.
- (BOOL)listPicker:(id <FUIListPicker> _Nonnull)listPicker filteredDataSourceContainsItemWithUniqueIdentifier:(NSString * _Nonnull)uniqueIdentifier SWIFT_WARN_UNUSED_RESULT;
@end

@class UISearchController;
@class UISearchBar;

/// This <code>FUIListPickerTableViewController</code> is to show a list of table view cells to let user select one of the cell.
/// Developer needs to provide implementation of <code>FUIListPickerDataSource</code>, and <code>FUIListPickerSearchResultsUpdating</code>
/// if search is enabled, in order to use <code>FUIListPickerTableViewController</code>.
/// If the <code>isDismissedOnSelection</code> property is set to true, and the <code>allowsMultipleSelection</code> property is set to false, then when user selected one cell by tapping the displayed
/// cell, the <code>onSelectionHandler</code> property will be invoked to notify the user selection. The table view will then be dismissed.
/// There will be a “Done” button shown in the navigation bar if the <code>isDismissedOnSelection</code> property is set to false or the <code>allowsMultipleSelection</code> property is set to true.
/// The <code>onSelectionHandler</code> property will be invoked after user tapped the “Done” button if the <code>allowsMultipleSelection</code> property is set to false,
/// or the <code>onMultipleSelectionHandler</code> property will be invoked if the <code>allowsMultipleSelection</code> property is set to true.  Then the table view will be dismissed.
/// There will be a “Select All” button in the “All” section header, if multiple selections is allowed and not all items are selected.
/// All items are selected when the “Select All” button is tapped.
/// Once all items are selected, the button title will change to “Deselect All”. All items are de-selected when “Deselect All” button is tapped.
/// Also, a “Deselect All” button will be in the “Selected” section header when multiple selections is allowed.
/// The “Selected” section will appear if the items in the list could not be displayed in one screen, and there are one or more items selected.
/// All selected items will be de-selected when “Deselect All” button is tapped.
/// Here is a code snippet of a typical usage:
/// \code
///
/// let bundle = Bundle(for: FUIListPickerTableViewController.self)
/// let listPickerTableViewController = bundle.loadNibNamed("FUIListPickerTableViewController", owner: nil, options: nil)?.first as! FUIListPickerTableViewController
/// var listPicker = listPickerTableViewController.listPicker
///
/// listPicker.title = "Magic School"
/// listPicker.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
/// listPicker.dataSource = self.objectCellListPickerDataSource
/// listPicker.prompt = "Select One"
/// listPicker.estimatedRowHeight = 98
///
/// listPicker.isSearchEnabled = true
/// listPicker.searchResultsUpdating = self.objectCellListPickerDataSource
/// listPicker.isBarcodeScannerEnabled = true
/// listPicker.barcodeScanMode = .all
/// listPicker.barcodeScanResultTransformer = { (scanString) -> String in
/// return "S"
/// }
///
/// listPickerTableViewController.onSelectionHandler = {
/// self.select1Result.text = self.objectCellListPickerDataSource.descriptionForSelectedItems(at: [$0])
/// }
/// listPickerTableViewController.showsCancelButton = true
/// listPickerTableViewController.isDismissedOnSelection = false
///
/// // Select item at index 4 as default, which is the 5th item.
/// listPickerTableViewController.selectItem(4)
///
/// let navController = UINavigationController(rootViewController: listPickerTableViewController)
/// self.present(navController, animated: true, completion: nil)
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIListPickerTableViewController
/// fdlFUIListPickerTableViewController_cancelItem
/// fdlFUIListPickerTableViewController_sectionHeaderTitleLabel
/// fdlFUIListPickerTableViewController_listTextLabel
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori32FUIListPickerTableViewController")
@interface FUIListPickerTableViewController : UITableViewController <UISearchBarDelegate, UISearchResultsUpdating>
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UIView * _Nullable)tableView:(UITableView * _Nonnull)tableView viewForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForFooterInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)updateSearchResultsForSearchController:(UISearchController * _Nonnull)searchController;
/// :nodoc:
- (void)searchBar:(UISearchBar * _Nonnull)searchBar textDidChange:(NSString * _Nonnull)searchText;
/// :nodoc:
- (BOOL)searchBar:(UISearchBar * _Nonnull)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString * _Nonnull)text SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar * _Nonnull)searchBar SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)searchBarTextDidBeginEditing:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (BOOL)searchBarShouldEndEditing:(UISearchBar * _Nonnull)searchBar SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)searchBarTextDidEndEditing:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarBookmarkButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarCancelButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarSearchButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarResultsListButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBar:(UISearchBar * _Nonnull)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope;
- (nonnull instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

@class UIActivityIndicatorView;

/// <code>FUILoadingIndicatorView</code> is an IBdesignable UI component. A loading indicator shows that something is currently in progress. It shows a <code>UIActivityIndicatorView</code> to visualize progress and a <code>UILabel</code> indicating to the user what is in progress.
/// By default, this view is visible and the animation is stopped. To start the animation call <code>startAnimating()</code>.
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let loadingIndicatorView = FUILoadingIndicatorView(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop an <code>UIView</code> component to Interface Builder canvas.
///   </li>
///   <li>
///     Switch class name from <code>UIView</code> to <code>FUILoadingIndicatorView</code>, and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Create an outlet of the loading indicator to be able to access its properties.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
/// loadingIndicatorView.show()
/// // do something
/// loadingIndicatorView.dismiss()
///
/// \endcode<h2>Animation</h2>
/// The animation of the activity indicator can be started or stopped without affecting the visibility of the view.
/// \code
/// loadingIndicatorView.startAnimating()
/// // do something
/// loadingIndicatorView.stopAnimating()
///
/// \endcode<h2>Theming</h2>
/// The styleClass of the view is <code>fdlFUILoadingIndicatorView</code>.
/// In the .nss file you can use the following parameters:
/// <ul>
///   <li>
///     <code>fdlFUILoadingIndicatorView_textLabel</code>: changes the appearance of the <code>textLabel</code>
///   </li>
/// </ul>
/// <h3>Example:</h3>
/// \code
/// fdlFUILoadingIndicatorView_textLabel {
///    background-color: red;
///    border-color: green;
///    border-width: 2;
///    corner-radius: 2;
///    font-color: blue;
///    font-color-highlighted: yellow;
///    font-name: Avenir;
///    font-size: 15;
///    height: 50;
///    shadow-color: black;
///    shadow-offset: 1, 2;
///    shadow-opacity: 0.5;
///    shadow-radius: 2;
///    text-align: center;
///    text-alpha: 0.9;
///    text-auto-fit: true;
///    text-shadow-color: black;
///    text-shadow-offset: 1, 2;
///    text-transform: uppercase;
///    text-line-clamp:6;
///    width: 100;
/// }
///
/// \endcode<ul>
///   <li>
///     <code>fdlFUILoadingIndicatorView_activityIndicator</code>: changes the appearance of <code>activityIndicator</code>
///   </li>
/// </ul>
/// <h3>Example:</h3>
/// \code
/// fdlFUILoadingIndicatorView_activityIndicator {
///    color: blue;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori23FUILoadingIndicatorView")
@interface FUILoadingIndicatorView : NibDesignable
/// Activity indicator that is either spinning or stopped.
@property (nonatomic, readonly, weak) IBOutlet UIActivityIndicatorView * _Null_unspecified activityIndicator;
/// Text label below the activity indicator.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified textLabel;
/// Text of <code>textLabel</code>. The default is a localized version of <code>LOADING</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable text;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end


/// The main view of <code>FUIMapFloorplanViewController</code>.
SWIFT_CLASS("_TtC8SAPFiori26FUIMapFloorplanContentView")
@interface FUIMapFloorplanContentView : FUIBaseDrawingView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// The main view of <code>FUIMKMapFloorplanViewController</code>
SWIFT_CLASS("_TtC8SAPFiori28FUIMKMapFloorplanContentView")
@interface FUIMKMapFloorplanContentView : FUIMapFloorplanContentView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol MKMapViewDelegate;

/// A subclass of <code>MKMapView</code> is designed to be used with MapKit framework. You can use <code>FUIMKMapView</code> to display map information and to manipulate the map contents from your application. The <code>FUIMKMapView</code> class supports the ability to cache common map interface objects: annotations and overlays. Native <code>MKMapView</code> API methods are also available for developer use. It also adds the selection and deselection handlers for overlays.
/// <h2>Usage</h2>
/// When configuring your map interface with <code>FUIMKMapView</code>, all the added annotation and overlay objects and their corresponding display objects will be cached internally.
/// Add annotation objects to the map view
/// \code
/// func addAnnotation(_ annotation: MKAnnotation, toLayer layer: FUIGeometryLayer) {}
/// func addAnnotation(_ annotation: MKAnnotation, geometryLayer layer: FUIGeometryLayer) {}
/// func addAnnotations(_ annotations: [MKAnnotation], geometryLayer layer: FUIGeometryLayer) {}
///
/// \endcodeAdd overlay objects to the map view
/// \code
/// func addOverlays(_ overlays: [MKOverlay], level: MKOverlayLevel, geometryLayer layer: FUIGeometryLayer) {}
/// func addOverlays(_ overlays: [MKOverlay], geometryLayer layer: FUIGeometryLayer) {}
///
/// \endcodeRespond to select/deselect overlay action
/// \code
/// func selectOverlay(_ overlay: MKOverlay, animated: Bool) {}
/// func deselectOverlay(_ overlay: MKOverlay, animated: Bool) {}
///
/// \endcode<h2>Theming</h2>
SWIFT_CLASS("_TtC8SAPFiori12FUIMKMapView")
@interface FUIMKMapView : MKMapView
/// The delegate handler of FUIMKMapView.
@property (nonatomic, weak) id <MKMapViewDelegate> _Nullable delegate;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)selectAnnotation:(id <MKAnnotation> _Nonnull)annotation animated:(BOOL)animated;
/// :nodoc:
- (void)deselectAnnotation:(id <MKAnnotation> _Nullable)annotation animated:(BOOL)animated;
@end


/// <code>MKPointAnnotation</code> subclass to support selection state.
SWIFT_CLASS("_TtC8SAPFiori20FUIMKPointAnnotation")
@interface FUIMKPointAnnotation : MKPointAnnotation
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


SWIFT_CLASS("_TtC8SAPFiori35FUIMapDetailBaseObjectTableViewCell") SWIFT_UNAVAILABLE_MSG("'FUIMapDetailBaseObjectTableViewCell' has been renamed to '_TtC8SAPFiori22FUIObjectTableViewCell'")
@interface FUIMapDetailBaseObjectTableViewCell : FUIBaseTableViewCell
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// A View Component that wraps the <code>FUIMapDetailPanelSearchResultsViewController</code> as the <code>searchResultsController</code> and the <code>FUIMapDetailPanelContentViewController</code> as the <code>content</code>.  Switching between the two view controllers should be driven by the <code>pushChildViewController</code> and <code>popChildViewController</code> methods in the developer’s <code>mapView(_:didSelect:)</code> and <code>mapView(_:didDeselect:)</code> methods.
/// <h2>iPhone</h2>
/// The <code>searchResults</code> and <code>content</code> will be presented on cards that can be swipe and panned to a bottom, middle, or top position.
/// <h2>iPad</h2>
/// The view is placed in the top left corner of the iPad and will dynamically resize based on the <code>preferredContentSize</code>.  The view is pinned to the given <code>pinMapView</code> and will resize accordingly.  The <code>fitToContent</code> method must be called when reloading the tableView.
/// <h2>Available:</h2>
/// <ul>
///   <li>
///     <code>passThroughViews</code>: A <code>[UIView]</code> that contains the views that are interactable when the map legend is presented on iPad.  This prevents the popover from being dismissed while interacting with views in this list (ex. a <code>MKMapView</code>).
///   </li>
///   <li>
///     <code>isApplyingBlurBackground</code>: A <code>Bool</code> that determines if the child views will have a blurred background.
///   </li>
///   <li>
///     <code>isSearchEnabled</code>: A Boolean value to instantiate search.
///   </li>
///   <li>
///     <code>searchResults</code>: A <code>FUIMapDetailPanelSearchResultsViewController</code> used for the search function.  Manipulate its <code>tableView</code> to show search results.  The developer must set the datasource and delegate methods.
///   </li>
///   <li>
///     <code>content</code>: A <code>FUIMapDetailPanelContentViewController</code> used for showing the details.  The developer must set the datasource and delegate methods.
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// container = FUIMapDetailPanel(parentViewController: self, mapView: mapView)
/// favoritesData = Array(sampleData[3..<sampleData.count])
///
/// container.isSearchEnabled = true
/// container.isApplyingBlurBackground = true
/// container.search.tableView.dataSource = searchResultsDataSource
/// container.search.tableView.delegate = searchResultsDelegate
/// container.search.tableView.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
/// container.search.searchBar.delegate = searchResultsDelegate
///
/// container.content.headlineText = "VA Palo Alto Health Care Sys wraps to two lines..."
/// container.content.didSelectTitleHandler = {
///    print("Developer Select Handler Called!")
/// }
/// container.content.subheadlineText = "Medical Center"
/// container.content.tableView.dataSource = contentDataSource
/// container.content.tableView.delegate = contentDelegate
/// container.content.tableView.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
/// container.content.tableView.estimatedRowHeight = 100
/// #if swift(>=4.2)
///     container.content.tableView.rowHeight = UITableView.automaticDimension
/// #else
///     container.content.tableView.rowHeight= UITableViewAutomaticDimension
/// #endif
///
///
/// \endcodeManage presenting the controller on iPhone in <code>viewDidAppear(_:)</code>.
/// \code
/// DispatchQueue.main.async {
///    self.container!.presentContainer()
/// }
///
/// \endcodeManage dismissing the controller on iPhone in <code>viewWillDisappear(_:)</code>
/// \code
/// self.presentedViewController?.dismiss(animated: false, completion: nil)
///
/// \endcodePresent the detailPanel by managing selecting and deselecting map annotations in <code>mapView(_:didSelect:)</code> and <code>mapView(_:didDeselect:)</code>
/// \code
/// open func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
///
///     let selectedAnnotation = view.annotation
///
///     if selectedAnnotation is MKUserLocation {
///        return
///     }
///
///    self.devUpdateDetailVC(annotation: selectedAnnotation!)
///
///     DispatchQueue.main.async {
///         container.pushChildViewController()
///     }
///
///
///     for annotation in mapView.annotations {
///        if let annotation = annotation as? MKAnnotation, !annotation.isEqual(selectedAnnotation) {
///            self.container.content.tableView.dataSource = newDataSource
///            self.container.fitToContent()
///            DispatchQueue.main.async {
///                self.container.pushChildViewController()
///            }
///            return
///        }
///    }
/// }
///
/// open func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
///
///     let selectedAnnotation = view.annotation
///
///     if selectedAnnotation is MKUserLocation {
///        return
///     }
///
///     DispatchQueue.main.async {
///
///         if self.mapView.selectedAnnotations.isEmpty {
///            self.container.popChildViewController()
///         } else {
///            self.container.content.tableView.dataSource = newDataSource
///            self.container.fitToContent()
///            self.container.content.tableView.reloadData()
///         }
///     }
/// }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori17FUIMapDetailPanel")
@interface FUIMapDetailPanel : UIView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end




@interface FUIMapDetailPanel (SWIFT_EXTENSION(SAPFiori))
@end




@interface FUIMapDetailPanel (SWIFT_EXTENSION(SAPFiori))
@end






/// A View Controller component used in the <code>FUIMapDetailPanel</code>.  It is up to the developer to set the tableView dataSource and delegate.  Typically not used directly by developer.
/// <h2>Usage:</h2>
/// \code
/// let vc = FUIMapDetailPanelViewController()
/// vc.tableView.delegate = delegate
/// vc.tableView.dataSource = dataSource
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori31FUIMapDetailPanelViewController")
@interface FUIMapDetailPanelViewController : UIViewController
/// :nodoc:
@property (nonatomic) CGSize preferredContentSize;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// A View Controller component within the <code>FUIMapDetailPanel</code> as the <code>content</code>.  This controller shows additional details of a business object.  It is up to the developer to set the tableView dataSource and delegate.  Typically not used directly by developer.
/// <h2>Available:</h2>
/// <ul>
///   <li>
///     <code>headlineText</code>: A <code>String</code> used as the header text inside the panel.  The headline text can wrap up to two lines and truncates at the tail.
///   </li>
///   <li>
///     <code>subheadlineText</code>: A <code>String</code> used as the subheadline text inside the panel.  The subheadline text gradually disappears while the <code>tableView</code> scrolls.
///   </li>
///   <li>
///     <code>didSelectTitleHandler</code>: An optional handler that can be set by the developer that is executed when the <code>headlineText</code> is tapped.  If the <code>didSelectTitleHandler</code> is not nil, the <code>headlineText</code> text color is changed to show that it is tappable.
///   </li>
/// </ul>
/// <h2>Usage:</h2>
/// \code
/// let content: FUIMapDetailPanelContentViewController = FUIMapDetailPanelContentViewController()
/// content.headlineText = "Headline Text"
/// content.subheadlineText = "Subheadline Text"
/// content.didSelectTitleHandler = {
///    print("didSelectTitleHandler called!")
/// }
/// content.tableView.delegate = delegate
/// content.tableView.dataSource = dataSource
/// content.tableView.register(FUIMapDetailBaseObjectTableViewCell.self, forCellReuseIdentifier: FUIMapDetailBaseObjectTableViewCell.reuseIdentifier)
/// content.tableView.estimatedRowHeight = 100
/// #if swift(>=4.2)
///     content.tableView.rowHeight  = UITableView.automaticDimension
/// #else
///     content.tableView.rowHeight = UITableViewAutomaticDimension
/// #endif
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori38FUIMapDetailPanelContentViewController")
@interface FUIMapDetailPanelContentViewController : FUIMapDetailPanelViewController
/// :nodoc:
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLayoutSubviews;
@end

@class UIWindow;

/// Fiori style UISearchBar.
/// Developer can add a <code>FUIBarcodeScanner</code> to this <code>FUISearchBar</code> by setting the
/// <code>isBarcodeScannerEnabled</code> property of the <code>FUISearchBar</code> to true. A barcode scanner
/// icon will be displayed at the bookmark icon location of the search bar.
/// A barcode scanner view will be displayed when the barcode scanner icon is tapped.
/// Please refer to <code>FUISearchController</code> about how to use this <code>FUISearchBar</code>.
/// <h2>Attention</h2>
/// The delegate object with type <code>UISearchBarDelegate</code> is declared as a weak reference. So on deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori12FUISearchBar")
@interface FUISearchBar : UISearchBar
/// / :nodoc:
@property (nonatomic, weak) id <UISearchBarDelegate> _Nullable delegate;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// Convenience initializer for internal use.
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (void)willMoveToSuperview:(UIView * _Nullable)newSuperview;
/// :nodoc:
- (void)willMoveToWindow:(UIWindow * _Nullable)newWindow;
/// :nodoc:
- (void)didMoveToSuperview;
/// :nodoc:
- (void)layoutSubviews;
@end


/// Searchbar component of <code>FUIMapDetailPanelSearchResultsViewController</code>.  It is up to the developer to set the search delegate.
/// <h2>Usage</h2>
/// \code
/// let searchBar: FUIMapDetailPanelSearchBar = FUIMapDetailPanelSearchBar()
/// searchBar.delegate = delegate
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIMapDetailPanelSearchBar")
@interface FUIMapDetailPanelSearchBar : FUISearchBar
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Layout the searchbar to the correct width.
- (void)layoutSubviews;
@end




/// A View Controller component within the <code>FUIMapDetailPanel</code> as the <code>searchResults</code>.  This controller shows a tableView with search results using a given searchBar.  It is up to the developer to set the searchBar delegate, tableView datasource, and tableView delegate.  Typically not used directly by developer.
/// <h2>Available:</h2>
/// <ul>
///   <li>
///     <code>tableView</code>: A <code>UITableView</code> that displays search results.  Developer must set the tableView datasource and delegate.
///   </li>
///   <li>
///     <code>searchBar</code>: A <code>FUIMapDetailPanelSearchBar</code> that should filter data.  Developer must set the searchBar delegate.
///   </li>
///   <li>
///     <code>preferredContentSize</code>: A <code>CGSize</code> that determines the size of the <code>UIViewController</code>.  This variable drives the resizing capabilities of the view and must set correctly and properly updated.
///   </li>
///   <li>
///     <code>isApplyingBlurBackground</code>: A <code>Bool</code> that determines if the <code>tableView</code> will use its blurredBackground.  Setting it to false will set the tableView to the <code>UITableView</code> default values.  <code>isApplyingBlurBackground</code> default value is true.
///   </li>
///   <li>
///     <code>searchBar</code>: A <code>FUIMapDetailPanelSearchBar</code> used to filter data.
///   </li>
/// </ul>
/// <h2>Usage:</h2>
/// \code
/// let search = FUIMapDetailPanelSearchResultsViewController()
/// search.isApplyingBlurBackground = true
/// search.tableView.dataSource = tableViewDataSource
/// search.tableView.delegate = tableViewDelegate
/// search.tableView.register(FUIMapDetailTagObjectTableViewCell.self, forCellReuseIdentifier: FUIMapDetailTagObjectTableViewCell.reuseIdentifier)
/// search.searchBar.delegate = searchBarDelegate
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori44FUIMapDetailPanelSearchResultsViewController")
@interface FUIMapDetailPanelSearchResultsViewController : FUIMapDetailPanelViewController
/// A <code>CGSize</code> that determines the size of the <code>UIViewController</code>.  This variable drives the resizing capabilities of the view and must set correctly and properly updated.
@property (nonatomic) CGSize preferredContentSize;
/// :nodoc:
- (void)viewDidLoad;
/// Ensures the searchBar resizes correctly with the view controller
- (void)viewWillLayoutSubviews;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUIMapDetailPanelSearchResultsViewController (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end



/// Status view component of <code>FUIMapDetailStatusTableViewCell</code>
/// Typically not used directly by developer.
/// A view with left aligned text and an optional image.  Images are left aligned and placed to the left of the text.  Images are expected to be 16px by 16px.
/// <h2>Usage</h2>
/// \code
/// let statusView = FUIMapDetailStatusView()
/// statusView.statusImage = FUIIconLibrary.indicator.veryHighPriority
/// statusView.status.text = "High"
///
/// \endcode<h2>Theming</h2>
/// <code>nuiClass</code>:
/// \code
/// fdlFUIMapDetailStatusView {}
///
/// \endcodeSupported <code>TEXT</code> class paths:
/// \code
/// fdlFUIMapDetailStatusView_status {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
/// font-color: Color;
/// font-style: UIFontTextStyle;
///
/// \endcodeSupported <code>IMAGE</code> class paths:
/// \code
/// fdlFUIMapDetailStatusView_statusImage {}
///
/// \endcodeSupported <code>IMAGE</code> properties:
/// \code
/// tint-color: Color;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori22FUIMapDetailStatusView")
@interface FUIMapDetailStatusView : FUIDrawingView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end



/// <code>FUIMapLegend</code> extends <code>UIViewController</code> to show the MapLegend.
/// <code>FUIMapLegend</code> is presented in a <code>UIPopoverView</code> on iPad and presented in a <code>UIPresentationController</code> on iPhone
/// <h2>Available in FUIMapLegend:</h2>
/// <ul>
///   <li>
///     <code>headerTextView</code>: a <code>TextView</code> intended to display a footnote text.
///   </li>
///   <li>
///     <code>passThroughViews</code>: an array of <code>UIView</code> that a user can interact with while popover is visible
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration:</h2>
/// In view controller’s <code>viewDidLoad</code> method:
/// \code
///
/// let toolbar = FUIMapToolbar(mapView: mapView)
/// let legend = FUIMapLegend()
/// legend.toolbarButton = FUIMapToolbarLegendButton()
/// legend.headerTextView.text = "MapView Example Legend"
/// legend.passThroughViews = [toolbar, mapView]
///
/// var venueItem = FUIMapLegendItem(title: "Self Service")
/// venueItem.backgroundColor = UIColor.preferredFioriColor(forStyle: .map1)
/// let venueImage = FUIAttributedImage(image: FUIIconLibrary.map.marker.venue.withRenderingMode(.alwaysTemplate))
/// venueImage.tintColor = .white
/// venueItem.icon = FUIMapLegendIcon(glyphImage: venueImage)
///
/// var valetItem = FUIMapLegendItem(title: "Valet")
/// valetItem.backgroundColor = UIColor.preferredFioriColor(forStyle: .map2)
/// let valetImage =  FUIAttributedImage(image: FUIIconLibrary.map.marker.walk.withRenderingMode(.alwaysTemplate))
/// valetImage.tintColor = .white
/// valetItem.icon = FUIMapLegendIcon(glyphImage: valetImage)
/// valetItem.line = FUIMapLegendLine(dashPattern: [10,8], dashPhase: 3.0)
///
/// let highActivityRegion = FUIMapLegendFillItem()
/// highActivityRegion.fillColor = UIColor.preferredFioriColor(forStyle: .map3)
/// highActivityRegion.borderColor = UIColor.preferredFioriColor(forStyle: .map3)
/// var highActivityRegionItem = FUIMapLegendItem(title: "High Activity Region")
/// highActivityRegionItem.fillItem = highActivityRegion
///
/// var highTrafficPathItem = FUIMapLegendItem(title: "High Traffic Path")
/// highTrafficPathItem.backgroundColor = UIColor.preferredFioriColor(forStyle: .map4)
/// highTrafficPathItem.line = FUIMapLegendLine(dashPattern: [2,2], dashPhase: 0.0)
///
/// legend.items = [highActivityRegionItem, valetItem, venueItem, highTrafficPathItem]
///
/// let legendHandler: ((FUIButton) -> Void)? = { [weak self] button in
///     DispatchQueue.main.async {
///
///         var dismissLegendAndRestoreCachedController = { [unowned self, unowned button] in
///            self.dismiss(animated: true, completion: {
///            button.isSelected = false
///            })
///         }
///
///         let presentNewLegendPhone = {
///            self.present(legend, animated: true, completion: nil)
///         }
///
///         let presentNewLegendPad = {
///            legend.setupPopoverAttributes(popOver: legend.popoverPresentationController!, sender: button)
///            if self.presentedViewController == nil {
///                self.present(legend, animated: false, completion: nil)
///            }
///         }
///
///         guard button.isSelected else {
///            dismissLegendAndRestoreCachedController()
///            return
///         }
///
///         let presentNewClosure = UIDevice.current.userInterfaceIdiom == .phone ? presentNewLegendPhone : presentNewLegendPad
///
///         guard let presentedController = UIDevice.current.userInterfaceIdiom == .phone ? self.presentedViewController : self.popoverPresentationController?.presentedViewController else {
///            presentNewClosure()
///            return
///         }
///
///         if presentedController == legend {
///            dismissLegendAndRestoreCachedController()
///         } else {
///            self.dismiss(animated: true, completion: {
///                presentNewClosure()
///            })
///         }
///     }
/// }
/// legend.toolbarButton?.didSelectHandler = legendHandler
/// let locationButton = FUIMapToolbarUserLocationButton(mapView: self.mapView)
/// toolbar.items = [legend.toolbarButton!, locationButton]
///
///
/// \endcode<h2>theming</h2>
/// \code
/// fdlFUIMapLegendContainer_headerTextView {
/// font-color: @primary3;
/// font-name: semiboldSystem;
/// font-style: footnote;
/// }
///
/// \endcode<h2>notes</h2>
/// <ul>
///   <li>
///     See implementation of <code>FUIMapLegend</code> using a <code>FUIMapToolbarLegendButton</code> for a complete implementation.
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8SAPFiori12FUIMapLegend")
@interface FUIMapLegend : FUIResizablePopoverContainer
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// Adjusts the bottom Anchor to the safeArea.
- (void)viewWillLayoutSubviews;
/// Determines for <code>preferredContentSize</code> for view. Sets <code>tableWidth</code> according to device platform.  Preferred height is the sum of <code>tableView</code> height, <code>headerTextView</code> height, and <code>divider</code> height
@property (nonatomic) CGSize preferredContentSize;
@end


@interface FUIMapLegend (SWIFT_EXTENSION(SAPFiori)) <UITableViewDelegate>
@end






@interface FUIMapLegend (SWIFT_EXTENSION(SAPFiori)) <UITableViewDataSource>
/// <code>FUIMapLegend</code> presents a single section`
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
/// <code>FUIMapLegend</code> presents the number of rows of <code>FUIMapLegendItem</code>
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// <code>FUIMapLegend</code> dequeues a <code>FUIMapLegendItemTableViewCell</code> to present the <code>FUIMapLegendItem</code>
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
@end

@class UIPresentationController;
@protocol UIViewControllerAnimatedTransitioning;

@interface FUIMapLegend (SWIFT_EXTENSION(SAPFiori)) <UIViewControllerTransitioningDelegate>
/// Presents the presentation controller as a <code>FUIPartialSizePresentationController</code> only covering a portion of the screen on iPhone
- (UIPresentationController * _Nullable)presentationControllerForPresentedViewController:(UIViewController * _Nonnull)presented presentingViewController:(UIViewController * _Nullable)presenting sourceViewController:(UIViewController * _Nonnull)source SWIFT_WARN_UNUSED_RESULT;
/// Animates the sliding direction during presentation.
- (id <UIViewControllerAnimatedTransitioning> _Nullable)animationControllerForPresentedController:(UIViewController * _Nonnull)presented presentingController:(UIViewController * _Nonnull)presenting sourceController:(UIViewController * _Nonnull)source SWIFT_WARN_UNUSED_RESULT;
/// Animates the sliding direction during dismissal.
- (id <UIViewControllerAnimatedTransitioning> _Nullable)animationControllerForDismissedController:(UIViewController * _Nonnull)dismissed SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUIMapLegend (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end


/// <code>FUIMapLegendFillItem</code> is a <code>UIView</code> that presents a square view with a fill color and border color.
/// <h2>Available in FUIMapLegendFillItem:</h2>
/// <ul>
///   <li>
///     <code>fillColor</code>: a <code>UIColor</code> that is the fill color of the square view
///   </li>
///   <li>
///     <code>borderColor</code>: a <code>UIColor</code> that is the border color of the square view
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration:</h2>
/// \code
///
/// let highActivityRegion = FUIMapLegendFillItem()
/// highActivityRegion.fillColor = UIColor.preferredFioriColor(forStyle: .map3)
/// highActivityRegion.borderColor = UIColor.preferredFioriColor(forStyle: .map3)
/// var highActivityRegionItem = FUIMapLegendItem(title: "High Activity Region")
/// highActivityRegionItem.fillItem = highActivityRegion
///
/// legend.items = [highActivityRegionItem]
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori20FUIMapLegendFillItem")
@interface FUIMapLegendFillItem : UIView
/// An initializer to instantiate a <code>FUIMapLegendFillItem</code>
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// An initializer to instantiate a <code>FUIMapLegendFillItem</code>
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// The method responsible for adding the <code>CAShapeLayer</code> border with <code>UIBezierPath</code>
- (void)layoutSubviews;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end


/// A View that wraps the <code>FUIMapToolbarButton</code> in a vertical stack.
/// <ul>
///   <li>
///     The <code>FUIMapToolbar</code> holds a maximum of 6 <code>FUIMapToolbarButton</code>.
///   </li>
///   <li>
///     Default variants of <code>FUIMapToolbarButton</code> exist within the SDK.  See, <code>FUIMapToolbarSettingsButton</code>, <code>FUIMapToolbarUserLocationButton</code>, <code>FUIMapToolbarZoomExtentButton</code>, or <code>FUIMapToolbarLegendButton</code>
///   </li>
///   <li>
///     The <code>FUIMapToolbar</code> can be presented in either a dark or light variant.
///   </li>
///   <li>
///     The <code>FUIMapToolbar</code> will be pinned to the given <code>MKMapView</code> in the top right corner
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// var toolbar = FUIMapToolbar(mapView: mapView)
/// toolbar.backgroundColorScheme = .dark // defaults to `.light`
/// let locationButton = FUIMapToolbarUserLocationButton(mapView: self.mapView)
/// let zoomExtentsButton = FUIMapToolbarZoomExtentButton(mapView: self.mapView)
/// toolbar.items = [locationButton, zoomExtentsButton]
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori13FUIMapToolbar")
@interface FUIMapToolbar : UIView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end


@interface FUIMapToolbar (SWIFT_EXTENSION(SAPFiori))
@end


@interface FUIMapToolbar (SWIFT_EXTENSION(SAPFiori))
@end


@interface FUIMapToolbar (SWIFT_EXTENSION(SAPFiori))
@end


@interface FUIMapToolbar (SWIFT_EXTENSION(SAPFiori))
@end


@interface FUIMapToolbar (SWIFT_EXTENSION(SAPFiori))
@end




/// <code>FUIMapToolbarButton</code> inherits from the FUIButton class and appears within the <code>FUIMapToolbar</code>.
/// <ul>
///   <li>
///     Height and width are both set to 44
///   </li>
///   <li>
///     Images should be set to 28 by 28 icons.  Icons will be centered within the button.
///   </li>
///   <li>
///     didSelectHandler can be set to add custom functionality on tap
///   </li>
/// </ul>
/// <h2>Usage:</h2>
/// \code
/// let toolbar = FUIMapToolbar(mapView: self.mapView)
/// let settingsButton = FUIMapToolbarButton()
/// settingsButton.isPersistentSelection = true
/// settingsButton.setImage(FUIIconLibrary.system.information.withRenderingMode(.alwaysTemplate), for: .normal)
/// settingsButton.didSelectHandler = { [weak self] button in
///    DispatchQueue.main.async {
///        let settings = DevMapSettingsViewController()
///        settings.dismissButton = button
///
///        let navController = UINavigationController(rootViewController: settings)
///        if !(UIDevice.current.userInterfaceIdiom == .phone) {
///            settings.modalPresentationStyle = .formSheet
///            navController.modalPresentationStyle = .formSheet
///            self.present(navController, animated: true, completion: nil)
///        } else {
///            navController.modalPresentationStyle = .overFullScreen
///            let dismissClosure: (() -> Void)? = { [weak self] in
///                self.dismiss(animated: true, completion: nil)
///            }
///            settings.dismissClosure = dismissClosure
///            self.present(navController, animated: true, completion: nil)
///        }
///    }
/// }
/// toolbar.items = [settingsButton]
///
/// \endcode<h1>Notes</h1>
/// <ul>
///   <li>
///     Subclass the <code>FUIMapToolbarButton</code> for custom variants
///   </li>
///   <li>
///     See provided default variants: <code>FUIMapToolbarSettingsButton</code>, <code>FUIMapToolbarUserLocationButton</code>, <code>FUIMapToolbarZoomExtentButton</code>, and <code>FUIMapToolbarLegendButton</code>
///   </li>
///   <li>
///     See <code>FUIMapToolbarSettingsButton</code> documentation for supplementary <code>DevMapSettingsViewController</code> class
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8SAPFiori19FUIMapToolbarButton")
@interface FUIMapToolbarButton : FUIButton
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// A convenience initializer for the <code>FUIMapToolbarButton</code>.  Instantiates with a frame of zero.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
@end


/// The <code>FUIMapMarkerAnnotationView</code> inherits from the <code>MKMarkerAnnotationView</code> and is presented as an annotation on the <code>MKMapView</code>. It is used to distinguish between location types and set a select priority to individual markers.
/// <blockquote>
/// <em>Note</em>
/// We disabled setter of <code>zPosition</code> in order to prevent it from being modified when setting <code>displayPriority</code>. Set <code>stickyZPosition</code> instead.
///
/// </blockquote>
/// <h2>Available:</h2>
/// <ul>
///   <li>
///     <code>priorityIcon</code>: a 17x17 icon image in the upper right corner of the marker.  This can appear in both the selected and unselected state.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration</h2>
/// \code
/// @available(iOS 11.0, *)
/// class MyMarker: FUIMarkerAnnotationView {
///     override var annotation: MKAnnotation? {
///         willSet {
///             markerTintColor = UIColor.preferredFioriColor(forStyle: .map1)
///             glyphImage = FUIIconLibrary.map.marker.venue.withRenderingMode(.alwaysTemplate)
///             displayPriority = .defaultLow
///             priorityIcon =  FUIIconLibrary.map.marker.veryHighPriority
///         }
///     }
/// }
///
///
/// \endcodeRegister within the  viewDidLoad()
/// \code
/// if #available(iOS 11.0, *) {
///    mapView.register(MyMarker.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
/// } else {
///    // Fallback on earlier versions
/// }
/// let point1 = MKPointAnnotation()
/// point1.coordinate = CLLocationCoordinate2D(latitude: 37.3318, longitude: -122.0312)
/// let point2 = MKPointAnnotation()
/// point2.coordinate = CLLocationCoordinate2D(latitude: 37.3988313, longitude: -122.1487375)
/// let annotations = [point1 as MKAnnotation, point2 as MKAnnotation]
/// mapView.addAnnotations(annotations)
///
/// \endcodeSet the annotation view in the <code>mapView(_:viewFor:)</code> method.
/// \code
/// var view: MKAnnotationView!
/// if let pointAnnotation = annotation as? MKPointAnnotation {
///    if #available(iOS 11.0, *) {
///        view = FUIMarkerAnnotationView(annotation: pointAnnotation, reuseIdentifier: "cell")
///        let annotationImage = FUIIconLibrary.map.marker.venue
///        (view as! FUIMarkerAnnotationView).glyphImage = annotationImage.withRenderingMode(.alwaysTemplate)
///        (view as! FUIMarkerAnnotationView).priorityIcon =  FUIIconLibrary.map.marker.veryHighPriority
///    } else {
///        // Fallback on earlier versions
///        view = MKPinAnnotationView(annotation: pointAnnotation, reuseIdentifier: "cell")
///    }
/// }
/// return view
///
/// \endcode<h2>Note:</h2>
/// <ul>
///   <li>
///     Set the <code>glyphImage</code> to a 20x20 icon.
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8SAPFiori23FUIMarkerAnnotationView") SWIFT_AVAILABILITY(ios,introduced=11.0)
@interface FUIMarkerAnnotationView : MKMarkerAnnotationView
/// An initializer that instantiates a <code>FUIMarkerAnnotationView</code> with some reuseIdentifier.  Sets the tint color to a default value of <code>.map1</code>
- (nonnull instancetype)initWithAnnotation:(id <MKAnnotation> _Nullable)annotation reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Restore all user-defined properties to default before resue.
- (void)prepareForReuse;
/// A method that corrects the center of the priorityIconView based on the selected state.
/// \param selected a boolean value for selected (true) and unselected (false)
///
/// \param animated a boolean value determining if the animation will occur
///
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
@end


@interface FUIMarkerAnnotationView (SWIFT_EXTENSION(SAPFiori))
/// Override the layer factory for this class to return a custom CALayer class
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly) Class _Nonnull layerClass;)
+ (Class _Nonnull)layerClass SWIFT_WARN_UNUSED_RESULT;
@end

@class UINavigationBar;
@class UINavigationItem;

/// A view controller to be presented as a modal form sheet. The view controller shows a <code>CheckoutIndicatorView</code>, which is drawn based on the set <code>displayState</code>.
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let viewController = FUIModalCheckoutViewController.instantiateViewController()
/// viewController.title = "My Modal Checkout Title"
/// viewController.text = "Processing"
/// self.present(viewController, animated: false)
///
/// \endcode<h3>Inside a Storyboard:</h3>
/// <ol>
///   <li>
///     Drag and drop a <code>Storyboard Reference</code> component to Interface Builder’s canvas.
///   </li>
///   <li>
///     Enter <code>FUIModalCheckout</code> as Storyboard and <code>com.sap.cp.sdk.ios.SAPFiori</code> as Bundle.
///   </li>
///   <li>
///     Create a segue between your Button and the storyboard reference and select <code>Present Modally</code> as action.
///   </li>
///   <li>
///     Select the segue and in Interface Builder give it an identifier (e.g. <code>showModalCheckout</code>).
///   </li>
///   <li>
///     In your view controller override <code>prepare(for segue: UIStoryboardSegue, sender: Any?)</code>
///   </li>
///   <li>
///     From the segue get the destination and cast it to <code>FUIModalCheckoutViewController</code>.
///   </li>
///   <li>
///     You can then register a delegate or change the controller’s display state.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
///
/// // override `prepareForSegue`-method and retrieve view controller from segue destination.
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
///    guard let showModalCheckoutSegue = segue.identifier, showModalCheckoutSegue == "showModalCheckout" else {
///        return
///    }
///    
///    // keep a (weak) reference to modalCheckoutViewController
///    self.modalCheckoutViewController = segue.destination as? FUIModalCheckoutViewController
///    self.modalCheckoutViewController?.delegate = self
/// }
///
/// // implementation of FUIModalCheckoutViewControllerDelegate callback.
/// public func dismissController(_ controller: FUIModalCheckoutViewController) {
///    //stop any loading or checkout! User cancelled it...
///    //... or set state to completed.
///    self.modalCheckoutViewController?.changeDisplayState(to: .completed) {
///        self.modalCheckoutViewController?.dismiss(animated: true)
///    }
/// }
///
/// // While the FUIModalCheckoutViewController is shown, you might want to change the display state according to 
/// // your loading / checkout progress. E.g. when you are done, you can change the state to `.completed`.
/// self.modalCheckoutViewController?.displayState = .completed
/// self.modalCheckoutViewController?.text = "Completed"
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIModalCheckoutViewController
/// fdlFUIModalCheckoutViewController_textLabel
/// fdlFUIModalCheckoutViewController_navigationBar
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIModalCheckoutViewControllerDelegate</code> is declared as a weak reference. So on deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori30FUIModalCheckoutViewController")
@interface FUIModalCheckoutViewController : UIViewController
/// :nodoc:
@property (nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle;
/// This view controller’s navigation bar.
@property (nonatomic, readonly, strong) IBOutlet UINavigationBar * _Null_unspecified navigationBar;
/// The navigation Bar Title Item
@property (nonatomic, readonly, strong) IBOutlet UINavigationItem * _Null_unspecified navigationBarTitleItem;
/// UIBarButtonItem of the view controller, representing the Done-Button.
@property (nonatomic, readonly, strong) IBOutlet UIBarButtonItem * _Null_unspecified leftBarButtonItem;
/// UILabel below the checkout indicator view, to indicate the current displayState using a text label.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified textLabel;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIModalLoadingIndicatorView</code> shows a <code>FUILoadingIndicatorView</code> centered in a container area of the screen and disables interaction. The container can be either a view or a window.
/// By default, the loading indicator is shown centered on screen. The view is not visible and the animation is stopped until <code>show()</code> is called.
/// <h2>Initialization</h2>
/// \code
/// let modalLoadingIndicatorView = FUIModalLoadingIndicatorView()
///
/// \endcode<h2>Usage</h2>
/// <h3>Show Fullscreen</h3>
/// \code
/// modalLoadingIndicatorView.show()
/// // do something
/// modalLoadingIndicatorView.dismiss()
///
/// \endcode<h3>Show in View</h3>
/// \code
/// let containerView = UIView()
/// modalLoadingIndicatorView.show(inView: containerView)
/// // do something
/// modalLoadingIndicatorView.dismiss()
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori28FUIModalLoadingIndicatorView")
@interface FUIModalLoadingIndicatorView : NibDesignable
/// Loading indicator that is centered in container.
@property (nonatomic, readonly, weak) IBOutlet FUILoadingIndicatorView * _Null_unspecified loadingIndicator;
/// Text of <code>loadingIndicator</code>’s text label. The default is a localized version of <code>LOADING</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable text;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class FUIProcessingIndicatorView;

/// <code>FUIModalProcessingIndicatorView</code> shows a <code>FUIProcessingIndicatorView</code> centered in a container area of the screen and disables interaction. The container can be either a view or a window. An overlay is shown behind the processing indicator, which covers the whole container. The overlay can be either set to translucent white or to be using a <code>UIVisualEffectView</code> to achieve a blurred background.
/// By default, the processing indicator is shown centered on screen and shows a translucent white overlay. The view is not visible and the animation is stopped until <code>show()</code> is called.
/// To change the background mode to blurred, simply assign <code>BackgroundMode.blurred</code> to the <code>backgroundMode</code> property.
/// <h2>Initialization</h2>
/// \code
/// let modalProcessingIndicatorView = FUIModalProcessingIndicatorView()
///
/// \endcode<h2>Usage</h2>
/// <h3>Show Fullscreen</h3>
/// \code
/// modalProcessingIndicatorView.show()
/// // do something
/// modalProcessingIndicatorView.dismiss()
///
/// \endcode<h3>Show in View</h3>
/// \code
/// let containerView = UIView()
/// modalProcessingIndicatorView.show(inView: containerView)
/// // do something
/// modalProcessingIndicatorView.dismiss()
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori31FUIModalProcessingIndicatorView")
@interface FUIModalProcessingIndicatorView : NibDesignable
/// Processing indicator that is centered in container.
@property (nonatomic, readonly, weak) IBOutlet FUIProcessingIndicatorView * _Null_unspecified processingIndicator;
/// Text of <code>processingIndicator</code>’s text label. The default is <code>nil</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable text;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
@end


/// <code>FUINavigationBar</code> is a subclass of ‘UINavigationBar’ which applies the Fiori Design Language styling by default.
/// It exposes a <code>bannerView: FUIBannerMessageView</code> view property, which may be presented, using the <code>FUIBannerMessageView</code> <code>show()</code> method.  By default, the message is shown centered on screen under the navigation bar.
/// <h2>Usage</h2>
/// <h3>Configuration</h3>
/// Setup a <code>FUINavigationBar</code> in your navigation controller. You can set either in storyboard or programmatically.
/// <h3>Presenting <code>FUIBannerMessageView</code></h3>
/// \code
/// guard let navBar = self.navigationController?.navigationBar as? FUINavigationBar else {
///    return
/// }
///
/// navBar.bannerView?.show(message: "This is a test banner", withDuration: 1, animated: true)
///
/// \endcode<h2>Theming</h2>
/// <code>bar-tint-color</code> is intended to be used for backward compatibility on iOS 12. In order to customize navigation bar color on iOS 13 or above, developer should either set <code>background-color</code> to apply one color to all bar appearences, or configure <code>standard-background-color</code>, <code>scrolledge-background-color</code> and <code>scrolledge--background-color</code> as a whole for different color settings.
/// \code
/// NavigationBar {
///    background-color: @primary1_darkBackground;
///    background-tint-color: @tintColorDark;
/// }
///
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori16FUINavigationBar")
@interface FUINavigationBar : UINavigationBar
/// :nodoc:
@property (nonatomic, strong) UIColor * _Nullable barTintColor;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end


/// This <code>FUINavigationController</code> is needed for iOS 13.4 and above devices to control the status bar style used by
/// SAPFiori UI components.
/// Note that before iOS 13.4, it is recommended to use an extension of <code>UINavigationController</code> in the application to override the <code>preferredStatusBarStyle</code>, as documented in <code>FUIStatusBarStyleHelper</code>’s header doc. However, it does not
/// work for iOS 13.4 and later iOS versions. Developers need to use this <code>FUINavigationController</code> which overrides the <code>preferredStatusBarStyle</code> property of standard <code>UINavigationController</code> in order for the <code>preferredStatusBarStyle</code> to be invoked for iOS 13.4 and above.
/// The application should use <code>FUINavigationController</code> instead of standard <code>UINavigationController</code> when
/// displaying SAPFiori UI components in order for the correct status bar style to be displayed. This functionality is achieved in cooperation
/// with <code>FUIStatusBarStyleHelper</code>.
/// Application developers can also use <code>FUINavigationController</code> in the launch storyboard so that it can use  <code>FUIStatusBarStyleHelper</code>
/// to set the application’s status bar style as needed in other application views as well.
SWIFT_CLASS("_TtC8SAPFiori23FUINavigationController")
@interface FUINavigationController : UINavigationController
/// Overrides the standard <code>preferredStatusBarStyle</code> in <code>UINavigationController</code>.
/// It returns the <code>FUIStatusBarStyleHelper.statusBarStyle</code> if its value is not <code>nil</code>.
/// The following is the implementation code:
/// \code
/// if let statusBarStyle = FUIStatusBarStyleHelper.statusBarStyle {
///     return statusBarStyle
/// }
/// return navigationBar.barStyle == .default ? .lightContent : .darkContent
///
/// \endcode
@property (nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle;
- (nonnull instancetype)initWithNavigationBarClass:(Class _Nullable)navigationBarClass toolbarClass:(Class _Nullable)toolbarClass OBJC_DESIGNATED_INITIALIZER SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(ios,introduced=5.0);
- (nonnull instancetype)initWithRootViewController:(UIViewController * _Nonnull)rootViewController OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end

@class NSString;

/// This is an implementation of <code>FUIFormattedStringEditing</code> on top of the regular iOS <code>NumberFormatter</code>.
/// The main enhancement is to add the support to handle cursor positions.
/// Here are two examples when using with the <code>FUITextFieldFormCell</code>:
/// <ul>
///   <li>
///     As a currency number formatter
///   </li>
/// </ul>
/// \code
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUITextFieldFormCell.reuseIdentifier) as! FUITextFieldFormCell
/// cell.keyName = "Price"
/// cell.keyboardType = .decimalPad
/// let formatter = FUINumberFormatter()
/// formatter.numberStyle = .currency
/// cell.formatter = formatter
/// ...
///
/// \endcodeThe text field will display “$12.34” when user types “12.34”.
/// <ul>
///   <li>
///     With custom suffix
///   </li>
/// </ul>
/// \code
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUITextFieldFormCell.reuseIdentifier) as! FUITextFieldFormCell
/// cell.keyName = "Weight"
/// cell.keyboardType = .decimalPad
/// let formatter = FUINumberFormatter()
/// formatter.numberStyle = .decimal
/// formatter.maximumFractionDigits = 3
/// formatter.positiveSuffix = "lbs"
/// cell.formatter = formatter
///
/// \endcodeThe text field will display “1.234lbs” when user types “1.234”.
SWIFT_CLASS("_TtC8SAPFiori18FUINumberFormatter")
@interface FUINumberFormatter : NSNumberFormatter
/// :nodoc:
- (NSString * _Nullable)editingStringForObjectValue:(id _Nonnull)obj SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)isPartialStringValid:(NSString * _Nonnull)partialString newEditingString:(NSString * _Nullable * _Nullable)newString errorDescription:(NSString * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

@class UIStackView;

/// <code>FUIObjectCell</code> is an Interface-Builder-designable UI component that extends <code>UIView</code> for showing object information. It contains a set of default content views that are common to Fiori Design Language Object Cell types, with the associated constraint implementations and handling for size classes.
/// <h2>Views Available in FUIObjectCell:</h2>
/// <ul>
///   <li>
///     <code>iconsStackView</code>: a <code>UIStackView</code> view expected to contain a vertical stack of icons/images in its view content. The view is added to the cell unless <code>cell.preserveIconStackSpacing</code> is set to <code>false</code>. This is the first view in the cell and can be left to <code>detailImageView</code>. Use <code>cell.iconImages</code> to add image(s) to the stack view. Each icon/image size is set to be <code>16px</code> by <code>16px</code>.
///   </li>
///   <li>
///     <code>detailImageView</code>: an <code>FUIImageView</code> view added to the cell unless <code>cell.preserveDetailImageSpacing</code> is set to <code>false</code>. The view is to the right of <code>iconsStackView</code> and left of <code>headlineLabel</code>. The image is scaled to fit with fixed aspect. The image size is set to <code>45px</code> by <code>45px</code>. Use <code>cell.detailImage</code> to set the image.
///   </li>
///   <li>
///     <code>headlineLabel</code>: a <code>UILabel</code> view is always displayed and intended to display a headline text in the cell. Use <code>cell.headlineText</code> to set label text.
///   </li>
///   <li>
///     <code>subheadlineLabel</code>: a <code>UILabel</code> view is added 3px below <code>headlineLabel</code> to the cell. Use `cell.subheadlineText” to set label text.
///   </li>
///   <li>
///     <code>footnoteLabel</code>: a <code>UILabel</code> view is added 3px below <code>subheadLabel</code> to the cell. Use <code>cell.footnoteText</code> to set label text.
///   </li>
///   <li>
///     <code>descriptionLabel</code>: a <code>UILabel</code> view intended to display long text in the cell. It gets displayed only in regular view. The view is to the right of <code>headlineLabel</code> and left of <code>statusImageView</code>(or <code>statusLabel</code>). Use `cell.descriptionText” to set label text.
///   </li>
///   <li>
///     <code>statusImageView</code>/<code>statusLabel</code>: a <code>UIImageView</code>/<code>UILabel</code> added to the cell for status. <code>statusImageView</code> gets added with size <code>16px</code> by <code>16px</code>. The view is to the left of accessory view and right of <code>descriptionLabel</code>. Use <code>cell.statusText</code> to set label text or <code>cell.statusImage</code> to set image.
///   </li>
///   <li>
///     <code>substatusImageView</code>/<code>substatusLabel</code>: a <code>UIImageView</code>/<code>UILabel</code> added to the cell under status. <code>substatusImageView</code> gets added with size <code>16px</code> by <code>16px</code>. Use <code>cell.substatusText</code> to set label text or <code>cell.substatusImage</code> to set image. An error will be logged when <code>accessoryType</code> is not <code>.none</code> nor <code>.disclosureIndicator</code>, then setting a substatus label text or substatus image as this setting breaks the Fiori Design Language pattern.
///   </li>
///   <li>
///     <code>accessoryView</code>:  a <code>UIView</code> added to the view when <code>cell.accessoryType</code> is not <code>.none</code>. The view is a <code>UIButton</code> customized in <code>FUIObjectCell</code> and is aligned to the baseline of <code>headlineLabel</code> when the type is <code>.disclosureIndicator</code>. For any other types, it’s vertically center-aligned and created by Apple native SDK.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration</h2>
/// \code
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///     let cell = tableView.dequeueReusableCell(withIdentifier: ObjectTableViewCell.reuseIdentifier, for: indexPath as IndexPath) as! ObjectTableViewCell
///     cell.detailImage = UIImage(named: "ProfilePic")
/// // To enable a default gradient layer behind the placeholder text.
///     cell.detailImageView.isGradientLayerEnabled = true
/// // Set placeholder text.
///     cell.detailImageView.placeholder.text = "This is a placeholder"
///     cell.headlineText = "Edgar Scissorhands"
///     cell.subheadlineText = "Lorem ipsum datil es iosin Lotios nsiqok"
///     cell.footnoteText = "Here is some footer text about Edward"
///     cell.statusImageView.image = UIImage(named: "ErrorIcon")
///     cell.substatusText = "Active"
///     cell.descriptionText = "This text is only visible when the cell is in regular horizontal size class."
///     cell.iconImages = [#imageLiteral(resourceName: "clock"), #imageLiteral(resourceName: "check"), #imageLiteral(resourceName: "attention")]
///     cell.accessoryType = .disclosureIndicator
///     return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIObjectCell
/// fdlFUIObjectCell_headlineLabel
/// fdlFUIObjectCell_subheadLabel
/// fdlFUIObjectCell_footnoteLabel
/// fdlFUIObjectCell_statusLabel
/// fdlFUIObjectCell_substatusLabel
/// fdlFUIObjectCell_descriptionLabel
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori13FUIObjectCell") SWIFT_DEPRECATED_MSG("Use `FUIObjectView`, instead.")
@interface FUIObjectCell : NibDesignable
/// Icons Stack view that contains a stack of icons/images in its contents. Each icon/image size is set to be <code>16px</code> by <code>16px</code>. Count of visible images is limited to the count of active labels in the main stack.
@property (nonatomic, readonly, strong) IBOutlet UIStackView * _Null_unspecified iconsStackView;
/// Detail image view that contains an image with size of 45px x 45px.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified detailImageView;
/// A headline label in the main view with <code>UIFontTextStyleHeadline</code> style setting as the preferred font. Use <code>headlineText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified headlineLabel;
/// A subheader label in the main view with <code>UIFontTextStyleBody</code> style setting as the preferred font. Use <code>subheadlineText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified subheadlineLabel;
/// A footnote label in the main view with <code>UIFontTextStyleSubheadline</code> style setting as the preferred font. Use <code>footnoteText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified footnoteLabel;
/// A description label displayed in the description view when size class is .regular. Use <code>descriptionText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified descriptionLabel;
/// A status label displayed in the status view. Use <code>statusText</code> to set the label’s text value. Status Label and status image cannot coexist in display. When both are set, only the last one set gets displayed.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified statusLabel;
/// A status image displayed in the status view. Use <code>statusImage</code> to set an image. It’s expected to either set <code>statusText</code> or <code>statusImage</code> to display either one at the same position. When both <code>statusText</code> and <code>statusImage</code> are set, only the last property set gets displayed.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified statusImageView;
/// A substatus label displayed below <code>statusImageView</code> or <code>statusLabel</code>. Use <code>substatusLabel</code> to set the label’s text value. It’s expected to either set <code>substatusText</code> or <code>substatusImage</code> to display either one at the same position. When both <code>statusText</code> and <code>statusImage</code> are set, only the last property set gets displayed. An error will be logged when <code>accessoryType</code> is not <code>.none</code> nor <code>.disclosureIndicator</code>, then setting a substatus label text or substatus image as this setting breaks the Fiori Design Language pattern.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified substatusLabel;
/// A substatus image displayed below <code>statusImageView</code> or <code>statusLabel</code>. Use <code>substatusImage</code> to set an image to the view. It’s expected to either set <code>stubsatusText</code> or <code>substatusImage</code> to display either one at the same position. When both <code>substatusText</code> and <code>substatusImage</code> are set, only the last property set gets displayed. An error will be logged when <code>accessoryType</code> is not <code>.none</code> nor <code>.disclosureIndicator</code>, then setting a substatus label text or substatus image as this setting breaks the Fiori Design Language pattern.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified substatusImageView;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)observeValueForKeyPath:(NSString * _Nullable)keyPath ofObject:(id _Nullable)object change:(NSDictionary<NSKeyValueChangeKey, id> * _Nullable)change context:(void * _Nullable)context;
/// Array of images, to be rendered in <code>iconStackView</code>. Count of visible images is limited, to the count of active labels in the main stack.
@property (nonatomic, copy) IBInspectable NSArray<UIImage *> * _Nonnull iconImages;
/// Property to preserve <code>iconStackView</code> spacing. When it’s set to <code>true</code>, spacing is preserved for <code>iconStackView</code> even when there are no icons/images added to the icon stack
@property (nonatomic) IBInspectable BOOL preserveIconStackSpacing;
/// Property to set image of <code>DetailImageView</code>
@property (nonatomic, strong) IBInspectable UIImage * _Nullable detailImage;
/// Property to preserve <code>detailImageView</code> spacing. When it’s set to true, spacing is preserved for <code>detailImageView</code> even when there’s no image added to the image view.
@property (nonatomic) IBInspectable BOOL preserveDetailImageSpacing;
/// Text of <code>headlineLabel</code>
@property (nonatomic, copy) IBInspectable NSString * _Nullable headlineText;
/// Text of <code>subheadlineLabel</code>. The label is initially hidden. Setting a non-empty value would no longer hide the label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subheadlineText;
/// Text of <code>footnoteLabel</code>. The label is initially hidden. Setting a non-empty value would no longer hide the label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable footnoteText;
/// Text of <code>descriptionLabel</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable descriptionText;
/// Text of <code>statusLabel</code>. An empty string value hides <code>statusLabel</code>. It’s expected to either set <code>statusText</code> or <code>statusImage</code> to display either one at the same position. When both <code>statusText</code> and <code>statusImage</code> are set, only the last property set gets displayed.
@property (nonatomic, copy) IBInspectable NSString * _Nullable statusText;
/// Image of status image view
@property (nonatomic, strong) IBInspectable UIImage * _Nullable statusImage;
/// Text of substatus label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable substatusText;
/// Image of substatus image view.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable substatusImage;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)didMoveToWindow;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForFirstBaselineLayout;
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull viewForLastBaselineLayout;
@end


/// <h2>Theming</h2>
/// Supported <code>ObjectHeaderView</code> class paths:
/// View {}
/// fdlFUIObjectHeaderView {}
/// Supported <code>ObjectHeaderView</code> attributes:
/// tint-color (Color)
/// background-color (Color)
/// Supported <code>Text</code> class paths:
/// fdlObjectHeaderView_headlineLabel {}
/// fdlObjectHeaderView_subheadlineLabel {}
/// fdlObjectHeaderView_bodyLabel {}
/// fdlObjectHeaderView_footnoteLabel {}
/// fdlObjectHeaderView_descriptionLabel {}
/// fdlObjectHeaderView_statusLabel {}
/// fdlObjectHeaderView_substatusLabel {}
/// Supported <code>Text</code> attributes:
/// font-color (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-align (TextAlign)
/// text-line-clamp (Integer)
/// Supported <code>ImageView</code> class paths:
/// fdlObjectHeaderView_detailImageView {}
/// fdlObjectHeaderView_statusImageView {}
/// fdlObjectHeaderView_substatusImageView {}
/// Supported <code>ImageView</code> attributes:
/// image-name (Image)
/// tint-color (Color)
SWIFT_CLASS("_TtC8SAPFiori19FUIObjectHeaderView")
@interface FUIObjectHeaderView : FUIDrawingView
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
@property (nonatomic, readonly) BOOL canBecomeFirstResponder;
/// :nodoc:
- (void)copy:(id _Nullable)sender;
/// :nodoc:
- (BOOL)canPerformAction:(SEL _Nonnull)action withSender:(id _Nullable)sender SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end








/// <code>FUIOfflineBannerMessageView</code> shows an overlay message centered in the screen underneath a navigation bar. <code>FUIOfflineBannerMessageView</code> must be attached to a <code>FUINavigationBar</code> to make it work properly.
/// <code>FUIOfflineBannerMessageView</code> is a subclass of <code>FUIBannerMessageView</code> and <code>FUINavigationBar</code> can contain only one <code>FUIBannerMessageView</code>.
/// Call <code>show()</code> on a <code>FUIOfflineBannerMessageView</code> instance to show the message. By default, the message is shown centered on screen for four seconds.
/// <h2>Usage</h2>
/// Usually, the creation of <code>FUIOfflineBannerMessageView</code> and attachment to FUINavigationBar is
/// in the <code>viewDidAppear</code> function of a <code>UIViewController</code>. As the code indicates below:
/// \code
/// override public func viewDidAppear(_ animated: Bool) {
///     super.viewDidAppear(animated)
///
///     guard let navBar = self.navigationController?.navigationBar as? FUINavigationBar else {
///         return
///     }
///
///     let offlineBannerView = FUIOfflineBannerMessageView()
///     navBar.bannerView = offlineBannerView
///     offlineBannerView.show(message: "200k pending to upload example with text showing wrapping to two lines")
///     self.offlineBanner = offlineBannerView
/// }
///
///
/// \endcode<h2>Theming</h2>
/// \code
///
/// fdlFUIOfflineBannerMessageView_titleLabel {
/// font-size: 13;
/// font-name: mediumSystem;
/// font-color: @primary7;
/// font-color-highlighted: @tintColorDark;
/// }
///
/// fdlFUIOfflineBannerMessageView_dividerBottom {
/// background-color: @line;
/// }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori27FUIOfflineBannerMessageView")
@interface FUIOfflineBannerMessageView : FUIBannerMessageView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Subclass of <code>FUIButton</code>, which fixes the issue in setting button width and height in supporting label text wrapping
SWIFT_CLASS("_TtC8SAPFiori19FUIOnboardingButton")
@interface FUIOnboardingButton : FUIButton
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// This is the view that will be displayed when the scanner got a QR code from either
/// scanner or a photo image. And this QR code is validated by the delegate of the
/// <code>FUIOnboardingScanViewController</code>.
/// This view includes the following components:
/// <ul>
///   <li>
///     Title label: with default text “Confirmation”
///   </li>
///   <li>
///     Check image: a green circle with white check mark in the middle
///   </li>
///   <li>
///     Success message label: with default text “Scan succeeded. You will be connected to:”
///   </li>
///   <li>
///     HCP server label: the text should be the hcp server name that the implementation of the following function of
///     <code>FUIWelcomeControllerDelegate</code> should provide.
///     \code
///     func welcomeController(_ welcomeController: FUIWelcomeController, willNavigateToScannerScreen scanController: FUIOnboardingScanViewController)
///
///     \endcode</li>
///   <li>
///     Continue button: when this is tapped, the app will continue rest of the orboarding tasks.
///   </li>
/// </ul>
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIOnboardingScanConfirmView
/// fdlFUIOnboardingScanConfirmView_titleLabel
/// fdlFUIOnboardingScanConfirmView_successMessageLabel
/// fdlFUIOnboardingScanConfirmView_hcpServerLabel
/// fdlFUIOnboardingScanConfirmView_continueButton
/// fdlFUIOnboardingScanConfirmView_continueButton_touchDown
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori28FUIOnboardingScanConfirmView")
@interface FUIOnboardingScanConfirmView : NibDesignable
/// This is the width of the “Continue” button.
/// Developer may set the width of this button.
/// The default is 201 px.
@property (nonatomic, weak) IBOutlet NSLayoutConstraint * _Null_unspecified continueButtonWidthConstraint;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)layoutSubviews;
@end


/// This controller is to display the scanner view to scan a QR code for app activation.
/// It is also displaying the image thumbnails from camera roll and a button to start photo picker
/// that user may choose the QR code image directly.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIOnboardingScanViewController
/// fdlFUIOnboardingScanViewController_cancelButton
/// fdlFUIOnboardingScanViewController_flashButton
/// fdlFUIOnboardingScanViewController_choosePhotoButton
/// fdlFUIOnboardingScanViewController_arrowButton
/// fdlFUIOnboardingScanViewController_scanGuidesImageView
/// fdlFUIOnboardingScanViewController_photoPicker_navigationBar
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIOnboardingScanViewControllerDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori31FUIOnboardingScanViewController")
@interface FUIOnboardingScanViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate>
/// :nodoc:
@property (nonatomic, readonly) BOOL prefersStatusBarHidden;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView * _Nonnull)collectionView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// Delegate protocol for <code>FUIOnboardingScanViewController</code>.
SWIFT_PROTOCOL("_TtP8SAPFiori39FUIOnboardingScanViewControllerDelegate_")
@protocol FUIOnboardingScanViewControllerDelegate
@optional
/// A QR code has been successfully scanned. The implementation should validate this QR code.
///
/// returns:
/// True if the QR code is validated successfully and the confirm view will be displayed.
/// Otherwise, an alert will be displayed to alert user to scan another QR code, or select another
/// QRCode image. Caller can use the <code>invalidQRCodeTitleString</code>, <code>invalidQRCodeMessageString</code>,
/// and <code>okButtonString</code> properties to customize the alert.
- (BOOL)scanViewController:(FUIOnboardingScanViewController * _Nonnull)scanViewController shouldValidateScanResult:(NSString * _Nonnull)scanResult SWIFT_WARN_UNUSED_RESULT;
@end

@protocol UIPageViewControllerDataSource;
@protocol UIPageViewControllerDelegate;

/// This controller is based on the standard <code>UIPageViewController</code> to navigate between sibling controllers.
/// <ul>
///   <li>
///     There are ‘Previous’ and ‘Next’ buttons in the bottom tool bar to help user navigation. This is in addition to the user swipe gestures handled in the <code>UIPageViewController</code>.
///   </li>
///   <li>
///     The title of the navigation controller consists of a page index title and a page subtitle. Please refer to <code>FUIPageViewController.TitleView</code>.
///   </li>
/// </ul>
/// <h2>Theming</h2>
/// Supported <code>TEXT</code> class paths:
/// \code
/// fdlFUIPageViewController_title {}
/// fdlFUIPageViewController_subtitle {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
/// font-color: (Color)
/// font-style: (UIFontTextStyle)
///
/// \endcodeSupported <code>BarButtonItem</code> class paths:
/// \code
/// fdlFUIPageViewController_nextButtonItem
/// fdlFUIPageViewController_previousButtonItem
///
/// \endcodeSupported <code>UIBarButtonItem</code> properties:
/// \code
/// font-color { -disabled } (Color)
/// font-style: { -disabled } (UIFontTextStyle)
/// image { -disabled } (Image)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUIPageViewController")
@interface FUIPageViewController : UIPageViewController
/// An implementation of <code>UIPageViewControllerDataSource</code>.
/// Developers may provide a <code>FUIPageViewControllerDataSource</code> implementation which
/// implements the optional <code>presentationTitle</code> function to set the subtitle of the
/// <code>TitleView</code> for each page to be displayed.
/// Or, developers just provide a standardard <code>UIPageViewControllerDataSource</code>
/// here. In this case, the subtitle of the <code>TitleView</code> is empty.
@property (nonatomic, strong) id <UIPageViewControllerDataSource> _Nullable dataSource;
/// :nodoc:
@property (nonatomic, strong) id <UIPageViewControllerDelegate> _Nullable delegate;
/// :nodoc:
- (nonnull instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary<UIPageViewControllerOptionsKey, id> * _Nullable)options OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
@end


@interface FUIPageViewController (SWIFT_EXTENSION(SAPFiori)) <UIPageViewControllerDataSource>
/// :nodoc:
- (UIViewController * _Nullable)pageViewController:(UIPageViewController * _Nonnull)pageViewController viewControllerBeforeViewController:(UIViewController * _Nonnull)viewController SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UIViewController * _Nullable)pageViewController:(UIPageViewController * _Nonnull)pageViewController viewControllerAfterViewController:(UIViewController * _Nonnull)viewController SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUIPageViewController (SWIFT_EXTENSION(SAPFiori)) <UIPageViewControllerDelegate>
/// :nodoc:
- (void)pageViewController:(UIPageViewController * _Nonnull)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> * _Nonnull)pendingViewControllers;
/// :nodoc:
- (void)pageViewController:(UIPageViewController * _Nonnull)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> * _Nonnull)previousViewControllers transitionCompleted:(BOOL)completed;
/// :nodoc:
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController * _Nonnull)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController * _Nonnull)pageViewController SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UIInterfaceOrientation)pageViewControllerPreferredInterfaceOrientationForPresentation:(UIPageViewController * _Nonnull)pageViewController SWIFT_WARN_UNUSED_RESULT;
@end


/// <code>FUIPageViewControllerDataSource</code> is to provide the data information for a <code>FUIPabeViewController</code>.
/// <code>FUIPageViewControllerDataSource</code> extends the standard iOS <code>UIPageViewControllerDataSource</code> and
/// adding an optional function to allow developer to specify the presentation title for the page view.
SWIFT_PROTOCOL("_TtP8SAPFiori31FUIPageViewControllerDataSource_")
@protocol FUIPageViewControllerDataSource <UIPageViewControllerDataSource>
@optional
/// The title to be displayed for this <code>FUIPageViewController</code>.
/// Thie title will be displayed in the <code>subtitle</code> field of the <code>TitleView</code> in the
/// navigation bar of the <code>FUIPageViewController</code>.
- (NSString * _Nullable)presentationTitleFor:(FUIPageViewController * _Nonnull)pageViewController SWIFT_WARN_UNUSED_RESULT;
@end


/// Use this <code>UINavigationController</code> to change the passcode screen flows in the application.
/// Set up the following properties before presenting this <code>FUIPasscodeChangeController</code>:
/// <ul>
///   <li>
///     passcodeControllerDelegate: An implementation of <code>FUIPasscodeControllerDelegate</code> that handles events from this controller for both <code>FUIPasscodeInputController</code> and <code>FUIPasscodeCreateController</code>.
///   </li>
///   <li>
///     validationDelegate: An implementation of <code>FUIPasscodeValidationDelegate</code> that validates the passcode entered by the user.
///   </li>
/// </ul>
/// Note that the properties <code>hashUserPasscode</code> and <code>userIdentifier</code> need to be the same as the <code>FUIPasscodeCreateController</code> in order for the change to be successful.
/// Here is the screen flow:
/// <ul>
///   <li>
///     The first screen prompts the user to enter the current passcode using <code>FUIPasscodeInputController</code>.   This controller always uses the passcode for authentication only.
///     <em>Note</em>: If Touch ID is enabled, there will be Touch ID authentication popup to prompt user
///     authenticate with Touch ID. Once user enters fingerprint or device passcode, the stored passcode in the keychain is retrieved and the delegat’s <code>shouldTryPasscode</code> is invoked to validate the old passcode. And a new passcode is generated and <code>shouldTryPasscode</code> is invoked again to validate the new passcode. The new passcode is then saved in the keychain without other user actions.
///   </li>
///   <li>
///     The second screen prompts the user to enter a new passcode, which is validated by the <code>FUIPasscodePolicy</code>. The <code>FUIPasscodeControllerDelegate</code> provided function <code>validate</code> of <code>validationDelegate</code> is invoked for additional validation. Upon validation success, the next screen displays.
///   </li>
///   <li>
///     The third screen prompts the user to enter the passcode again to verify the passcode entered in the second screen.  After the setup is complete, the function <code>shouldTryPasscode</code>
///     of the <code>FUIPasscodeControllerDelegate</code> is invoked. The delegate should either create a secure store with the passcode, or save the passcode in a secure manner.
///     <em>Note</em>: Changing the passcode does not affect the existing Touch ID preferences. No additional screens display to enable touchID to change the passcode flow.  If touchID was previously disabled before triggering the passcode change, touchID remains disabled.  However, if touchID was previously enabled, the internal touchID-related data is automatically updated after the passcode is changed.
///   </li>
/// </ul>
/// This passcode flow change is implemented in <code>FUIPasscodeChangeController.storyboard</code>. There are two ways to invoke it:
/// <ul>
///   <li>
///     Use another storyboard and add a “Present Modally” segue to the <code>FUIPasscodeChangeController</code> storyboard in the <code>SAPFiori</code> framework bundle.
///     The app developer must provide the required properties in the <code>UIController</code>’s prepare for segue function:
///   </li>
/// </ul>
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
///    let changeController = segue.destination as! FUIPasscodeChangeController
///    changeController.passcodeControllerDelegate = passcodeControllerDelegate
///    changeController.validationDelegate = validationDelegate
/// }
///
///
/// \endcode<ul>
///   <li>
///     Programmatically load it:
///   </li>
/// </ul>
/// \code
///    let changeController = FUIPasscodeChangeController.createInstanceFromStoryboard()
///    changeController.passcodeControllerDelegate = passcodeControllerDelegate
///    changeController.validationDelegate = validationDelegate
///    self.present(changeController, animated: true, completion: nil)
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori27FUIPasscodeChangeController")
@interface FUIPasscodeChangeController : FUINavigationController
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
- (nonnull instancetype)initWithNavigationBarClass:(Class _Nullable)navigationBarClass toolbarClass:(Class _Nullable)toolbarClass SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithRootViewController:(UIViewController * _Nonnull)rootViewController SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
@end


/// This is the base class of <code>FUIPasscodeCreateController</code> and <code>FUIPasscodeInputController</code>.
/// It has the common codes for those two view controllers.
/// Note that both Passcode screen and Touch ID screen are supported for iPad portrait and landscape orientation and iPhone portrait orientation only.
/// Since the screens are not supported in iPhone landscape orientation, the app installed in iPhone needs to switch to portrait mode before presenting these screens.
/// And AppDelegate needs to lock the screen orientation when these screens are shown, similar to the following code snippet.
/// In app’s AppDelegate:
/// \code
///
/// public var inPasscodeView: Bool = false
///
/// // implement this function to support only portrait orientation when FUPasscodeView is displayed in iPhone.
/// func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
/// if !inPasscodeView {
/// return .allButUpsideDown
/// } else {
/// return .portrait
/// }
/// }
///
///
/// \endcodeBefore presenting the Passcode or Touch ID screen:
/// \code
///
/// // Let AppDelegate know that we are entering FUIPasscodeView
/// (UIApplication.shared.delegate as! AppDelegate).inPasscodeView = true
///
/// // Make sure we rotate to portrait mode
/// let value = UIInterfaceOrientation.portrait.rawValue
/// UIDevice.current.setValue(value, forKey: "orientation")
/// // Present the passcode view
/// self.navigationController?.present(navController, animated: true, completion: nil)
///
///
/// \endcodeAfter dismissing the Passcode or Touch ID screen:
/// \code
///
/// passcodeController.dismiss(animated: true, completion: nil)
/// // Let AppDelegate know that we are exiting FUIPasscodeView
/// (UIApplication.shared.delegate as! AppDelegate).inPasscodeView = false
///
///
/// \endcodeThe strings used in <code>FUIPasscodeSetupView</code>, <code>FUIPasscodeView</code>, and <code>FUITouchIDView</code>
/// are from localized Onboarding.strings file.
/// Application can override these strings by setting the corresponding static
/// variables in this FUIPasscodeController class at runtime.
/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIPasscodeController
/// fdlFUIPasscodeController_navigationController_navigationBar
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIPasscodeControllerDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori21FUIPasscodeController")
@interface FUIPasscodeController : UIViewController
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// This <code>UIViewController</code> is to be used by app to setup the passcode and enabling Touch ID screen flows.
/// Before the navigation controller presents this <code>FUIPasscodeCreateController</code>, the following property
/// needs to be set:
/// <ul>
///   <li>
///     delegate: An implementation of <code>FUIPasscodeControllerDelegate</code> to handle events from this controller.
///   </li>
/// </ul>
/// Application can also set this property for more passcode validation checks:
/// <ul>
///   <li>
///     validationDelegate: An implementation of <code>FUIPasscodeValidationDelegate</code> to validate the passcode user entered.
///   </li>
/// </ul>
/// Here is the screen flow:
/// <ul>
///   <li>
///     The first screen is the Touch ID or Face ID screen, depends on the device capability, which prompts user to decide if enable Touch ID/Face ID authentication or not.
///   </li>
/// </ul>
/// When there are fingerprints or Face ID enrolled, there will be one “Enable” button only. When user tapped this button, a passcode is generated
/// and saved in a biometric ID protected keychain item. The <code>shouldTryPasscode</code> function of the delegate will be invoked with the generated passcode.
/// User will then need to use Touch ID or Face ID in the <code>FUIPasscodeInputController</code> for the login flow.
/// When there is no fingerprints or Face ID enrolled, there will be one “Not Now” button, in addition to the “Enable” button. When “Not Now” is tapped, the second screen is shown to let user enter passcode. If “Enable” is tapped, in this case, an alert pop-up screen will be shown with two options, “Not Now” or “Settings”. Tapping “Not Now” will dismiss the pop-up alert, while tapping “Settings” will open the Settings app to let user enroll fingerprints or Face ID.
/// <ul>
///   <li>
///     The second screen prompts user to enter passcode.
///     After user entered the passcode which is validated with the <code>FUIPasscodePolicy</code>.  The <code>FUIPasscodeValidationDelegate</code> provided function <code>validate</code> of <code>validationDelegate</code> is invoked for additional validation.  If validation success, the next screen will be displayed; otherwise, the function throws <code>FUIPasscodeControllerError</code> when validation fails.
///   </li>
///   <li>
///     The third screen prompts user to enter passcode again to verify with the passcode
///     entered in the first screen. The function <code>shouldTryPasscode</code> of the <code>FUIPasscodeControllerDelegate</code> is invoked
///     when passcode is verified.
///   </li>
/// </ul>
/// When the function <code>shouldTryPasscode</code> of the <code>FUIPasscodeControllerDelegate</code> is invoked, the delegate should either create a secure
/// store with the passcode, or save the passcode in a secure manner.
/// This passcode create flow is implemented in <code>FUIPasscodeCreateController.storyboard</code>. There are two ways to invoke it:
/// <ul>
///   <li>
///     Use another story board and using a “Present Modally” segue to <code>FUIPasscodeCreateController</code> storyboard in <code>SAPFiori</code>’s framework bundle “com.sap.cp.sdk.ios.SAPFiori”.
///     App programmer needs to provide the properties needed in <code>UIController</code>’s prepare for segue function:
///   </li>
/// </ul>
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
/// let destination = segue.destination as! UINavigationController
/// let vc0 = destination.viewControllers[0]
/// let vc = vc0 as! FUIPasscodeCreateController
/// //assigning a `FUIPasscodeControllerDelegate` delegate is a must
/// vc.delegate = passcodeControllerDelegate
/// }
///
///
/// \endcode<ul>
///   <li>
///     Programmatically loads it:
///   </li>
/// </ul>
/// \code
/// let passcodeVC = FUIPasscodeCreateController.createInstanceFromStoryboard()
///
/// //assigning a `FUIPasscodeControllerDelegate` delegate is a must
/// passcodeVC.delegate = passcodeControllerDelegate
///
/// // present the passcode view
/// let navController = UINavigationController(rootViewController: passcodeVC)
/// self.navigationController?.present(navController, animated: true, completion: nil)
///
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIPasscodeCreateController
/// fdlFUIPasscodeCreateController_navigationBar
/// fdlFUIPasscodeCreateController_cancelItem
/// fdlFUIPasscodeCreateController_nextItem
/// fdlFUIPasscodeCreateController_doneItem
/// fdlFUIPasscodeCreateController_changeMode_cancelItem
/// fdlFUIPasscodeCreateController_changeMode_nextItem
/// fdlFUIPasscodeCreateController_changeMode_doneItem
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori27FUIPasscodeCreateController")
@interface FUIPasscodeCreateController : FUIPasscodeController
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
@property (nonatomic, readonly, copy) NSArray<UIKeyCommand *> * _Nullable keyCommands;
/// :nodoc:
- (void)prepareForSegue:(UIStoryboardSegue * _Nonnull)segue sender:(id _Nullable)sender;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
@end


@interface FUIPasscodeCreateController (SWIFT_EXTENSION(SAPFiori)) <UIScrollViewDelegate>
/// :nodoc:
- (void)scrollViewDidEndDecelerating:(UIScrollView * _Nonnull)scrollView;
@end


@interface FUIPasscodeCreateController (SWIFT_EXTENSION(SAPFiori)) <UITextFieldDelegate>
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
@end


/// This <code>UIViewController</code> is to be used by app to authenticate user by either Touch ID or Passcode.
/// Before the navigation controller presents this <code>FUIPasscodeInputController</code>, the following properties
/// needs to be setup:
/// <ul>
///   <li>
///     delegate: An implementation of <code>FUIPasscodeControllerDelegate</code> to handle events from this controller.
///   </li>
///   <li>
///     hashUserPasscode: This boolean property needs to be the same as the same property in <code>FUIPasscodeCreateController</code> that was used to setup the passcode.
///   </li>
///   <li>
///     userIdentifier: This String property also needs to be the same as the same property in <code>FUIPasscodeCreateController</code> that was used to setup the passcode.
///   </li>
/// </ul>
/// This controller will try to determine if Touch ID is enabled by retrieving the value from
/// keychain. If Touch ID is enabled, there will be Touch ID authentication popup to prompt user
/// authenticate with Touch ID.
/// If Touch ID authentication succeeded, the saved passcode will be retrieved and function
/// <code>shouldTryPasscode</code> of the <code>FUIPasscodeControllerDelegate</code> implementation will be invoked.
/// If Touch ID authentication is canceled or failed, the passcode view will be shown to prompt user
/// enter passcode. After user entered the passcode, function <code>shouldTryPasscode</code> of the
/// <code>FUIPasscodeControllerDelegate</code> implementation will be invoked.
/// The delegate should dismiss this controller after the passcode is verified.
/// This passcode input flow is implemented in <code>FUIPasscodeInputController.storyboard</code>. There are two ways to invoke it:
/// <ul>
///   <li>
///     Use another story board and using a “Present Modally” segue to <code>FUIPasscodeInputController</code> storyboard in <code>SAPFioriUI</code> framework bundle.
///     App programmer needs to provide the properties needed in <code>UIController</code>’s prepare for segue function:
///   </li>
/// </ul>
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
/// let destination = segue.destination as! UINavigationController
/// let vc0 = destination.viewControllers[0]
/// let vc = vc0 as! FUIPasscodeInputController
/// vc.delegate = passcodeControllerDelegate
/// }
///
///
/// \endcode<ul>
///   <li>
///     Programmatically loads it:
///   </li>
/// </ul>
/// \code
///
/// let storyboard = UIStoryboard(name: "FUIPasscodeInputController", bundle: bundle)
/// let vc = storyboard.instantiateViewController(withIdentifier: "PasscodeInputViewController")
/// let passcodeVC = vc as! FUIPasscodeInputController
///
/// // present the passcode view
/// let navController = UINavigationController(rootViewController: passcodeVC)
/// self.navigationController?.present(navController, animated: true, completion: nil)
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIPasscodeInputController
/// fdlFUIPasscodeInputController_doneItem
/// fdlFUIPasscodeInputController_cancelItem
/// fdlFUIPasscodeInputController_navigationBar
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIPasscodeInputController")
@interface FUIPasscodeInputController : FUIPasscodeController
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
@end


@interface FUIPasscodeInputController (SWIFT_EXTENSION(SAPFiori)) <UITextFieldDelegate>
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
@end


/// <code>FUIPlaceholderFormatter</code> is a string formatter that creates a placeholder attributed text for tags component.
SWIFT_CLASS("_TtC8SAPFiori23FUIPlaceholderFormatter")
@interface FUIPlaceholderFormatter : NSFormatter
/// :nodoc:
- (NSString * _Nullable)stringForObjectValue:(id _Nullable)obj SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSAttributedString * _Nullable)attributedStringForObjectValue:(id _Nonnull)obj withDefaultAttributes:(NSDictionary<NSAttributedStringKey, id> * _Nullable)attrs SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIPlaceholderImageView</code> is a variant of <code>FUIImageView</code>.  Placeholder text can be shown if there is no image set.
/// Typically not used directly by developer.
/// <h2>Theming</h2>
/// Supported class paths:
/// fdlFUIPlaceholderImageView_placeholder {}
/// Supported properties:
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
SWIFT_CLASS("_TtC8SAPFiori23FUIPlaceholderImageView") SWIFT_DEPRECATED_MSG("This has been integrated with FUIImageView, please use that instead")
@interface FUIPlaceholderImageView : FUIImageView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithImage:(UIImage * _Nullable)image highlightedImage:(UIImage * _Nullable)highlightedImage OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Placeholder view component of <code>FUIPlaceholderImageView</code>.
/// Typically not used directly by developer.
/// <h2>Theming</h2>
/// Supported class paths:
/// fdlFUIPlaceholderView_placeholder {}
/// Supported properties:
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
SWIFT_CLASS("_TtC8SAPFiori18FUIPlaceholderView")
@interface FUIPlaceholderView : FUIDrawingView
/// If the backgroundColor is set, will need to refresh this component.
@property (nonatomic, strong) UIColor * _Nullable backgroundColor;
/// :nodoc:
- (void)drawRect:(CGRect)rect;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUIProcessingIndicatorView</code> is an IBDesignable UI component. A processing indicator shows that a task is in progress. It shows a circular activity indicator to visualize indeterminate processing and has an optional <code>UILabel</code> below the activity indicator indicating to the user what is being processed.
/// By default, this view is not visible and the animation is stopped. The activity indicator has a predefined size and line width that depends on the horizontal size class.
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let processingIndicatorView = FUIProcessingIndicatorView(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop a <code>UIView</code> component to Interface Builder’s canvas.
///   </li>
///   <li>
///     Switch class name from <code>UIView</code> to <code>FUIProcessingIndicatorView</code>, and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Create an outlet of the processing indicator view to be able to access its properties.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
/// processingIndicatorView.show()
/// // do something
/// processingIndicatorView.dismiss()
///
/// \endcode<h2>Animation</h2>
/// The animation of the processing indicator can be started or stopped without affecting the visibility of the view.
/// \code
/// processingIndicatorView.startAnimating()
/// // do something
/// processingIndicatorView.stopAnimating()
///
/// \endcode<h2>Theming</h2>
/// The styleClass of the view is <code>fdlFUIProcessingIndicatorView</code>.
/// In the .nss file you can use the following parameters:
/// <ul>
///   <li>
///     <code>fdlFUIProcessingIndicatorView_textLabel</code>: changes the appearance of the <code>textLabel</code>
///   </li>
/// </ul>
/// <h3>Example:</h3>
/// \code
/// fdlFUIProcessingIndicatorView_textLabel {
///    background-color: red;
///    border-color: green;
///    border-width: 2;
///    corner-radius: 2;
///    font-color: blue;
///    font-color-highlighted: yellow;
///    font-name: Avenir;
///    font-size: 15;
///    height: 50;
///    shadow-color: black;
///    shadow-offset: 1, 2;
///    shadow-opacity: 0.5;
///    shadow-radius: 2;
///    text-align: center;
///    text-alpha: 0.9;
///    text-auto-fit: true;
///    text-shadow-color: black;
///    text-shadow-offset: 1, 2;
///    text-transform: uppercase;
///    text-line-clamp:6;
///    width: 100;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori26FUIProcessingIndicatorView")
@interface FUIProcessingIndicatorView : NibDesignable
/// Text label below the circular activity indicator.
@property (nonatomic, weak) IBOutlet UILabel * _Null_unspecified textLabel;
/// Text of <code>textLabel</code>. The default is <code>nil</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable text;
/// A boolean value indicating whether <code>textLabel</code> is hidden. The default is <code>false</code>.
@property (nonatomic) IBInspectable BOOL isTextLabelHidden;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end


/// <code>FUIProfileHeader</code> extends <code>UIView</code> to display profile header information. It contains a set of default content views and has different layouts in compact and regular mode.
/// Scrolling animations are supported if you set up profile header correctly.
/// <h2>Use profile header with or without animation.</h2>
/// <h3>Without Animation</h3>
/// Simply set table view’s <code>tableHeaderView</code>.
/// \code
/// tableView.tableHeaderView = profileHeader
///
/// \endcode<h3>With Animation</h3>
/// Scrolling animation will be activated only if all the conditions below are met (otherwise there might be some unexpected behaviors):
/// <ul>
///   <li>
///     Profile header is added to table view as a subview.
///   </li>
/// </ul>
/// \code
/// tableView.addSubview(profileHeader)
///
/// \endcode<ul>
///   <li>
///     The table view to which profile header is added has <code>isScrollEnable</code> set to true.
///   </li>
///   <li>
///     The table view to which profile header is added is embeded in a navigation controller and the navigation bar is not hidden.
///   </li>
/// </ul>
/// <h2>Views Available in FUIProfileHeader:</h2>
/// <ul>
///   <li>
///     <code>imageView</code>: a <code>UIImageView</code>. The image size is set to <code>80px</code> by <code>80px</code>. Use <code>image</code> or <code>imageView.image</code>to set image.
///   </li>
///   <li>
///     <code>headlineLabel</code>: a <code>UILabel</code> intended to display a headline text. Use <code>headlineText</code> to set label text.
///   </li>
///   <li>
///     <code>subheadlineLabel</code>: a <code>UILabel</code> intended to display a subheadline text. Use <code>subheadlineText</code> to set label text.
///   </li>
///   <li>
///     <code>descriptionLabel</code>: a <code>UILabel</code> intended to display a short text. Use <code>descriptionText</code> to set label text.
///   </li>
///   <li>
///     <code>detailContentView</code>: a <code>UIView</code> added to the last position in the stack.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration</h2>
/// In table view controller’s <code>viewDidLoad</code> method:
/// \code
///
/// let profileHeader = FUIProfileHeader()
/// profileHeader.imageView.image = #imageLiteral(resourceName: "rw")
/// // To enable a default gradient layer behind the placeholder text.
/// profileHeader.imageView.isGradientLayerEnabled = true
/// // Set placeholder text.
/// profileHeader.imageView.placeholder.text = "This is a placeholder"
/// profileHeader.headlineText = "Harry Potter"
/// profileHeader.subheadlineText = "The boy wizard, the boy wizard"
/// profileHeader.descriptionLabel.text = "This is a description"
///
/// //create an activityControl and set to detail content view.
/// let activityControl = FUIActivityControl()
/// activityControl.maxVisibleItems = 5
/// activityControl.itemSize = CGSize(width: 24, height: 24)
/// activityControl.spacing = CGFloat(36.0)
///
/// let phoneActivity = FUIActivityItem.phone
/// let msgActivity = FUIActivityItem.message
/// let emailActivity = FUIActivityItem.email
/// activityControl.addActivities([phoneActivity, msgActivity, emailActivity])
/// activityControl.activityItems[phoneActivity]?.setTintColor(UIColor.white, for: .normal)
/// activityControl.activityItems[msgActivity]?.setTintColor(UIColor.white, for: .normal)
/// activityControl.activityItems[emailActivity]?.setTintColor(UIColor.white, for: .normal)
/// profileHeader.detailContentView = activityControl
///
/// // If no animation is needed.
/// self.tableView.tableHeaderView = profileHeader
///
/// // If you want the scrolling animation.
/// // self.tableView.addSubview(profileHeader)
///
///
/// \endcode<em>Important:</em> There is no way to add a view as a subview of <code>UITableView</code> in storyboard/nib file. We highly recommend that developer’s set up the profile header programmatically, but if you really need to use storyboard/nib file, follow the instructions below:
/// <ol>
///   <li>
///     In storyboard/nib file, create a separate <code>UIView</code> which is not under the structure of your <code>UITableView</code> and set custom class to <code>FUIProfileHeader</code>.
///   </li>
///   <li>
///     Set up an <code>IBOutlet</code> property for your profile header so that you can access it in your controller.
///   </li>
///   <li>
///     In <code>viewDidLoad()</code>, programmatically add it to table view as a subview.
///   </li>
/// </ol>
/// \code
/// @IBOutlet var profileHeader: FUIProfileHeader!
///
/// override func viewDidLoad() {
///    self.tableView.addSubview(self.profileHeader)
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIProfileHeader
/// fdlFUIProfileHeader_background
/// fdlFUIProfileHeader_imageView
/// fdlFUIProfileHeader_headlineLabel
/// fdlFUIProfileHeader_subheadlineLabel
/// fdlFUIProfileHeader_descriptionLabel
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori16FUIProfileHeader")
@interface FUIProfileHeader : NibDesignable
/// Image view that contains an image with size of  80px x 80px.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified imageView;
/// A headline label in the profile header. Use <code>headlineText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified headlineLabel;
/// A subheadline label in the profile header. Use <code>subheadlineText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified subheadlineLabel;
/// A description label displayed in the profile header. Use <code>descriptionText</code> to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified descriptionLabel;
/// The text in the headline label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable headlineText;
/// The text in the subheadline label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subheadlineText;
/// The text in the description label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable descriptionText;
/// The image in the image view.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable image;
/// Text of <code>tags</code> for IB display purpose only.
@property (nonatomic, copy) IBInspectable NSString * _Nullable ibDisplayDetailContentView;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)didMoveToWindow;
/// :nodoc:
- (void)layoutSubviews;
@end


/// The <code>FUIProfileMarkerAnnotationView</code> inherits from the <code>MKMarkerAnnotationView</code> and is presented as an annotation on the <code>MKMapView</code>. It is used to distinguish between static points on a map and person location. The annotation can either display a profilePicture or a set of initials to represent the person being annotated.
/// <h2>Example Initialization and Configuration</h2>
/// \code
/// @available(iOS 11.0, *)
/// class MyProfileMarker: FUIProfileMarkerAnnotationView {
///    override var annotation: MKAnnotation? {
///        willSet {
///            markerTintColor = UIColor.preferredFioriColor(forStyle: .map1)
///            glyphImage = FUIIconLibrary.map.marker.venue.withRenderingMode(.alwaysTemplate)
///        }
///    }
/// }
///
///
/// \endcodeRegister within the  viewDidLoad()
/// \code
/// if #available(iOS 11.0, *) {
///    mapView.register(MyProfileMarker.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
/// } else {
///    // Fallback on earlier versions
/// }
/// let point1 = MKPointAnnotation()
/// point1.coordinate = CLLocationCoordinate2D(latitude: 37.3318, longitude: -122.0312)
/// let point2 = MKPointAnnotation()
/// point2.coordinate = CLLocationCoordinate2D(latitude: 37.3988313, longitude: -122.1487375)
/// let annotations = [point1 as MKAnnotation, point2 as MKAnnotation]
/// mapView.addAnnotations(annotations)
/// mapView.showAnnotations(annotations, animated: true)
///
/// \endcodeSet the annotation view in the <code>mapView(_:viewFor:)</code> method.
/// \code
/// var view: MKAnnotationView!
/// if let pointAnnotation = annotation as? MKPointAnnotation {
///    if #available(iOS 11.0, *) {
///        if pointAnnotation.coordinate.latitude == 37.3318 {
///            view = FUIProfileMarkerAnnotationView(annotation: pointAnnotation, reuseIdentifier: "cell")
///            (view as! FUIProfileMarkerAnnotationView).glyphText =  "ME"
///            return view
///        } else {
///            view = FUIProfileMarkerAnnotationView(annotation: pointAnnotation, reuseIdentifier: "cell")
///            (view as! FUIProfileMarkerAnnotationView).glyphImage = #imageLiteral(resourceName: "ProfilePic").withRenderingMode(.alwaysOriginal)
///            (view as! FUIProfileMarkerAnnotationView).selectedGlyphImage = #imageLiteral(resourceName: "ProfilePic").withRenderingMode(.alwaysOriginal)
///            return view
///        }
///    } else {
///        // Fallback on earlier versions
///        return nil
///    }
/// }
/// return view
///
/// \endcode<h2>Note:</h2>
/// <ul>
///   <li>
///     Set the <code>profileImage</code> to a 24x24 icon.
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8SAPFiori30FUIProfileMarkerAnnotationView") SWIFT_AVAILABILITY(ios,introduced=11.0)
@interface FUIProfileMarkerAnnotationView : MKMarkerAnnotationView
/// An optional <code>String</code> representing the initials of the person being annotated. Font style is fixed and does not change with accessibility. <code>glyphText</code> is only displayed when there is no <code>glyphImage</code> available and is limited to 2 characters.
@property (nonatomic, copy) NSString * _Nullable glyphText;
/// Profile image to display when the annotationView is first loaded.
@property (nonatomic, strong) UIImage * _Nullable glyphImage;
/// Optional profile image to display when the annotationView is in a selected state. Will use glyphImage if not supplied.
@property (nonatomic, strong) UIImage * _Nullable selectedGlyphImage;
/// An initializer that instantiates a <code>FUIProfileMarkerAnnotationView</code> with some reuseIdentifier.  Sets the tint color to a default value of <code>.map1</code>
- (nonnull instancetype)initWithAnnotation:(id <MKAnnotation> _Nullable)annotation reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
@end


/// <code>FUIProgressBannerMessageView</code> shows an overlay message centered in the screen underneath a navigation bar with a progress bar on the top of the message view. <code>FUIProgressBannerMessageView</code> must be attached to a <code>FUINavigationBar</code> to make it work properly.
/// <code>FUIProgressBannerMessageView</code> is a subclass of <code>FUIBannerMessageView</code> and <code>FUINavigationBar</code> can contain only one <code>FUIBannerMessageView</code>.
/// Call function <code>show</code> on a <code>FUIProgressBannerMessageView</code> instance to show the message.
/// By default, the message is shown centered on screen.
/// This message view will stayed on the screen until the progress reached 1.0 even if user navigate to other views.
/// Developer may choose to dismiss the message veiw when user navigates to other views by calling the <code>dismissBanner</code> function of the <code>FUIProgressBannerMessageView</code>.
/// Developer should use the <code>update</code> function to update the progress of the progress bar.
/// When the progress reaches 1.0, the default behavior is that there will be a check mark and optional message,
/// the <code>completionMessage</code> property of the <code>FUIProgressBannerMessageView</code>, displayed for five seconds.
/// Then the <code>FUIProgressBannerMessageView</code> will be dismissed. Developer can use the <code>completion</code> parameter in
/// <code>update</code> function to override this default behavior.
/// <h2>Usage</h2>
/// Usually, the creation of <code>FUIProgressBannerMessageView</code> and attachment to FUINavigationBar is
/// in the <code>viewDidAppear</code> function of a <code>UIViewController</code>. As the code indicates below:
/// \code
/// var syncBanner: FUIProgressBannerMessageView?
///
/// override public func viewDidAppear(_ animated: Bool) {
///     super.viewDidAppear(animated)
///
///     guard let navBar = self.navigationController?.navigationBar as? FUINavigationBar else {
///         return
///     }
///
///     let syncBannerView = FUIProgressBannerMessageView()
///     navBar.bannerView = syncBannerView
///     syncBannerView.isFadedInAndOut = false
///     syncBannerView.show(message: "Cancel Sync")
///     syncBannerView.didSelectHandler = { [unowned self] in
///         self.cancelSync()
///     }
///     syncBannerView.completionMessage = "Sync Complete"
///     self.syncBanner = syncBannerView
/// }
///
/// override func viewWillDisappear(_ animated: Bool) {
///     super.viewWillDisappear(animated)
///     syncBanner?.dismissBanner(animated: true)
/// }
///
/// func cancelSync() {
///     // make call to cancel the sync
///     // ...
///
///     syncBanner?.dismissBanner(animated: true)
/// }
///
/// func advanceProgress(progress: Float) {
///     syncBanner?.update(progress: progress, animated: true, completion: nil)
/// }
///
///
/// \endcode<h2>Theming</h2>
/// \code
///
/// fdlFUIProgressBannerMessageView_titleLabel {
/// font-size: 13;
/// font-name: mediumSystem;
/// font-color: @tintColorDark;
/// font-color-highlighted: @tintColorTapStateDark;
/// }
///
/// fdlFUIProgressBannerMessageView_dividerBottom {
/// background-color: @line;
/// }
///
/// fdlFUIProgressBannerMessageView_messageBannerDividerTop {
/// background-color: @chart1;
/// }
///
/// fdlFUIProgressBannerMessageView_progressBar {
/// progress-tint-color: @chart2;
/// track-tint-color: @line;
/// }
///
/// fdlFUIProgressBannerMessageView_contentViewTapped {
/// background-color: @primary5;
/// }
///
/// fdlFUIProgressBannerMessageView_completionLabel {
/// font-size: 13;
/// font-name: mediumSystem;
/// font-color: @primary7;
/// }
///
/// fdlFUIProgressBannerMessageView_syncIcon {
/// tint-color: @tintColorDark;
/// }
///
/// fdlFUIProgressBannerMessageView_completionCheckMark {
/// image: green-check-mark1;
/// tint-color: @primary7;
/// }
///
/// fdlFUIProgressBannerMessageView_closeIcon {
/// tint-color: @primary2_lightBackground;
/// }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori28FUIProgressBannerMessageView")
@interface FUIProgressBannerMessageView : FUIBannerMessageView
/// The “Close” icon image view. Tap this icon image to dismiss the banner but not to cancel the sync.
@property (nonatomic, readonly, strong) IBOutlet UIImageView * _Null_unspecified closeIcon;
/// The “Sync” icon image view.
@property (nonatomic, readonly, strong) IBOutlet UIImageView * _Null_unspecified syncIcon;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
@end


/// <code>FUIProgressIndicatorControl</code> is an IBDesignable UI component. It can be used to display a
/// (download) progress gauge as used in Apple’s App Store and iTunes Store for downloading
/// apps or music.
/// Different display states control the visual appearance of the control and the options the user has to interact with the control.
/// <h2>Initialization</h2>
/// <h3>Programmatically:</h3>
/// \code
/// let progressIndicatorControl = FUIProgressIndicatorControl(frame: CGRect())
///
/// \endcode<h3>Inside a Storyboard or xib:</h3>
/// <ol>
///   <li>
///     Drag and drop an <code>UIView</code> component to Interface Builder canvas.
///   </li>
///   <li>
///     Switch class name from <code>UIView</code> to <code>FUIProgressIndicatorControl</code>, and set module to <code>SAPFiori</code>.
///   </li>
///   <li>
///     Control-drag from the progress indicator control in Interface Builder to your source file to create an outlet of the FUIProgressIndicatorControl and to be able to access its properties.
///   </li>
///   <li>
///     Control-drag from the progress indicator control in Interface Builder to your source file and create an action for the FUIProgressIndicatorControl. Make sure to select <code>TouchUpInside</code> as event type. Specify an action name and implement the generated callback method to react accordingly once the user tapped the control.
///   </li>
/// </ol>
/// <h2>Usage</h2>
/// \code
/// // If the action was not created in interface builder as described before, add it programmatically.
/// progressIndicatorControl.addTarget(self, action: #selector(myActionMethod), for: .touchUpInside)
///
/// // Initially, call the changeDisplayState(to:) method to change the views state. You can do that in viewDidLoad() or later.
/// // The state .inProgress indicates that progress has started. Usually you would show this state when you start connecting to
/// // a server for downloading data.
/// progressIndicatorControl.changeDisplayState(to: .inProgress)
///
/// // Once the connection has been established and the download has started, you can change the display state to .loadingPausable or 
/// // .loadingStoppable:
/// progressIndicatorControl.changeDisplayState(to: .loadingPausable)
///
/// // If the user tapped the control, while it was in .loadingPausable state, you can change it to .loadingPaused
/// // For example:
/// @IBAction func myActionMethod(_ sender: FUIProgressIndicatorControl) {
///    switch sender.displayState {
///    case .inProgress:
///        // do nothing if user tapped on control while it was .inProgress.
///        break
///    case .loadingPausable:
///        sender.changeDisplayState(to: .paused)
///        return
///    case .loadingStoppable:
///        // user cancelled the e.g. download, so we hide the control
///        sender.isHidden = true
///    }
/// }
///
/// // To set the progress value proceed as follows:
/// progressIndicatorControl.update(progress: 0.5, animated: false)
/// progressIndicatorControl.update(progress: 1, animated: true) {
///    // Once the download is completed, you might want to hide the progress indicator
///    // and show a link to the downloaded resource, etc..
///    self.progressIndicatorControl.isHidden = true
///    self.openDownloadedFileButton.isHidden = false
/// }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIProgressIndicatorControl
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori27FUIProgressIndicatorControl")
@interface FUIProgressIndicatorControl : NibDesignableControl
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
/// :nodoc:
- (void)tintColorDidChange;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end


/// <code>FUIRatingControl</code> uses images to represent a rating.
/// The number of “On” images denotes the rating.
/// The default “On” image is a filled star while the default “Off” inmage
/// is an unfilled star.
/// When the <code>style</code> property is <code>.editable</code>, user can tap an individual image to set the rating.
/// Users can also slide their finger from side to side over the control to select the rating.
/// The <code>FUIRatingControl</code> will send <code>UIControl.Event.valueChanged</code> event when rating changed.
/// <h2>Theming</h2>
/// Supported <code>FUIRatingControl</code> class paths:
/// \code
/// fdlFUIRatingControl
///
/// \endcodeSupported <code>RatingControl</code> properties:
/// \code
/// on-color { -standard | -accented | -editable-disabled | -editable-disabled }: Color;
/// off-color { -standard | -accented | -editable-disabled | -editable-disabled }: Color;
/// on-image { -standard | -editable }: Image;
/// off-image { -standard | -editable }: Image;
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori16FUIRatingControl")
@interface FUIRatingControl : UIControl
/// Convience constructor.
/// This constructor is initialized with the <code>.editable</code> style.
- (nonnull instancetype)init;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (BOOL)beginTrackingWithTouch:(UITouch * _Nonnull)touch withEvent:(UIEvent * _Nullable)event SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)continueTrackingWithTouch:(UITouch * _Nonnull)touch withEvent:(UIEvent * _Nullable)event SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)endTrackingWithTouch:(UITouch * _Nullable)touch withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)cancelTrackingWithEvent:(UIEvent * _Nullable)event;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end



/// UICollectionView subclass, which invokes a <code>sizeChangeHandler: (() -> Void)?</code> closure, when the current content size of the collection does not match the intrinsic content size.  The sizeChangeHandler property is <code>internal</code> to the SDK.
/// Developers should generally not initialize <code>FUIResizingCollectionView</code> directly.  Instead, instances of the class are typically accessed through the <code>FUITableViewCollectionSection</code> API’s.
/// important:
/// Resizing behavior will only be executed, if the <code>sizeChangeHandler</code> is implemented.
SWIFT_CLASS("_TtC8SAPFiori25FUIResizingCollectionView") SWIFT_DEPRECATED_MSG("If using as subview of UITableViewCell: use FUICollectionViewTableViewCell instead; if using generally: use UICollectionView instead.")
@interface FUIResizingCollectionView : UICollectionView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout * _Nonnull)layout SWIFT_UNAVAILABLE;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
@end


/// Convenience subclass of <code>FUIButton</code> implementing <code>FUIButtonStyle.fuiRounded</code>, for use in Interface Builder.
SWIFT_CLASS("_TtC8SAPFiori16FUIRoundedButton")
@interface FUIRoundedButton : FUIButton
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end


/// Convenience subclass of <code>FUIButton</code> implementing <code>FUIButtonStyle.fuiRoundedFilled</code>, for use in Interface Builder.
SWIFT_CLASS("_TtC8SAPFiori20FUIRoundedFillButton")
@interface FUIRoundedFillButton : FUIButton
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end



/// Fiori style UISearchController. The only difference between <code>FUISearchController</code>
/// and regular <code>UISearchController</code> is the <code>searchBar</code>.
/// <code>FUISearchController</code>’s <code>searchBar</code> is <code>FUISearchBar</code>.
/// Developer can add a <code>FUIBarcodeScanner</code> to this <code>FUISearchBar</code> by setting the
/// <code>isBarcodeScannerEnabled</code> property of the <code>FUISearchBar</code> to true. A barcode scanner
/// icon will be displayed at the bookmark icon location of the search bar.
/// A barcode scanner view will be displayed when the barcode scanner icon is tapped.
/// For iOS 11, it is recommended to set the <code>FUISearchController</code> to <code>navigationItem</code>,
/// instead of the table view header for iOS 10.
/// Here is a sample code snippet.
/// \code
/// // Instantiate an FUISearchController and configure its properties
/// searchController = FUISearchController(searchResultsController: nil)
/// searchController.searchResultsUpdater = self
/// searchController.hidesNavigationBarDuringPresentation = true
/// searchController.searchBar.placeholderText = "Search The List"
///
/// // Adding barcode scanner to this search bar
/// searchController.searchBar.isBarcodeScannerEnabled = true
/// searchController.searchBar.barcodeScanner?.scanMode = .EAN_UPC
/// searchController.searchBar.barcodeScanner?.scanResultTransformer = { (scanString) -> String in
/// return scanString.uppercased()
/// }
///
/// if #available(iOS 11, *) {
/// navigationItem.searchController = searchController
/// navigationItem.hidesSearchBarWhenScrolling = false
/// } else {
/// tableView.tableHeaderView = searchController?.searchBar
/// }
///
///
///
/// \endcode<h2>Theming</h2>
/// \code
///
/// fdlFUISearchController_searchBar {
/// bar-tint-color: @line;
/// background-color: @primary1_darkBackground;
/// background-tint-color: @tintColorDark;
/// }
///
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori19FUISearchController")
@interface FUISearchController : UISearchController
/// :nodoc:
- (nonnull instancetype)initWithSearchResultsController:(UIViewController * _Nullable)searchResultsController OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, getter=isActive) BOOL active;
/// Search bar of the search controller.  When instantiating the <code>FUISearchController</code> programmatically, a default <code>FUISearchBar</code> is initialized automatically and can be used directly.  The developer should set a reference to an <code>@IBOutlet</code>, if adding a search bar to their view in Interface Builder.
@property (nonatomic, readonly, strong) FUISearchBar * _Nonnull searchBar;
/// :nodoc:
@property (nonatomic, strong) id <UISearchResultsUpdating> _Nullable searchResultsUpdater;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidDisappear:(BOOL)animated;
@end

@protocol UIBarPositioning;

@interface FUISearchController (SWIFT_EXTENSION(SAPFiori)) <UIBarPositioningDelegate>
/// Implement this method on your manual bar delegate when not managed by a UIKit controller.
/// UINavigationBar and UISearchBar default to UIBarPositionTop, UIToolbar defaults to UIBarPositionBottom.
/// This message will be sent when the bar moves to a window.
- (UIBarPosition)positionForBar:(id <UIBarPositioning> _Nonnull)bar SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUISearchController (SWIFT_EXTENSION(SAPFiori)) <UISearchResultsUpdating>
/// :nodoc:
- (void)updateSearchResultsForSearchController:(UISearchController * _Nonnull)searchController;
@end


@interface FUISearchController (SWIFT_EXTENSION(SAPFiori)) <UISearchBarDelegate>
/// :nodoc:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar * _Nonnull)searchBar SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)searchBarTextDidBeginEditing:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (BOOL)searchBarShouldEndEditing:(UISearchBar * _Nonnull)searchBar SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)searchBarTextDidEndEditing:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBar:(UISearchBar * _Nonnull)searchBar textDidChange:(NSString * _Nonnull)searchText;
/// :nodoc:
- (BOOL)searchBar:(UISearchBar * _Nonnull)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString * _Nonnull)text SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)searchBarSearchButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// Handler for BarcodeScanner button (‘Bookmark button’) click
/// important:
/// Because the presentation of the view controller for barcode scanning is invoked internally when this method is called, this method will be invoked on the <code>delegate</code> only after the presentation of the view controller is completed.
/// \param searchBar calling <code>UISearchBar</code>
///
- (void)searchBarBookmarkButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarCancelButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBarResultsListButtonClicked:(UISearchBar * _Nonnull)searchBar;
/// :nodoc:
- (void)searchBar:(UISearchBar * _Nonnull)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope;
@end


/// A view representation of <code>FUISearchTag</code>.
SWIFT_CLASS("_TtC8SAPFiori16FUISearchTagView")
@interface FUISearchTagView : UIView
/// :nodoc:
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, readonly) BOOL canBecomeFirstResponder;
/// :nodoc:
- (BOOL)becomeFirstResponder SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end


@interface FUISearchTagView (SWIFT_EXTENSION(SAPFiori)) <UITextInputTraits>
/// The autocorrection style for the tag view text.
@property (nonatomic) UITextAutocorrectionType autocorrectionType;
@end


@interface FUISearchTagView (SWIFT_EXTENSION(SAPFiori)) <UIKeyInput>
/// :nodoc:
@property (nonatomic, readonly) BOOL hasText;
/// :nodoc:
- (void)insertText:(NSString * _Nonnull)text;
/// :nodoc:
- (void)deleteBackward;
@end


/// A <code>UIScrollView</code> shows a set of tags and a text field which allows user to input text.
/// <h1>Usage</h1>
/// <h2>Initialization</h2>
/// You can position tags field either setting the frame or constraints.
/// \code
/// let tagsField = FUISearchTagsField()
///
/// \endcode<h2>Configuration</h2>
/// \code
/// tagsField.tintColor = UIColor.preferredFioriColor(forStyle: .tintColorDark) // cursor color
/// tagsField.backgroundColor = UIColor.preferredFioriColor(forStyle: .primary9)
/// tagsField.contentInset = UIEdgeInsetsMake(9, 0, 9, 0)
/// tagsField.spaceBetweenTags = 5.0
/// tagsField.font = UIFont.systemFont(ofSize: 16)
/// tagsField.textColor = UIColor.preferredFioriColor(forStyle: .tintColorDark)
/// tagsField.fieldTextColor = UIColor.preferredFioriColor(forStyle: .tintColorDark)
/// tagsField.selectedColor = UIColor.preferredFioriColor(forStyle: .tintColorDark)
/// tagsField.selectedTextColor = UIColor.preferredFioriColor(forStyle: .primary1, background: .darkBackground)
/// tagsField.displayDelimiter = true
/// tagsField.delimiter = ","
/// tagsField.placeholder = "Search for Assignee"
/// tagsField.placeholderColor = UIColor.preferredFioriColor(forStyle: .primary3)
/// tagsField.numberOfLines = 2
///
/// \endcode<h2>Register a event handler</h2>
/// \code
/// tagsField.onDidChangeText = { [weak self] (sender, text) in
/// // do something in response to text change.
/// }
///
/// \endcode<h2>Add or remove tags</h2>
/// \code
/// tagsField.addTag("str")
/// tagsField.removeTag("str")
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// fdlFUITagsField {}
/// Supported <code>TagsField</code> attributes:
/// tint-color (Color)
/// background-color (Color)
/// content-insets (Box)
/// font-color { -placeholder } (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-line-clamp (Integer)
/// line-spacing (Float)
/// tag-spacing (Float)
/// tag-delimiter (String)
/// Supported <code>Tag</code> attributes:
/// tag-font-color { -selected } (Color)
/// tag-background-color { -selected } (Color)
/// tag-content-insets (Box)
/// Supported <code>ImageView</code> attributes:
/// search-icon-image (Image)
/// search-icon-image-tint-color (Color)
SWIFT_CLASS("_TtC8SAPFiori18FUISearchTagsField")
@interface FUISearchTagsField : UIScrollView
/// Background color for tag view in normal (non-selected) state.
@property (nonatomic, strong) UIColor * _Null_unspecified tintColor;
/// Layout margins of tag view.
@property (nonatomic) UIEdgeInsets layoutMargins;
/// Content inset of tag view.
@property (nonatomic) UIEdgeInsets contentInset;
/// :nodoc:
@property (nonatomic, readonly) BOOL isFirstResponder;
@property (nonatomic, readonly) CGSize intrinsicContentSize;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (void)willMoveToSuperview:(UIView * _Nullable)newSuperview;
/// Called when text in text field changeds.
/// \param sender The text field which invokes this method.
///
- (void)onTextFieldDidChange:(id _Nonnull)sender;
@end






@interface FUISearchTagsField (SWIFT_EXTENSION(SAPFiori)) <UIScrollViewDelegate>
/// :nodoc:
- (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView;
@end


@interface FUISearchTagsField (SWIFT_EXTENSION(SAPFiori)) <UITextFieldDelegate>
- (void)textFieldDidBeginEditing:(UITextField * _Nonnull)textField;
/// :nodoc:
- (void)textFieldDidEndEditing:(UITextField * _Nonnull)textField;
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
- (BOOL)textField:(UITextField * _Nonnull)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUISearchTagsField (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (void)layoutSubviews;
@end




@interface FUISearchTagsField (SWIFT_EXTENSION(SAPFiori))
@property (nonatomic, readonly, strong) UIView * _Nullable inputAccessoryView;
@end


/// A <code>UIView</code> contains a tag field and table view.
/// <h1>Components</h1>
/// <ul>
///   <li>
///     tagsField: A <code>WSTagsField</code> shows some tags and an input text field.
///   </li>
///   <li>
///     tableView: A <code>UITableView</code> shows a list of items.
///   </li>
/// </ul>
/// <h1>Usage</h1>
/// <h2>Initialization</h2>
/// You can position tags field either setting the frame or constraints.
/// \code
/// let searchToSelectView = FUISearchToSelectView()
///
/// \endcode<h2>Configuration</h2>
/// You can configure tags field by access <code>tagsField</code> property.
/// \code
/// self.tagsField.backgroundColor = UIColor.blue
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// \code
/// fdlFUISearchToSelectView {}
/// fdlFUISearchToSelectView_tableView {}
/// fdlFUISearchToSelectView_tagsField {}
///
/// \endcodeSupported <code>TagsField</code> attributes:
/// \code
/// tint-color (Color)
/// background-color (Color)
/// content-insets (Box)
/// font-color { -placeholder } (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-line-clamp (Integer)
/// line-spacing (Float)
/// tag-spacing (Float)
/// tag-delimiter (String)
///
/// \endcodeSupported <code>Tag</code> attributes:
/// \code
/// tag-font-color { -selected } (Color)
/// tag-background-color { -selected } (Color)
/// tag-content-insets (Box)
///
/// \endcodeSupported <code>ImageView</code> attributes:
/// \code
/// search-icon-image (Image)
/// search-icon-image-tint-color (Color)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUISearchToSelectView")
@interface FUISearchToSelectView : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutMarginsDidChange;
@end


/// A view controller which specializes in managing a tags field and a table view. Selected table view cell will appear in tags field with a designated tag. You can also deselect a table view cell by deleting its designated tag in tags field. In order to make this work, your subclass must implement <code>FUISearchToSelectViewDelegate</code> delegate.
/// <h2>Components</h2>
/// <ul>
///   <li>
///     searchToSelectView
///   </li>
///   <li>
///     tagsField
///   </li>
///   <li>
///     tableView
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// Subclassing and conforms to delegate. It conforms to UITableViewDataSource and UITableViewDelegate by default.
/// \code
/// class MyController: FUISearchToSelectViewController, FUiSearchToSelectViewDelegate {}
///
/// \endcodeOverride <code>viewDidLoad</code> and do some setup here
/// \code
/// override func viewDidLoad() {
///     super.viewDidLoad()
///     self.tableView.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
///     self.tableView.register(FUITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: FUITableViewHeaderFooterView.reuseIdentifier)
///     #if swift(>=4.2)
///         self.tableView.rowHeight = UITableView.automaticDimension
///     #else
///         self.tableView.rowHeight = UITableViewAutomaticDimension
///     #endif
///     self.tableView.estimatedRowHeight = 50
///     // ...
/// }
///
/// \endcodeImplement dataSource and delegate methods
/// \code
///
/// // Define data model.
/// var objects: [ModelObj] = []
///
/// // UITableView dataSource and delegate methods
/// override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
///     return objects.count
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUIObjectTableViewCell.reuseIdentifier, for: indexPath) as! FUIObjectTableViewCell
///     let model = objects[indexPath.row]
///
///     cell.isMomentarySelection = false
///     cell.selectionStyle = .none
///     cell.detailImage = model.image
///     cell.detailImageView.isCircular = true
///     cell.headlineText = model.headline
///     cell.subheadlineText = model.subheadline
///     cell.footnoteText = model.footnote
///
///     return cell
/// }
///
/// // FUISearchtoSelectViewControllerDelegate delegate
/// func searchToSelectView(_ searchToSelectView: FUISearchToSelectView, uuidForItemAt indexPath: IndexPath) -> String? {
///     let obj = objects[indexPath.row]
///     return obj.uuid
/// }
///
/// func searchToSelectView(_ searchToSelectView: FUISearchToSelectView, tagTitleFor itemUUID: String) -> String? {
///     if let obj = objects.filter ({ $0.uuid == itemUUID }).first {
///         return obj.headline
///     }
///     return nil
/// }
///
///
/// \endcode<blockquote>
/// Note: Developer is responsible for updating <code>selectedUUIDs</code> after data changes to make sure all selected uuids are still valid.
///
/// </blockquote>
/// <h2>Theming</h2>
/// Supported class paths:
/// \code
/// fdlFUISearchToSelectViewController_searchToSelectView {}
/// fdlFUISearchToSelectViewController_tableView {}
/// fdlFUISearchToSelectViewController_tagsField {}
///
/// \endcodeSupported <code>TagsField</code> attributes:
/// \code
/// tint-color (Color)
/// background-color (Color)
/// content-insets (Box)
/// font-color { -placeholder } (Color)
/// font-name (FontName)
/// font-style (UIFontTextStyle)
/// font-size (Number)
/// text-line-clamp (Integer)
/// line-spacing (Float)
/// tag-spacing (Float)
/// tag-delimiter (String)
///
/// \endcodeSupported <code>Tag</code> attributes:
/// \code
/// tag-font-color { -selected } (Color)
/// tag-background-color { -selected } (Color)
/// tag-content-insets (Box)
///
/// \endcodeSupported <code>ImageView</code> attributes:
/// \code
/// search-icon-image (Image)
/// search-icon-image-tint-color (Color)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori31FUISearchToSelectViewController")
@interface FUISearchToSelectViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
/// :nodoc:
- (void)loadView;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView willDisplayCell:(UITableViewCell * _Nonnull)cell forRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)tableView:(UITableView * _Nonnull)tableView didDeselectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// A collection view section layout manager that computes the position and size in a section. This is a base class which defines the common properties of a collection section. This class is not supposed to be used directly. Instead, subclass this one and implement <code>prepare()</code> for calculating frames for views in collection view.
SWIFT_CLASS("_TtC8SAPFiori23FUISectionLayoutManager")
@interface FUISectionLayoutManager : NSObject
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// A FUISegmentedControl object is a horizontal control made up of multiple segments, each segment functioning as a discrete button.
/// Selection is mutually exclusive.
/// <h2>Code usage:</h2>
/// \code
/// let segmentedControl = FUISegmentedControl(titles: titles)
/// segmentedControl.selectedIndex = 1
/// segmentedControl.interItemSpacing = 20
/// segmentedControl.selectionDidChangeHandler = { [weak self] index in
/// print("selected: \(index ?? -1)")
/// }
///
///
/// \endcode<h2>Styling</h2>
/// Attribute setting:
/// Setting the items’ styling for <code>title</code> and <code>border</code> with <code>setAttribute(attribute, for:)</code>. Currently <code>.normal</code>, <code>.selected</code> and <code>.disabled</code> are supported.
/// \code
/// let attribute = FUISegmentAttribute(textColor: .red, borderColor: .blue)
/// segmentedControl.setAttribute(attribute: attribute, for: .selected)
///
/// \endcode<h2>Theming</h2>
/// \code
/// fdlFUISegmentedControl {
/// title-color: green;
/// title-color-selected: red;
/// title-color-disabled: gray;
/// border-color: blue;
/// border-color-selected: orange;
/// border-color-disabled: gray;
/// interItem-spacing: 20;
/// title-inset: 5 10 5 10;
/// content-inset: 0 40 0 40;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori19FUISegmentedControl")
@interface FUISegmentedControl : UIView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end






/// A <code>UITableViewCell</code> subclass, which allows a user to view or select from a list of strings, using a Fiori-styled segmented control.
/// <img src="../ReadmeImages/FK_SegControlCellAnnotations.png?raw=true" alt="FUISegmentedControlFormCell" width="376">
/// The <code>value</code> property of the cell is equal to the <code>selectedSegmentIndex</code> in the segmented control.
/// Specifying the height for segments by setting <code>segmentHeight</code> api. By default it is set to nil which means segment will adjust its height to fit content.
/// Color setting:
/// Setting text color of buttons in the cell for a state using setTintColor(_:for:) api. Currently <code>disabled</code>, <code>normal</code> and <code>selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .selected)
///
/// \endcode<h2>Code usage:</h2>
/// \code
/// // Optionally, create an array of value option to localized string mappings
/// let buttonTitles: [[String: String]] = [["LO": "Low"], ["MED": "Medium"], ["HI": "High"]]
///
/// // Register FUISegmentedControlFormCell in viewDidLoad() method in the controller.
/// override func viewDidLoad() {
/// super.viewDidLoad()
/// self.tableView.register(FUISegmentedControlFormCell.self, forCellReuseIdentifier: FUISegmentedControlFormCell.reuseIdentifier)
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUISegmentedControlFormCell.reuseIdentifier, for: indexPath) as! FUISegmentedControlFormCell
///
/// cell.valueOptions = buttonTitles.flatMap { $0.map { $0.value } }
/// cell.keyName = "Priority"
/// cell.value = myObject.priority  // String value in the valid options set: ["LO", "MED", "HI"]
///
/// // MARK:  implement onChangeHandler
/// cell.onChangeHandler = { newValue in
/// myObject.priority = buttonTitles[newValue].first!.key  // lookup valid String value, from the buttonTitles array
/// }
///
/// return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUISegmentedControlFormCell
/// fdlFUISegmentedControlFormCell_keyLabel
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori27FUISegmentedControlFormCell")
@interface FUISegmentedControlFormCell : FUIInlineValidationTableViewCell
/// The key name of the cell
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The array of the valid options.
/// The maximum number of items in the array is limited to 5.
/// If there are more than 5 items, only the first 5 items will be used.
@property (nonatomic, copy) NSArray<NSString *> * _Nonnull valueOptions;
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified titleLabel SWIFT_UNAVAILABLE_MSG("'titleLabel' has been renamed to 'keyLabel'");
/// The key name label in the cell
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUISegmentedControlFormCell (SWIFT_EXTENSION(SAPFiori)) <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
/// :nodoc:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView * _Nonnull)collectionView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// :nodoc:
- (BOOL)collectionView:(UICollectionView * _Nonnull)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
@end

@class FUISignatureCaptureView;

/// This view controller is to host a signature capture view for user to sign.
/// Here is a code snippet how to use this <code>FUISignatureCaptureController</code>.
/// \code
///
/// let signatureCaptureController = FUISignatureCaptureController.createInstance()
/// signatureCaptureController.delegate = self
/// let navController = signatureCaptureController.navigationController ?? UINavigationController(rootViewController: signatureCaptureController)
/// navController.modalPresentationStyle = .formSheet
/// self.navigationController?.present(navController, animated: true, completion: nil)
///
///
/// \endcode<h2>Theming</h2>
/// Supported <code>TEXT</code> class paths:
/// \code
/// fdlFUISignatureCaptureController_title {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
/// font-color: (Color)
/// font-style: (UIFontTextStyle)
///
/// \endcodeSupported <code>BarButtonItem</code> class paths:
/// \code
/// fdlFUISignatureCaptureController_cancelButtonItem
/// fdlFUISignatureCaptureController_clearButtonItem
/// fdlFUISignatureCaptureController_doneButtonItem
///
/// \endcodeSupported <code>UIBarButtonItem</code> properties:
/// \code
/// font-color { -disabled } (Color)
/// font-style: { -disabled } (UIFontTextStyle)
/// image { -disabled } (Image)
///
/// \endcodeSupported <code>UINavigationBar</code> class paths:
/// \code
/// fdlFUISignatureCaptureController_navigationBar
///
/// \endcodeSupported <code>UINavigationBar</code> properties:
/// \code
/// background-color: (Color)
///
/// \endcodeSupported <code>UIToolBar</code> class paths:
/// \code
/// fdlFUISignatureCaptureController_toolBar
///
/// \endcodeSupported <code>UIToolBar</code> properties:
/// \code
/// background-color: (Color)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori29FUISignatureCaptureController")
@interface FUISignatureCaptureController : UIViewController
@property (nonatomic, readonly, weak) IBOutlet FUISignatureCaptureView * _Null_unspecified signatureCaptureView;
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified cancelButton;
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified doneButton;
@property (nonatomic, readonly, weak) IBOutlet UIBarButtonItem * _Null_unspecified clearButton;
/// :nodoc:
- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// This is the view to be displayed in the <code>FUISignatureCaptureController</code>.
/// This <code>FUISignatureCaptureView</code> has a “X” image followed by a signature line for user to sign above the line.
/// This view is created from <code>FUISignatureCaptureController</code>. Developer should not instantiate this view directly.
/// <h2>Theming</h2>
/// Supported <code>STROKEVIEW</code> class paths:
/// \code
/// fdlFUISignatureCaptureView {}
///
/// \endcodeSupported <code>STROKEVIEW</code> properties:
/// \code
/// background-color: (Color)
/// stroke-color: (Color)
/// streke-width: (Number)
///
/// \endcodeSupported <code>IMAGE</code> class paths:
/// \code
/// fdlFUISignatureCaptureView_xImageView {}
///
/// \endcodeSupported <code>IMAGE</code> properties:
/// \code
/// tint-color: (Color)
///
/// \endcodeSupported <code>VIEW</code> class paths:
/// \code
/// fdlFUISignatureCaptureView_signatureLineView {}
///
/// \endcodeSupported <code>VIEW</code> properties:
/// \code
/// background-color: (Color)
///
/// \endcodeSupported <code>TEXT</code> class paths:
/// \code
/// fdlFUISignatureCaptureView_footnote {}
///
/// \endcodeSupported <code>TEXT</code> properties:
/// \code
/// font-color: (Color)
/// font-style: (UIFontTextStyle)
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori23FUISignatureCaptureView")
@interface FUISignatureCaptureView : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
@end


/// A variant of <code>UICollectionViewCell</code> which is very similar to <code>SimplePropertyFormCell</code> except that it’s not editable.
/// <ul>
///   <li>
///     <code>keyName</code>: The key of the cell.
///   </li>
///   <li>
///     <code>value</code>: The value of the cell.
///   </li>
/// </ul>
/// <h2>Code usage:</h2>
/// Register <code>FUISimplePropertyCollectionViewCell</code> for a collection view object.
/// \code
/// self.collectionView.register(FUISimplePropertyCollectionViewCell.self, forCellWithReuseIdentifier: FUISimplePropertyCollectionViewCell.reuseIdentifier)
///
/// \endcodeDequeue a <code>FUISimplePropertyCollectionViewCell</code> object from a collection view’s dataSource method <code>collectionView(_:cellForItemAt:)</code>
/// \code
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
///     let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: FUISimplePropertyCollectionViewCell.reuseIdentifier, for: indexPath) as! FUISimplePropertyCollectionViewCell
///
///     switch indexPath.item {
///         case 0:
///         cell.keyName = "Name"
///         cell.value = "Broken Plates on Pole"
///         case 1:
///         cell.keyName = "Sort No."
///         cell.value = "0001"
///         default:
///         break
///     }
///
///     return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUISimplePropertyCollectionViewCell
/// fdlFUISimplePropertyCollectionViewCell_keyLabel
/// fdlFUISimplePropertyCollectionViewCell_valueTextField
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori35FUISimplePropertyCollectionViewCell")
@interface FUISimplePropertyCollectionViewCell : NibDesignableFUIBaseCollectionViewCell
/// The <code>UILabel</code> holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The <code>UITextField</code> holds the value string.
@property (nonatomic, readonly, weak) IBOutlet UITextField * _Null_unspecified valueTextField;
/// The value of the property.
@property (nonatomic, copy) IBInspectable NSString * _Nullable value;
/// The key name of the cell.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
@end


/// View component used in <code>FUIObjectTableViewCell</code>. Typically not used directly by developer.
/// This view appears as the accessoryView to the <code>FUIObjectTableViewCell</code>.
/// <h2>Available:</h2>
/// <ul>
///   <li>
///     <code>progressView</code>: A <code>FUISingleActionProgressIndicator</code> used to display progres.  Toggle between the states by changing the <code>actionAccessoryType</code>.
///   </li>
///   <li>
///     <code>button</code>: A <code>FUISingleActionButton</code> displayed in the <code>FUISingleActionAccessoryView</code>.  This button’s width will not exceed 45% of the width of the container.  Button height will dynamically resize based on button text.  Button text can wrap two lines.  Use the button’s titleLabel <code>preferredMaxLayoutWidth</code> and the button’s <code>isPreservingPreferredMaxLayoutWidth</code> to set the button’s width. <em>Note</em> Developer should change <code>preferredMaxLayoutWidth</code> depenedent on the accessibility text size.
///   </li>
///   <li>
///     <code>actionAccessoryType</code>: A <code>FUITableViewCellActionAccessoryType</code> type used to display the button or the different states of the <code>progressView</code>.  Changing the <code>actionAccessoryType</code> drives which view is active.
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// let singleActionView = FUISingleActionAccessoryView()
/// singleActionView.actionAccessoryType = .button
/// singleActionView.button.setTitle("Follow", for: .normal)
/// singleActionView.button.setTitle("Unfollow", for: .selected)
/// singleActionView.button.titleLabel?.preferredMaxLayoutWidth = 75
/// singleActionView.button.isPersistentSelection = true
/// singleActionView.button.isPreservingPreferredMaxLayoutWidth = true
/// singleActionView.button.didSelectHandler = { btn in
///    print("Button Selected")
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori28FUISingleActionAccessoryView")
@interface FUISingleActionAccessoryView : UIView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)layoutSubviews;
/// The size of the view - the size reflects the <code>bounds</code> size.
@property (nonatomic, readonly) CGSize intrinsicContentSize;
@end


/// Button component used in <code>FUISingleActionAccessoryView</code>.
/// This view appears as the accessoryView to the <code>FUIObjectTableViewCell</code>.
/// <h2>Usage</h2>
/// \code
/// let singleActionButton = FUISingleActionButton()
/// singleActionButton.setTitle("Follow", for: .normal)
/// singleActionButton.setTitle("Unfollow", for: .selected)
/// singleActionButton.titleLabel?.preferredMaxLayoutWidth = 75
/// singleActionButton.isPersistentSelection = true
/// singleActionButton.isPreservingPreferredMaxLayoutWidth = true
/// singleActionButton.didSelectHandler = { btn in
///    print("Button Selected")
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUISingleActionButton")
@interface FUISingleActionButton : FUIButton
/// :nodoc:
@property (nonatomic, readonly) CGSize intrinsicContentSize;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// The progress indicator of the <code>FUIObjectTableViewCell</code> within the <code>FUISingleActionAccessoryView</code>.
/// The indicator has an optional selection handler triggered by <code>UIControlEvent.touchUpInside</code>
/// <h2>Usage</h2>
/// \code
/// let progressView = FUISingleActionProgressIndicator()
/// progressView.didSelectHandler = { progressView in
///    print("Indicator Selected")
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori32FUISingleActionProgressIndicator")
@interface FUISingleActionProgressIndicator : FUIProgressIndicatorControl
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end

@class UISlider;

/// A customized <code>UITableViewCell</code>, which contains a <code>UILabel</code>, a <code>UITextField</code> and a <code>UISlider</code>. It allows users to select a single value from a continuous range of values.
/// <img src="../ReadmeImages/FUISliderFormCell.png?raw=true" alt="FUISliderFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property
///   </li>
///   <li>
///     <code>value</code>: The value of the property, as <code>Float</code>
///   </li>
///   <li>
///     <code>minimumValue</code>: The minimum value of the selection range.
///   </li>
///   <li>
///     <code>maximumValue</code>: The maximum value of the selection range.
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value.
///   </li>
/// </ul>
/// Optionally, the developer may set:
/// <ul>
///   <li>
///     <code>unit</code>: The unit of value. Default is <code>mi</code>.
///   </li>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color setting:
/// Setting text color of filter buttons for a state using setTintColor(_:for:) api. Currently <code>.disabled</code> and <code>.normal</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcodeThe following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
/// override func viewDidLoad() {
///     super.viewDidLoad()
///     self.tableView.register(FUISliderFormCell, forCellReuseIdentifier: FUISliderFormCell.reuseIdentifier)
///     // ...
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///
///     let cell = tableView.dequeueReusableCell(withIdentifier: FUISliderFormCell.reuseIdentifier, for: indexPath) as! FUISliderFormCell
///     cell.keyName = "Distance"
///     cell.minimumValue = 0
///     cell.maximumValue = 30
///     cell.value = myObject.distance
///
///     // MARK:  implement an onChangeHandler
///     cell.onChangeHandler = { [weak self] newValue in
///         self.myObject.distance = newValue
///     }
///
///     return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUISliderFormCell
/// fdlFUISliderFormCell_keyLabel
/// fdlFUISliderFormCell_valueTextField
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori17FUISliderFormCell")
@interface FUISliderFormCell : FUIInlineValidationTableViewCell
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The value of the property.
@property (nonatomic) IBInspectable float value;
/// The key name of the property.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// The <code>UILabel</code> holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The <code>UITextField</code> holds the value string.
@property (nonatomic, readonly, weak) IBOutlet UITextField * _Null_unspecified valueTextField;
/// The <code>UISlider</code> of the cell.
@property (nonatomic, readonly, weak) IBOutlet UISlider * _Null_unspecified slider;
/// :nodoc:
- (void)updateConstraints;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Section layout manager subclass specifically designed for <code>FUIStandardAutoSizingColumnFlowLayout</code> which layout the cells in columns with the same width.
SWIFT_CLASS("_TtC8SAPFiori47FUIStandardAutoSizingColumnSectionLayoutManager")
@interface FUIStandardAutoSizingColumnSectionLayoutManager : FUISectionLayoutManager
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UITableViewHeaderFooterView</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori38NibDesignableTableViewHeaderFooterView")
@interface NibDesignableTableViewHeaderFooterView : UITableViewHeaderFooterView
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>UITableViewHeaderFooterView</code> reusable view for headers and footers.
/// The <code>UITableViewHeaderFooterView</code> has two style options:  <code>.title</code>, and <code>.attribute</code>.
/// In <code>.title</code> style, only the <code>titleLabel</code> is displayed.
/// In <code>.attribute</code> style, the <code>titleLabel</code> is displayed, and the <code>attributeLabel</code> may also be displayed.  Also, in <code>.attribute</code> style, the disclosure indicator is displayed by default.
SWIFT_CLASS("_TtC8SAPFiori28FUITableViewHeaderFooterView")
@interface FUITableViewHeaderFooterView : NibDesignableTableViewHeaderFooterView
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithReuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesCancelled:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)drawRect:(CGRect)rect;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end



/// <code>UIView</code> subclass to draw text and glygh image using TextKit apis. Typically not used by developer.
SWIFT_CLASS("_TtC8SAPFiori14FUITextKitView")
@interface FUITextKitView : UIView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// :nodoc:
- (void)drawRect:(CGRect)rect;
/// :nodoc:
@property (nonatomic) BOOL isAccessibilityElement;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
@property (nonatomic, readonly) BOOL canBecomeFirstResponder;
/// :nodoc:
- (void)copy:(id _Nullable)sender;
/// :nodoc:
- (BOOL)canPerformAction:(SEL _Nonnull)action withSender:(id _Nullable)sender SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUITextKitView (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (CGSize)sizeThatFits:(CGSize)size SWIFT_WARN_UNUSED_RESULT;
@end

@class NSTextContainer;
@protocol UITextViewDelegate;

/// The <code>FUITextView</code> class extends <code>UITextView</code>, to support displaying a styled placeholder text string when the <code>text</code> property is empty.
/// The class replaces the open-source <code>SZTextView</code> class, used in <em>version 1.0</em>.
SWIFT_CLASS("_TtC8SAPFiori11FUITextView")
@interface FUITextView : UITextView
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame textContainer:(NSTextContainer * _Nullable)textContainer OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
@property (nonatomic, strong) UIColor * _Nullable textColor;
/// :nodoc:
@property (nonatomic, strong) UIFont * _Nullable font;
/// The text displayed by the text view.
@property (nonatomic, copy) NSString * _Null_unspecified text;
/// The styled text displayed by the text view
@property (nonatomic, strong) NSAttributedString * _Null_unspecified attributedText;
/// / :nodoc:
@property (nonatomic, weak) id <UITextViewDelegate> _Nullable delegate;
/// :nodoc:
- (BOOL)becomeFirstResponder SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
@end




/// <code>FUITimelineCell</code> is a <code>UITableViewCell</code> subclass designed to present a business object related to an event in a Timeline view.
/// <img src="../ReadmeImages/TimelineCellAnnotation.png?raw=true" alt="FUITimelineCell"/>
/// <ul>
///   <li>
///     <code>FUITimelineCell</code> is a selectable cell intended for timelines that require open and complete status that displays timeline details.  Selecting the cell changes the card background color to the framework-preferred color.
///   </li>
///   <li>
///     It uses a vertical line and <code>nodeImageView</code> as a separator. To the left of the vertical line is the timeline event stack view that contains <code>eventLabel</code> and <code>eventImageView</code>. To the right of the vertical line is the main stack view that contains <code>headlineLabel</code> and <code>subheadlineLabel</code>.
///   </li>
///   <li>
///     Below the main view is an attribute stack view with <code>attributeLabel</code> and <code>subAttributeLabel</code> laid out horizontally.
///   </li>
///   <li>
///     To the right of the main view is a status view that contains <code>statusLabel</code>, <code>statusImage</code>, <code>substatusLabel</code>, and <code>substatusImage</code> laid out vertically.
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// let cell = tableView.dequeueReusableCell(withIdentifier: "FUITimelineCell", for: indexPath) as! FUITimelineCell
/// cell.headlineText = "Planned Downtime Period Identified"
/// cell.subheadlineText = "Work Package"
/// cell.nodeType = .open
/// cell.eventText = "9:45\nAM"
/// cell.eventImage = #imageLiteral(resourceName: "rain")
/// cell.statusImage = #imageLiteral(resourceName: "ErrorIcon")
/// cell.subStatusText = "Active"
/// return cell
/// }
///
/// \endcode<h2>Notes</h2>
/// <h4>SingleLine Sepatator Between Timeline Items in the Table</h4>
/// <code>Tableview</code>’s default <code>separatorStyle</code> is <code>.singleLine</code>. Because of this default setting, there can be a 1.0 px divider line or a separator in between each item on the timeline in the table. This is not an issue in timeline. To get rid of the separator, set <code>separatorStyle</code> to <code>none</code> in the <code>TabelViewController</code> class.
/// \code
/// override func viewDidLoad() {
/// super.viewDidLoad()
/// //...
/// self.tableView.separatorStyle = .none
/// //...
/// }
///
/// \endcode<h4>Customize the background color</h4>
/// Developers may use the <code>backgroundColor</code> property of <code>timelineBackground</code> and <code>cardBackground</code> to set the background color,
/// and use the <code>setTintColor(_:_:)</code> <code>UITableViewCell</code> API to customize the card background in highlighted and completed states.
/// \code
/// timelineCell.timelineBackground.backgroundColor = UIColor.orange
/// timelineCell.cardBackground.backgroundColor = UIColor.yellow // For normal background
/// timelineCell.setTintColor(UIColor.red, for: .highlighted) // For highlighted state background
/// timelineCell.setTintColor(UIColor.green, for: .application) // For completed state background
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUITimelineCell
/// fdlFUITimelineCell_headlineLabel
/// fdlFUITimelineCell_subheadlineLabel
/// fdlFUITimelineCell_timestampLabel
/// fdlFUITimelineCell_secondaryTimestampLabel
/// fdlFUITimelineCell_statusLabel
/// fdlFUITimelineCell_substatusLabel
/// fdlFUITimelineCell_attributeLabel
/// fdlFUITimelineCell_subattributeLabel
/// fdlFUITimelineCell_nodeImageView
/// fdlFUITimelineCell_timelineBackground
/// fdlFUITimelineCell_cardBackground
/// fdlFUITimelineCell_cardBackground_complete
/// fdlFUITimelineCell_cardBackground_highlighted
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori15FUITimelineCell")
@interface FUITimelineCell : NibDesignableFUIBaseTableViewCell
/// A headline label in the main view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>headlineText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified headlineLabel;
/// A subheadline label in the main view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>subheadlineText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified subheadlineLabel;
/// A status label in the status stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>statusText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified statusLabel;
/// A substatus label in the status stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>substatusText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified subStatusLabel;
/// A status image view in the status stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>statusImage</code> property to set the image view’s image value.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified statusImageView;
/// A substatus image view in the status stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>substatusImage</code> property to set the image view’s image value.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified subStatusImageView;
/// A timestamp label in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>eventText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified timestampLabel;
/// A secondary timestamp label in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>secondaryTimestampText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified secondaryTimestampLabel;
/// A timestamp image view in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>secondaryTimestampImage</code> property to set the image view’s image value.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified secondaryTimestampImageView;
/// A node image view, centered on the cell’s vertical timeline line.
/// remark:
/// Use <code>nodeType</code> to set node.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified nodeImageView;
/// An attribute label in the footer horizontal stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>attributeText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified attributeLabel;
/// A subAttribute label in the footer horizontal stack view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>subAttributeText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified subAttributeLabel;
/// The background view of of the area on the left of timeline.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified timelineBackground;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// :nodoc:
- (void)observeValueForKeyPath:(NSString * _Nullable)keyPath ofObject:(id _Nullable)object change:(NSDictionary<NSKeyValueChangeKey, id> * _Nullable)change context:(void * _Nullable)context;
/// Property defining the headline text. An empty string value hides the <code>headlineLabel</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable headlineText;
/// Property defining the subheadline text. An empty string value hides the <code>subheadlineLabel</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subheadlineText;
/// Property defining the <code>statusLabel.text</code> value. An empty string value hides the <code>statusLabel</code>.
/// important:
///
/// The <code>statusLabel</code> and <code>statusImageView</code> cannot be displayed simultaneously. When values exist for both <code>statusText</code> and <code>statusImage</code>, <code>statusText</code> will take precedence.
@property (nonatomic, copy) IBInspectable NSString * _Nullable statusText;
/// Property defining the substatusLabel text. An empty string value hides the <code>subStatusLabel</code>.
/// important:
///
/// The <code>subStatusLabel</code> and <code>subStatusImageView</code> cannot be displayed simultaneously. When values exist for both <code>subStatusText</code> and <code>subStatusImage</code>, <code>subStatusText</code> will take precedence.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subStatusText;
/// Property defining the <code>statusImageView</code> image. An empty value hides the <code>statusImageView</code>. It’s expected to either set <code>statusText</code> or <code>statusImage</code> to display either one at the same position. When both <code>statusText</code> and <code>statusImage</code> are not set, the <code>substatusLabel</code> or <code>substatusImage</code> take <code>statusLable</code>/<code>statusImage</code>’s position.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable statusImage;
/// Property defining the <code>substatusImageView</code> image. An empty value hides the <code>substatusImageView</code>. It’s expected to either set <code>substatusText</code> or <code>substatusImage</code> to display either one at the same position.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable subStatusImage;
/// Property defining the timestamp text. An empty value hides the timestamp label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable timestampText;
/// Property defining the secondary timestamp text. An empty value hides the secondary timestamp label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable secondaryTimestampText;
/// Property defining the <code>secondaryTimestampImageView</code>’s image. An empty value hides the <code>secondaryTimestampImageView</code>.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable secondaryTimestampImage;
/// The image used as node icon.
/// If the value of this property is not nil, the timeline cell uses the given image as the node icon. It ignores the value of the <code>nodeType</code> property. <code>nodeColor</code> and <code>nodeColorDisabled</code> properties will also be ignored, so the developer is responsible for providing an image with the desired color.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable nodeImage;
/// Property defining the timeline width, which is the width of the whole timestamp view to the left of the vertical line in the cell. The default width is <code>70.0</code> px
@property (nonatomic) IBInspectable CGFloat timelineWidth;
/// Property defining the <code>attributeLabel</code> text. An empty value hides <code>attributeLabel</code> and <code>subAttributeLabel</code> text gets displayed at the original <code>attributeLabel</code> position.
@property (nonatomic, copy) IBInspectable NSString * _Nullable attributeText;
/// Property defining the <code>subAttributeLabel</code> text. An empty value hides <code>subAttributeLabel</code>.
@property (nonatomic, copy) IBInspectable NSString * _Nullable subAttributeText;
/// :nodoc:
- (void)updateConstraints;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesCancelled:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
@end


@interface FUITimelineCell (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end


/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UICollectionViewCell</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori31NibDesignableCollectionViewCell")
@interface NibDesignableCollectionViewCell : UICollectionViewCell
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUITimelineCollectionViewCell</code> is an Interface-Builder-designable UI component that extends <code>NibDesignableCollectionViewCell</code> for showing information of an task. FUITimelinePreviewView embeds a collection view which displays a set of FUITimelineCollectionViewCell.
/// <h2>Views Available in FUITimelineCollectionViewCell:</h2>
/// <ul>
///   <li>
///     <code>titleLabel</code>:  an UILabel showing a short description of the task.
///   </li>
///   <li>
///     <code>footnoteLabel</code>: a UILabel showing extra infomation about the task. When cell is used with a FUITimelinePreviewView, the textual representation of due date of FUITimelineItem is put here.
///   </li>
///   <li>
///     <code>nodeImageView</code>: a UIImageView contains a node image showing the status of the task. You change the node type by setting ‘nodeType’ on FUITimelineCollectionViewCell.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
/// let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUITimelineCollectionViewCell.reuseIdentifier, for: indexPath) as! FUITimelineCollectionViewCell
///
/// cell.title = "Development Kick-off"
/// cell.footnote = Date()
/// cell.nodeType = .open
///
/// return cell
/// }
///
/// \endcode<h2>theming</h2>
/// \code
/// fdlFUITimelineCollectionViewCell_titleLabel {
/// font-style: subheadline;
/// font-color: primary1;
/// }
///
/// fdlFUITimelineCollectionViewCell_footnoteLabel {
/// font-style: footnote;
/// font-color: primary3;
/// }
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori29FUITimelineCollectionViewCell")
@interface FUITimelineCollectionViewCell : NibDesignableCollectionViewCell
/// A title label that displays a text as title. Use <code>title</code> to set the label’s text value.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified titleLabel;
/// A image view that contains a node indicating the status of the task. Use <code>nodeType</code> to select the node of the <code>nodeImageView</code>.
@property (nonatomic, readonly, weak) IBOutlet UIImageView * _Null_unspecified nodeImageView;
/// A footnote label that displays a text as footnote. Use <code>footnote</code> to set the label’s text value.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified footnoteLabel;
/// A horizontal line of FUITimelineCollectionViewCell.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified timeline;
/// The text of title label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable title;
/// The text of footnote label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable footnote;
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)drawRect:(CGRect)rect;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
@end


/// FUITimelineItem is an item specialized for placement in FUITimelinePreviewView.
SWIFT_CLASS("_TtC8SAPFiori15FUITimelineItem")
@interface FUITimelineItem : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUITimelineMarkerCell</code> is a <code>UITableViewCell</code> subclass, designed to present a business object related to an event, in a Timeline view.
/// <img src="../ReadmeImages/TimelineMarkerCellAnnotation.png?raw=true" alt="FUITimelineMarkerCell"/>
/// <ul>
///   <li>
///     <code>FUITimelineMarkerCell</code> is a non-selectable with <code>selectionStyle</code> set to <code>.none</code> that is intended for timelines with start, inactive, early end, and end status that display timeline information.
///   </li>
///   <li>
///     It uses a vertical line and a node image as a separator. Left to the vertical line is the timeline event section that contains <code>eventLabel</code> and <code>eventImageView</code>; right to the vertical line is <code>titleLabel</code>.
///   </li>
///   <li>
///     The vertical line contains <code>leadingTimeline</code> on the top, <code>nodeImageView</code> in the middle, and a <code>trailingTimeline</code> at the bottom.
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// let cell = tableView.dequeueReusableCell(withIdentifier: "FUITimelineMarkerCell", for: indexPath) as! FUITimelineMarkerCell
/// cell.titleText = "Project Start"
/// cell.nodeType = .start
/// cell.eventText = "12/6/15"
/// cell.showLeadingTimeline = false
/// return cell
/// }
///
///
/// \endcode<h2>Notes</h2>
/// <h4>SingleLine Sepatator Between Timeline Items in the Table</h4>
/// Tableview’s default <code>separatorStyle</code> is <code>.singleLine</code>.  Because of this default setting, there can be a 1.0 px divider line or a separator in-between each item on the timeline in the table.  This is not an issue in timeline.  To get rid of the separator, set <code>separatorStyle</code> to <code>none</code> in the TabelViewController class
/// \code
///
/// override func viewDidLoad() {
/// super.viewDidLoad()
/// // ...
/// self.tableView.separatorStyle = .none
/// // ...
/// }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUITimelineMarkerCell
/// fdlFUITimelineMarkerCell_titleLabel
/// fdlFUITimelineMarkerCell_eventLabel
/// fdlFUITimelineMarkerCell_eventImageView
/// fdlFUITimelineMarkerCell_nodeImageView
/// fdlFUITimelineMarkerCell_cardBackground
/// fdlFUITimelineMarkerCell_timelineBackground
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori21FUITimelineMarkerCell")
@interface FUITimelineMarkerCell : NibDesignableFUIBaseTableViewCell
/// A title label in the main view.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>titleText</code> property to set the label’s text value
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified titleLabel;
/// A timestamp label in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>eventText</code> property to set the label’s text value
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified timestampLabel;
/// A secondary timestamp label in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>secondaryTimestampText</code> property to set the label’s text value.
@property (nonatomic, readonly, strong) IBOutlet FUILabel * _Null_unspecified secondaryTimestampLabel;
/// A timestamp image view in the cell’s left column.
/// important:
///
/// Use the <code>@IBInspectable</code> <code>secondaryTimestampImage</code> property to set the image view’s image value
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified secondaryTimestampImageView;
/// A node image view, centered on the cell’s vertical timeline line.
/// remark:
/// Use <code>nodeType</code> property to set appropriate node.
@property (nonatomic, readonly, strong) IBOutlet FUIImageView * _Null_unspecified nodeImageView;
/// The background view of of the area on the left of timeline.
@property (nonatomic, readonly, weak) IBOutlet UIView * _Null_unspecified timelineBackground;
/// :nodoc:
- (void)observeValueForKeyPath:(NSString * _Nullable)keyPath ofObject:(id _Nullable)object change:(NSDictionary<NSKeyValueChangeKey, id> * _Nullable)change context:(void * _Nullable)context;
/// Property defining the titleLabel text.  An empty value hides titleLabel.
@property (nonatomic, copy) IBInspectable NSString * _Nullable titleText;
/// Property defining the timestamp text. An empty value hides the timestamp label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable timestampText;
/// Property defining the secondary timestamp text. An empty value hides the secondary timestamp label.
@property (nonatomic, copy) IBInspectable NSString * _Nullable secondaryTimestampText;
/// Property defining the secondaryTimestampImageView’s image. An empty value hides the secondaryTimestampImageView.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable secondaryTimestampImage;
/// The image used as node icon.
/// If the value of this property is not nil, the timeline cell uses the given image as the node icon. It ignores the value of the <code>nodeType</code> property. <code>nodeColor</code> and <code>nodeColorDisabled</code> properties will also be ignored so developer is responsible for providing a image with desired color.
@property (nonatomic, strong) IBInspectable UIImage * _Nullable nodeImage;
/// Property defining the timeline width, which is the width of the whole timestamp view left to the veritical line in the cell.  The default width is <code>70.0</code> px
@property (nonatomic) IBInspectable CGFloat timelineWidth;
/// Property defining the flag to show or not to show timeline’s leading vertical line.  Default is true.
@property (nonatomic) IBInspectable BOOL showLeadingTimeline;
/// Property defining the flag to show or not to show timeline’s trailing vertical line.  Default is true.
@property (nonatomic) IBInspectable BOOL showTrailingTimeline;
/// :nodoc:
- (void)updateConstraints;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUITimelineMarkerCell (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
@end

@class FUITimelinePreviewView;

/// <code>FUITimelinePreviewTableViewCell</code> is an Interface-Builder-designable UI component that extends <code>NibDesignableTableViewCell</code> which contains a FUITimelinePreviewView. It resizes itself to fit content using the auto-layout size of FUITimelinePreviewView.
/// <h2>Views Available in FUIObjectTableViewCell:</h2>
/// <ul>
///   <li>
///     <code>timelinePreviewView</code>:  an FUITimelinePreviewView object contains a header and a collection view.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// var data: [FUITimelineItem] {
/// let item0 = FUITimelineItem()
/// item0.title = "Planned Downtime Period Identified for Tasks"
/// item0.due = Date(timeIntervalSinceNow: -86400 * 2) // 86400 sec equal to 1 day
/// item0.status = .complete
///
/// let item1 = FUITimelineItem()
/// item1.title = "UX Design Review"
/// item1.due = Date(timeIntervalSinceNow: -86400)
/// item1.status = .open
///
/// let item2 = FUITimelineItem()
/// item2.title = "Planned Downtime Period Identified for Tasks"
/// item2.due = Date()
/// item2.status = .open
///
/// let item3 = FUITimelineItem()
/// item3.title = "UX Design Review"
/// item3.due = Date(timeIntervalSinceNow: 86400)
/// item3.status = .open
///
/// let item4 = FUITimelineItem()
/// item4.title = "Project End"
/// item4.due = Date(timeIntervalSinceNow: 86400 * 2.0)
/// item4.status = .end
///
/// return [item0, item1, item2, item3, item4]
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUITimelinePreviewTableViewCell.reuseIdentifier, for: indexPath) as! FUITimelinePreviewTableViewCell
///
/// cell.timelinePreviewView.header.titleLabel.text = "Timeline"
/// cell.timelinePreviewView.header.attributeLabel.text = "attribute"
/// cell.timelinePreviewView.header.isDisclosureAccessoryHidden = false
/// cell.timelinePreviewView.header.didSelectHandler = {
/// }
///
/// // If you want to display other styles than date, for example, Time.
/// let formatter = DateFormatter()
/// formatter.dateFormat = "hh:mm"
/// cell.timelinePreviewView.dateFormatter = formatter
///
/// cell.timelinePreviewView.addItems(data)
///
/// return cell
/// }
///
///
/// \endcode<h2>theming</h2>
/// \code
/// fdlFUITimelinePreviewTableViewCell {
/// background-color: @clear;
/// }
/// fdlFUITimelinePreviewTableViewCell_selected {
/// background-color: @line;
/// }
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori31FUITimelinePreviewTableViewCell")
@interface FUITimelinePreviewTableViewCell : NibDesignableFUIBaseTableViewCell
/// The FUITimelinePreviewView object of FUITimelinePreviewTableViewCell.
@property (nonatomic, readonly, weak) IBOutlet FUITimelinePreviewView * _Null_unspecified timelinePreviewView;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)touchesBegan:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesEnded:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
/// :nodoc:
- (void)touchesCancelled:(NSSet<UITouch *> * _Nonnull)touches withEvent:(UIEvent * _Nullable)event;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// <code>FUITimelinePreviewView</code> is an Interface-Builder-designable UI component that extends <code>UIView</code> for showing a collection of tasks. It comes with a header and a collection view which uses FUITimelineCollectionViewCell to represent data items within it.
/// Using <code>addItems()</code> to populate a collection of FUITimelineItem object.
/// <h2>Views Available in FUIObjectCell:</h2>
/// <ul>
///   <li>
///     <code>header</code>:  a FUICollectionSectionHeaderFooterView containing a tilte label, an attribute label and a disclosure indicator.
///   </li>
///   <li>
///     <code>collectionView</code>: a collection view displaying a collection of data items represented by FUITimelineCollectionViewCell.
///   </li>
/// </ul>
/// <h2>Rules for displaying tasks:</h2>
/// <ul>
///   <li>
///     Timeline shows all items due but not marked complete. If there are Overdue objects, this will be shown first until it is marked complete. ‘Today’ will come in the timeline preview only if there is something due ‘Today’.
///   </li>
///   <li>
///     When the last object is the only one left on the timeline, the Project end date will be visible as the last milestone. The gradient for the horizontal line will switch to right to left.
///   </li>
///   <li>
///     Once the end of the timeline is visible and due and overdue tasks do not fill all the columns, the completed tasks will start to fill the available columns.
///   </li>
///   <li>
///     If there is an object due on the last day of the project, it will show as the Open Node, until it is marked complete. Then it will switch to the ‘Complete Node.’ The gradient for the horizontal line will switch to right to left.
///   </li>
/// </ul>
/// <h2>Example Initialization and Configuration:</h2>
/// \code
/// let timelinePreviewView = FUITimelinePreviewView()
///
/// timelinePreviewView.header.titleLabel.text = "Timeline"
/// timelinePreviewView.header.attributeLabel.text = "attribute"
/// timelinePreviewView.header.isDisclosureAccessoryHidden = false
/// timelinePreviewView.header.didSelectHandler = {
/// // do something when disclosure indicator is tapped
/// }
///
/// let item0 = FUITimelineItem()
/// item0.title = "Planned Downtime Period Identified for Tasks"
/// item0.due = Date(timeIntervalSinceNow: -86400 * 2)
/// item0.status = .complete
///
/// let item1 = FUITimelineItem()
/// item1.title = "UX Design Review"
/// item1.due = Date(timeIntervalSinceNow: -86400)
/// item1.status = .open
///
/// timelinePreviewView.addItems([item0, item1])
///
/// \endcode<h2>theming</h2>
/// \code
/// fdlFUITimelinePreviewView_header {
/// font-style: subheadline;
/// font-color: @primary2;
/// }
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori22FUITimelinePreviewView")
@interface FUITimelinePreviewView : UIView <UICollectionViewDataSource>
/// :nodoc:
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// The collection view of FUITimelinePreviewView.
@property (nonatomic, readonly, strong) UICollectionView * _Null_unspecified collectionView;
/// The header of FUITimelinePreviewView.
@property (nonatomic, readonly, strong) FUICollectionSectionHeaderFooterView * _Null_unspecified header;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView * _Nonnull)collectionView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
@end


/// The reusable UI component implemented as an <code>UITableViewCell</code> to allow user to enter a value, using a <code>UITextField</code>.
/// <img src="../ReadmeImages/FK_TitleCellAnnotations.png?raw=true" alt="FUITitleFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>value</code>: The value of the property, as <code>String</code>
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value
///   </li>
/// </ul>
/// Optionally, the developer may provide:
/// <ul>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color settings:
/// Setting tintColor for <code>valueTextField</code> for a state using setTintColor(_:for:) api. Currently <code>disabled</code> and <code>normal</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcoderemark:
/// The <code>font-color</code> attribute will be overridden by <code>tint-color-disabled</code> attribute when cell is switched to <code>disabled</code> state. DO NOT set <code>textColor</code> for <code>valueTextField</code> when cell is in <code>disabled</code> state!
/// The following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
/// override func viewDidLoad() {
///   super.viewDidLoad()
///   self.tableView.register(FUITitleFormCell.self, forCellReuseIdentifier: FUITitleFormCell.reuseIdentifier)
///   // ...
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///   let cell = tableView.dequeueReusableCell(withIdentifier: FUITitleFormCell.reuseIdentifier, for: indexPath) as! FUITitleFormCell
///
///   cell.value = myObject.title
///   cell.isEditable = true
///
///   // MARK:  implement onChangeHandler
///   cell.onChangeHandler = { newValue in
///        myObject.title = newValue
///   }
///   return cell
/// }
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUITitleFormCell
/// fdlFUITitleFormCell_valueTextField
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori16FUITitleFormCell")
@interface FUITitleFormCell : FUIInlineValidationTableViewCell <UITextFieldDelegate>
/// The value for FUITitleFormCell is the text of the Title.
@property (nonatomic, copy) IBInspectable NSString * _Nonnull value;
/// The UITextField to hold the title string.
@property (nonatomic, readonly, weak) IBOutlet FUITextField * _Null_unspecified valueTextField;
@property (nonatomic, readonly, weak) IBOutlet FUITextField * _Null_unspecified titleTextField SWIFT_UNAVAILABLE_MSG("'titleTextField' has been renamed to 'valueTextField'");
/// The placeholder text for the title text field.
@property (nonatomic, copy) IBInspectable NSString * _Nullable placeholderText;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// :nodoc:
- (BOOL)resignFirstResponder SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
- (BOOL)textField:(UITextField * _Nonnull)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString * _Nonnull)string SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end




/// This is a ‘UIViewController’ to display the error view when Touch ID or Face ID authentication is cancelled.
/// Developer could set the static string properties in this class to override the default text
/// displayed in this view.
/// <h2>Theming</h2>
/// \code
/// fdlFUITouchIDErrorViewController_errorTitleLabel {
/// font-color: @primary1;
/// }
///
/// fdlFUITouchIDErrorViewController_errorMessageLabel {
/// font-color: @primary1;
/// }
///
/// fdlFUITouchIDErrorViewController_actionButton {
/// font-size: 16;
/// font-name: system;
/// font-color: @primary6;
/// background-color: @tintColorDark;
/// corner-radius: 8;
/// border-width: 1;
/// border-color: @tintColorDark;
/// /* order (with whitespace as separator): [top] [right] [bottom] [left] */
/// title-insets: 0 8 0 8;
/// }
///
/// fdlFUITouchIDErrorViewController_navigationController_navigationBar {
/// background-tint-color: @tintColorLight;
/// bar-tint-color: @backgroundGradientTop;
/// bar-style: black;
/// font-color: @primary6;
/// }
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori29FUITouchIDErrorViewController")
@interface FUITouchIDErrorViewController : UIViewController
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewDidLayoutSubviews;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// :nodoc:
SWIFT_CLASS("_TtC8SAPFiori22FUIUserConsentPageView")
@interface FUIUserConsentPageView : FUIDrawingView
/// :nodoc:
- (void)actionButtonClicked;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// This <code>UIViewController</code> is used to display a series of user consent screens modally during the process
/// of onboarding. The property <code>forms</code> must be supplied, which is an array of objects of the two classes
/// that conform to the FUIUserConsentForm protocol, namely FUISinglePageUserConsentForm and
/// FUIMultiPageUserConsentForm. The Fiori for iOS SDK takes these forms and displays them modally as
/// single or multipage user consent screens using the FUIUserConsentViewController. A user consent screen
/// contains a title, a brief information on the topic for which the user consent is required and a link
/// to more details. There are 2 buttons in the toolbar, “Agree” and “Deny”, if the consent form is
/// mandatory or “Agree” and “Not Now”, if the consent form is optional. In the case of a mandatory form,
/// the user can proceed to the next step of onboarding only when they agree to the terms stated in the
/// form. In the case of an optional form, the user can choose to click the “Not Now” button and proceed
/// with the onboarding. In addition, there is a “Cancel” button in the navigation bar. The toolbar
/// buttons and the cancel button invoke the <code>FUIUserConsentViewControllerDelegate</code> methods which can be
/// used to handle the application logic based on the user input. If the form is a multi-page consent
/// form, only the last page in the form displays the toolbar and cancel buttons. Each consent form has
/// the <code>title</code> property,<code>body</code> containing the details, an <code>actionTitle</code>, which when tapped invokes the
/// <code>actionHandler</code>. There are also the <code>titleAttributedText</code>, <code>bodyAttributedText</code> and
/// <code>actionTitleAttributedText</code> properties, which when supplied take precedence over the title, body
/// and actionTitle properties. For example, when both <code>title</code>and <code>titleAttributedText</code> are supplied, only
/// <code>titleAttributedText</code> is displayed.
/// <img src="../ReadmeImages/UserConsentForm.png?raw=true" alt="FUIUserConsentViewController"/>
/// \code
///
/// let spForm = createSinglePageForm()
/// spForm.isRequired = false
/// let mpForm = createMultiPageForm()
/// mpForm.isRequired = false
/// let forms = [spForm,mpForm] as [Any]
///
/// (UIApplication.shared.delegate as! AppDelegate).inUserConsentScreen = true
/// let ctrller = FUIUserConsentViewController()
/// ctrller.delegate = self
/// ctrller.forms = forms as! [FUIUserConsentForm]
/// self.navigationController?.present(ctrller, animated: true, completion: nil)
///
///
/// func createSinglePageForm()->FUISinglePageUserConsentForm {
/// let singlepageform = FUISinglePageUserConsentForm()
/// singlepageform.title.text = "Data Privacy"
/// singlepageform.body.text = "Detailed text about how data privacy pertains to this app and why it is important for the user to enable this functionality"
/// singlepageform.actionTitle.text = "Learn more about Data Privacy"
/// singlepageform.actionHandler = { controller in
/// let alert = UIAlertController(title: "Want Data Privacy?", message: "Be wise about your data", preferredStyle: UIAlertControllerStyle.alert)
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// controller.present(alert, animated: true, completion: nil)
/// }
/// return singlepageform
/// }
///
/// func createMultiPageForm()->FUIMultiPageUserConsentForm {
/// let page1 = FUIUserConsentPage()
/// page1.title.text = "Data Privacy"
/// page1.body.text = "Detailed text about how data privacy pertains to this app and why it is important for the user to enable this functionality"
/// page1.actionTitle.text = "Learn more about Data Privacy"
/// page1.actionHandler = { controller in
/// let alert = UIAlertController(title: "Data Privacy", message: "Alert for Data Privacy Page", preferredStyle: UIAlertControllerStyle.alert)
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// controller.present(alert, animated: true, completion: nil)
/// }
///
/// let page2 = FUIUserConsentPage()
/// page2.title.text = "Security"
/// page2.body.text = "Detailed text about how data privacy pertains to this app and why it is important for the user to enable this functionality. "
/// page2.actionTitle.text = "Learn more about Data Privacy"
/// page2.actionHandler = { controller in
/// let alert = UIAlertController(title: "Security", message: "Alert for data security page", preferredStyle: UIAlertControllerStyle.alert)
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// controller.present(alert, animated: true, completion: nil)
/// }
///
/// let page3 = FUIUserConsentPage()
/// page3.title.text = "Consent"
/// page3.body.text = "Detailed text about how data privacy pertains to this app and why it is important for the user to enable this functionality"
/// page3.actionTitle.text = "Learn more about Data Privacy"
/// page3.actionHandler = { controller in
/// let alert = UIAlertController(title: "Consent", message: "Alert for consent page", preferredStyle: UIAlertControllerStyle.alert)
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// controller.present(alert, animated: true, completion: nil)
/// }
///
/// let userconsentpages = [page1,page2,page3]
/// let multipageform = FUIMultiPageUserConsentForm(pages: userconsentpages)
/// return multipageform
/// }
///
///
/// \endcodeApplication should also implement the <code>FUIUserConsentViewControllerDelegate</code> protocol, which provides
/// the delegate methods that handle the application flow based on whether the user agrees, disagrees or
/// cancels the form. It is important that the FUIUserConsentViewController, passed in as the parameter
/// <code>viewController</code> must be dismissed first as shown below, before proceeding with any other application
/// logic based on the user response to the forms.
/// \code
///
/// func userConsentViewController( viewController: FUIUserConsentViewController, didCancelConsentForms forms: [FUIUserConsentForm]) {
///
/// viewController.dismiss(animated: true, completion: nil)
///
/// let alert = UIAlertController(title: "Cancelled", message: "User cancelled Onboarding", preferredStyle: UIAlertControllerStyle.alert)
/// (UIApplication.shared.delegate as! AppDelegate).inUserConsentScreen = false
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// self.present(alert, animated: true, completion: nil)
///
/// }
///
/// func userConsentViewController( viewController: FUIUserConsentViewController, didReceiveResponseToConsentForms forms: [FUIUserConsentForm]) {
///
/// (UIApplication.shared.delegate as! AppDelegate).inUserConsentScreen = false
/// var NumAccepted = 0
/// for form in forms  {
/// if (form.isUserAccepted) {
/// NumAccepted = NumAccepted + 1
/// }
/// }
/// viewController.dismiss(animated: true, completion: nil)
/// if (NumAccepted > 0) {
/// let alert = UIAlertController(title: "Status", message: "User accepted \(NumAccepted) form(s)", preferredStyle: UIAlertControllerStyle.alert)
/// alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
/// self.present(alert, animated: true, completion: nil)
/// }
/// }
///
///
/// \endcodeNote that the user consent screen orientations are supported for iPad portrait and landscape
/// orientation and iPhone portrait orientation only. Since the screen is not supported in iPhone landscape
/// orientation, the app needs to switch to portrait mode before presenting the screen and the AppDelegate
/// needs to lock the screen orientation when these screens are shown, similar to the following code
/// snippet.
/// In app’s AppDelegate:
/// \code
///
/// public var inUserConsentScreen: Bool = false
///
/// // Implement this function to support only portrait orientation when FUIUserConsentScreen is displayed in iPhone.
/// func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
/// if !inUserConsentScreen {
/// return .allButUpsideDown
/// } else {
/// return .portrait
/// }
/// }
///
///
/// \endcodeBefore presenting the <code>FUIUserConsentViewController</code>:
/// \code
///
/// // Let AppDelegate know that we are entering the screen
/// (UIApplication.shared.delegate as! AppDelegate).inUserConsentScreen = true
///
/// // Present the screen
/// self.navigationController?.present(ctrller, animated: true, completion: nil)
///
///
/// \endcodeAfter dismissing the <code>FUIUserConsentViewController</code> screen:
/// \code
///
/// viewController.dismiss(animated: true, completion: nil)
///
/// // Let AppDelegate know that we are exiting the view
/// (UIApplication.shared.delegate as! AppDelegate).inUserConsentScreen = false
///
///
/// \endcode<h2>Theming</h2>
/// Supported class paths:
/// fdlFUIUserConsentPageView_title {}
/// fdlFUIUserConsentPageView_body {}
/// fdlFUIUserConsentPageView_actionTitle {}
/// Supported properties:
/// font-color: Color;
/// font-style: UIFontTextStyle;
/// text-line-clamp: Integer;
/// text-align: NSTextAlignment;
/// Supported <code>NavigationBar</code> class paths:
/// \code
/// fdlFUIUserConsentViewController_navigationBar {}
///
/// \endcodeSupported <code>NavigationBar</code> properties:
/// \code
/// bar-tint-color: Color;
/// background-color: Color;
///
/// \endcode<h2>Attention</h2>
/// The delegate object with type <code>FUIUserConsentViewControllerDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during the whole execution scope.
SWIFT_CLASS("_TtC8SAPFiori28FUIUserConsentViewController")
@interface FUIUserConsentViewController : UIViewController
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
- (void)viewDidAppear:(BOOL)animated;
/// :nodoc:
- (void)didReceiveMemoryWarning;
@end

@class UIPickerView;

/// A customized <code>UITableViewCell</code>, which contains a <code>UILabel</code>, a <code>UITextField</code> and a <code>UIPickerView</code>. It allows users to select a single value from a set of options using a spinning wheel.
/// <img src="../ReadmeImages/FUIValuePickerFormCell.png?raw=true" alt="FUIValuePickerFormCell" width="376">
/// The developer should set the following properties on the cell, in their implementation of <code>UITableViewDataSource</code> <code>cellForRow(at:)</code> function:
/// <ul>
///   <li>
///     <code>keyName</code>: The key name of the property
///   </li>
///   <li>
///     <code>valueOptions</code>: A set of options that users can chose from.
///   </li>
///   <li>
///     <code>value</code>: The value of the property, as <code>Int</code>
///   </li>
/// </ul>
/// And an <code>onChangeHandler</code>:
/// <ul>
///   <li>
///     <code>onChangeHandler</code>: a handler closure, which is invoked on changes to the value.
///   </li>
/// </ul>
/// Optionally, the developer may set
/// <ul>
///   <li>
///     <code>isEditable</code>: Indicates if the cell’s value may be modified.  Defaults to <code>true</code>.
///   </li>
/// </ul>
/// Color setting:
/// Setting text color of filter buttons for a state using setTintColor(_:for:) api. Currently <code>.disabled</code>, <code>.normal</code> and <code>selected</code> are supported.
/// \code
/// cell.setTintColor(UIColor.red, for: .normal)
///
/// \endcodeThe following is an example of usage in an application <code>UITableViewController</code>:
/// important:
/// The app’s <code>UITableViewController</code> must subclass <code>FUIFormTableViewController</code>
/// \code
/// override func viewDidLoad() {
/// super.viewDidLoad()
/// self.tableView.register(FUIValuePickerFormCell, forCellReuseIdentifier: FUIValuePickerFormCell.reuseIdentifier)
/// // ...
/// }
///
/// override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
///
/// let cell = tableView.dequeueReusableCell(withIdentifier: FUIValuePickerFormCell.reuseIdentifier, for: indexPath) as! FUIValuePickerFormCell
/// cell.keyName = "Maximum Price"
/// cell.valueOptions = ["5", "10", "15", "20", "25"]
/// cell.value = 0
///
/// // MARK:  implement an onChangeHandler
/// cell.onChangeHandler = { [weak self] newValue in
/// self.myObject.price = self.priceTitles[newValue].first!.key
/// }
///
/// return cell
/// }
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIValuePickerFormCell
/// fdlFUIValuePickerFormCell_keyLabel
/// fdlFUIValuePickerFormCell_valueTextField
/// fdlFUIValuePickerFormCell_valueTextField_selected
///
/// \endcode
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori22FUIValuePickerFormCell")
@interface FUIValuePickerFormCell : FUIInlineValidationTableViewCell <UIPickerViewDataSource, UIPickerViewDelegate>
/// The UILabel holds the key name string.
@property (nonatomic, readonly, weak) IBOutlet UILabel * _Null_unspecified keyLabel;
/// The UITextField holds the selected value strings.
@property (nonatomic, readonly, weak) IBOutlet UITextField * _Null_unspecified valueTextField;
/// :nodoc:
- (void)prepareForInterfaceBuilder;
/// The key name of the cell.
@property (nonatomic, copy) IBInspectable NSString * _Nullable keyName;
/// :nodoc:
@property (nonatomic, copy) IBInspectable NSString * _Nullable ibDisplayValue;
/// :nodoc:
- (void)layoutSubviews;
/// :nodoc:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView * _Nonnull)pickerView SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)pickerView:(UIPickerView * _Nonnull)pickerView numberOfRowsInComponent:(NSInteger)component SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSString * _Nullable)pickerView:(UIPickerView * _Nonnull)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)pickerView:(UIPickerView * _Nonnull)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
/// :nodoc:
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)prepareForReuse;
/// :nodoc:
@property (nonatomic, copy) NSArray * _Nullable accessibilityElements;
/// :nodoc:
- (NSInteger)accessibilityElementCount SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (id _Nullable)accessibilityElementAtIndex:(NSInteger)index SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (NSInteger)indexOfAccessibilityElement:(id _Nonnull)element SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end




/// <h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIWebViewContainer
/// fdlFUIWebViewContainer_cancelButton
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori19FUIWebViewContainer")
@interface FUIWebViewContainer : UIViewController
/// initializer for <code>FUIWebViewContainer</code>
- (nonnull instancetype)init;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
@end



/// This protocol provides method for handling button actions on a FUIWelcomeScreen view.
SWIFT_PROTOCOL("_TtP8SAPFiori28FUIWelcomeControllerDelegate_")
@protocol FUIWelcomeControllerDelegate
@optional
/// Handling <code>primaryActionButton</code> touch up inside action on a FUIWelcomeScreen view for <code>state</code> is <code>.notConfigured</code> and <code>configurationOptions</code> is <code>[.discoveryService, barcodeScanner]</code>.
/// \param _ FUIWelcomeController instance
///
/// \param willNavigateToActivationScreen FUIActivationScreen instance
///
- (void)welcomeController:(FUIWelcomeController * _Nonnull)welcomeController willNavigateToActivationScreen:(FUIActivationScreen * _Nonnull)activationScreen;
/// Handling <code>primaryActionButton</code> touch up inside action on a FUIWelcomeScreen view for <code>state</code> is <code>.notConfigured</code> and <code>configurationOptions</code> is <code>.discoveryService</code>.
/// \param _ FUIWelcomeController instance
///
/// \param shouldTryUserEmail user email entered
///
- (void)welcomeController:(FUIWelcomeController * _Nonnull)welcomeController shouldTryUserEmail:(NSString * _Nonnull)userEmail;
/// Handling <code>primaryActionButton</code> touch up inside action on a FUIWelcomeScreen view for <code>state</code> is <code>.notConfigured</code> and <code>configurationOptions</code> is <code>.barcodeScanner</code>.
/// \param _ FUIWelcomeController instance
///
/// \param willNavigateToScannerScreen FUIOnboardingScanViewController instance
///
- (void)welcomeController:(FUIWelcomeController * _Nonnull)welcomeController willNavigateToScannerScreen:(FUIOnboardingScanViewController * _Nonnull)scanController;
/// Handling <code>footnoteActionButton</code> touch up inside action on a FUIWelcomeScreen view for <code>state</code> is <code>.notConfigured</code> with any <code>configurationOptions</code> value set.
/// \param _ FUIWelcomeController instance
///
- (void)didSelectDemoMode:(FUIWelcomeController * _Nonnull)welcomeController;
/// Handling primaryActionButton touch up inside action on a FUIWelcomeScreen view for <code>state</code> is <code>.isConfigured</code>.
/// \param _ FUIWelcomeController instance
///
- (void)shouldContinueUserOnboarding:(FUIWelcomeController * _Nonnull)welcomeController;
@end


/// This <code>UIViewController</code> is used to display a welcome/launch screen to the application for onboarding.  The screen mainly displays the application name, instructions on how to start the activation process and an option to trigger the demo mode of the application.
/// <img src="../ReadmeImages/WelcomeScreenAnnotations.png?raw=true" alt="FUIWelcomeScreen"/>
/// <img src="../ReadmeImages/WelcomeScreenAnnotations_pt2.png?raw=true" alt="FUIWelcomeScreen"/>
/// Application can implement the <code>FUIWelcomeControllerDelegate</code> protocol, to present the demo mode of the application by adopting with the <code>didSelectDemoMode(_:)</code> function, to proceed sign in by implementing the <code>shouldContinueUserOnboarding(_:)</code> function, to proceed configuration based on the configuration options by implementing the <code>welcomeController(_:willNavigateToActivationScreen:)</code>, <code>welcomeController(_:shouldTryUserEmail:)</code>, or <code>welcomeController(_:willNavigateToScannerScreen:)</code> functions.
/// <code>FUIWelcomeScreen</code> is implemented in <code>FUIWelcomeScreen.storyboard</code>.  There are two ways to launch the screen:
/// <ul>
///   <li>
///     Use another story board and use a <code>Present Modally</code> segue to <code>FUIWelcomeScreen</code> storyboard in <code>SAPFiori</code> framework with <code>com.sap.cp.sdk.ios.SAPFiori</code> as Bundle.
///     App programmer needs to provide the properties needed in <code>UIController</code>’s prepare for segue function:
///   </li>
/// </ul>
/// \code
///
/// override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
/// let vc = segue.destination as! FUIWelcomeScreen
/// vc.state = .isConfigured
/// vc.detailLabel.text = "Thank you for downloading SAP Project Companion for Managers."
/// vc.delegate = self
/// }
///
///
/// \endcode<ul>
///   <li>
///     Programmatically loads it:
///   </li>
/// </ul>
/// \code
///
/// let vc = FUIWelcomeScreen.createInstanceFromStoryboard()
/// vc.state = .isConfigured
/// vc.detailLabel.text = "Thank you for downloading SAP Project Companion for Managers."
/// self.navigationController?.pushViewController(vc, animated: true)
///
///
/// \endcodeSettings for possible welcome screens being launched:
/// <ul>
///   <li>
///     Launch with Standard:  Application contains the necessary configurations to connect to mobile services, and should prompt user to Start.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     <code>state</code> property: <code>.isConfigured</code>
///   </li>
///   <li>
///     <code>configurationOptions</code> property: not required.  Value would be ignored.
///   </li>
///   <li>
///     <code>delegate</code> function(s) to be implemented: <code>shouldContinueUserOnboarding(_:)</code>, <code>didSelectDemoMode(_:)</code> if <code>isDemoAvailable</code> is <code>true</code>.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     Welcome Screen Launched with Link: Application has not been configured, and does not use <code>FUIWelcomeScreen</code> flow to obtain configuration.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     <code>state</code> property: <code>.notConfigured</code>
///   </li>
///   <li>
///     <code>configurationOptions</code> property: empty value
///   </li>
///   <li>
///     <code>delegate</code> function(s) to be implemented: <code>didSelectDemoMode(_:)</code> if <code>isDemoAvailable</code> is <code>true</code>
///   </li>
/// </ul>
/// <ul>
///   <li>
///     Welcome Screen Launched with Discovery Service:  Application has not been configured, and should prompt the end user for their email address.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     <code>state</code> property: <code>.notConfigured</code>
///   </li>
///   <li>
///     <code>configurationOptions</code> property: .discoveryService
///   </li>
///   <li>
///     <code>delegate</code> function(s) to be implemented: <code>welcomeController(_:shouldTryUserEmail:)</code>, <code>didSelectDemoMode(_:)</code> if <code>isDemoAvailable</code> is <code>true</code>
///   </li>
/// </ul>
/// <ul>
///   <li>
///     Welcome Screen Launched with Scanner:  Application has not been configured, and should prompt the end user to launch the Barcode Scanner to obtain connection settings.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     <code>state</code> property: <code>.notConfigured</code>
///   </li>
///   <li>
///     <code>configurationOptions</code> property: .barcodeScanner
///   </li>
///   <li>
///     <code>delegate</code> function(s) to be implemented: <code>welcomeController(_:willNavigateToScannerScreen:)</code>, <code>didSelectDemoMode(_:)</code> if <code>isDemoAvailable</code> is <code>true</code>
///   </li>
/// </ul>
/// <ul>
///   <li>
///     Welcome Screen Launched with Activation:  Application has not been configured, and should prompt the end user to pick between email address entry, or the Barcode Scanner, to obtain connection settings.
///   </li>
/// </ul>
/// <ul>
///   <li>
///     <code>state</code> property: <code>.notConfigured</code>
///   </li>
///   <li>
///     <code>configurationOptions</code> property: [.discoveryService, .barcodeScanner]
///   </li>
///   <li>
///     <code>delegate</code> function(s) to be implemented: <code>welcomeController(_:willNavigateToActivationScreen:)</code>, <code>didSelectDemoMode(_:)</code> if <code>isDemoAvailable</code> is <code>true</code>
///   </li>
/// </ul>
/// Note that the FUIWelcomeScreen is supported for iPad portrait and landscape orientation and iPhone portrait orientation only.
/// Since the screen is not supported in iPhone landscape orientation, the app needs to switch to portrait mode before presenting the screen.
/// And AppDelegate needs to lock the screen orientation when these screens are shown, similar to the following code snippet.
/// In app’s AppDelegate:
/// \code
///
/// public var inFUIWelcomeScreen: Bool = false
///
/// // implement this function to support only portrait orientation when FUIWelcomeScreen is displayed in iPhone.
/// func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
/// if !inFUIWelcomeScreen {
/// return .allButUpsideDown
/// } else {
/// return .portrait
/// }
/// }
///
///
/// \endcodeBefore presenting the <code>FUIWelcomeScreen</code>:
/// \code
///
/// // Let AppDelegate know that we are entering the screen
/// (UIApplication.shared.delegate as! AppDelegate).inFUIWelcomeScreen = true
///
/// // Make sure we rotate to portrait mode
/// let value = UIInterfaceOrientation.portrait.rawValue
/// UIDevice.current.setValue(value, forKey: "orientation")
///
/// // Present the screen
/// let vc = FUIWelcomeScreen.createInstanceFromStoryboard()
/// vc.detailLabel.text = "Thank you for downloading SAP Project Companion for Managers."
/// self.navigationController?.pushViewController(vc, animated: true)
///
///
/// \endcodeAfter dismissing the Passcode or Touch ID screen:
/// \code
///
/// onboardingScreen.dismiss(animated: true, completion: nil)
///
/// // Let AppDelegate know that we are exiting the view
/// (UIApplication.shared.delegate as! AppDelegate).inFUIWelcomeScreen = false
///
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIWelcomeScreen
/// fdlFUIWelcomeScreen_headlineLabel
/// fdlFUIWelcomeScreen_detailLabel
/// fdlFUIWelcomeScreen_emailTextField
/// fdlFUIWelcomeScreen_primaryActionButton
/// fdlFUIWelcomeScreen_footnoteLabel
/// fdlFUIWelcomeScreen_footnoteActionButton
/// fdlFUIWelcomeScreen_logoImageView
/// fdlFUIWelcomeScreen_navigationBar
/// fdlFUIWelcomeScreen_cancelButton
/// fdlFUIWelcomeScreen_loadingIndicatorView
/// fdlFUIWelcomeScreen_loadingIndicatorView_activityIndicator
/// fdlFUIWelcomeScreen_loadingIndicatorView_textLabel
///
/// \endcode<h2>Attention</h2>
/// <ul>
///   <li>
///     The delegate object with type <code>FUIWelcomeControllerDelegate</code> is declared as a weak reference. On deallocation it will be automatically set to nil. To keep it alive as expected, developer should retain the delegate object during its whole execution scope.
///   </li>
///   <li>
///     Developer can replace the logo image in the <code>FUIWelcomeScreen</code> using theming nss file. For example:
///   </li>
/// </ul>
/// \code
/// fdlFUIWelcomeScreen_logoImageView {
/// image-name: MyCompanyLogo.png;
/// }
///
/// \endcodeOr, developer could use the <code>logoImageView</code> property to set the logo image directly.
SWIFT_CLASS("_TtC8SAPFiori16FUIWelcomeScreen")
@interface FUIWelcomeScreen : FUIWelcomeController <UITextFieldDelegate>
/// :nodoc:
@property (nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle;
/// Headline label - setting <code>headlineLabel</code>.text displays the welcome headline message on the screen.  Framework does not display any default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified headlineLabel;
/// Detail label - setting <code>detailLabel</code>.text displays the instruction statement on the screen; otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified detailLabel;
/// Email text field - it is visible only when <code>state</code> is <code>.notConfigured</code> and <code>configurationOptions</code> is <code>.discoveryService</code>.
@property (nonatomic, readonly, strong) FUIAutoResizingTextField * _Nonnull emailTextField;
/// Primary action button that shows when <code>state</code> is not <code>.notConfigured</code> and <code>configurationOptions</code> is not empty.  Setting <code>primaryActionButton</code>.setTitle displays your own title for the button on the screen; otherwise, framework displays the default title.
@property (nonatomic, readonly, strong) IBOutlet FUIOnboardingButton * _Null_unspecified primaryActionButton;
/// Footnote label - Setting <code>footnoteLabel</code>.text displays the demo message on the screen; otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified footnoteLabel;
/// Footnote action button - setting <code>footnoteActionButton</code>.setTitle displays your own title on the screen; otherwise, framework displays the default title.
@property (nonatomic, readonly, strong) IBOutlet FUIOnboardingButton * _Null_unspecified footnoteActionButton;
/// Application name label - setting <code>appNameLabel</code>.text displays the application name on the screen.  Framework does not display any default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified appNameLabel SWIFT_UNAVAILABLE_MSG("`appNameLabel` and `thankyouLabel` have been consolidated to the single `welcomeDetailLabel`.  You should concatenate their respective strings to a new value for `welcomeDetailLabel.text`.");
/// Welcome label - setting <code>welcomeLabel</code>.text displays the welcome text on the screen; otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified welcomeLabel SWIFT_UNAVAILABLE_MSG("`welcomeLabel` has been removed");
/// Thankyou label - setting <code>thankyouLabel</code>.text displays the thankyou note on the screen otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UILabel * _Null_unspecified thankyouLabel SWIFT_UNAVAILABLE_MSG("`appNameLabel` and `thankyouLabel` have been consolidated to the single `welcomeDetailLabel`.  You should concatenate their respective strings to a new value for `welcomeDetailLabel.text`.");
/// Instruction text view - setting <code>instructionTextView</code>.text displays the instruction statement on the screen; otherwise, framework displays the default text.
@property (nonatomic, readonly, strong) IBOutlet UITextView * _Null_unspecified instructionTextView SWIFT_UNAVAILABLE_MSG("'instructionTextView' has been renamed to 'detailLabel'");
/// The <code>UIImageView</code> for the logo image.
/// The default is the SAP logo.
@property (nonatomic, readonly, weak) IBOutlet UIImageView * _Null_unspecified logoImageView;
/// :nodoc:
- (void)awakeFromNib;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
@property (nonatomic, readonly, copy) NSArray<UIKeyCommand *> * _Nullable keyCommands;
/// :nodoc:
- (void)viewWillDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewDidDisappear:(BOOL)animated;
/// :nodoc:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
/// :nodoc:
- (void)viewDidLayoutSubviews;
/// :nodoc:
- (void)prepareForSegue:(UIStoryboardSegue * _Nonnull)segue sender:(id _Nullable)sender;
/// :nodoc:
- (BOOL)textFieldShouldReturn:(UITextField * _Nonnull)textField SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// List style controller to be used in <code>FUIWhatsNewViewController</code>.
/// <h2>Components:</h2>
/// <ul>
///   <li>
///     collectionView
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
///  class CollectionViewDataSource: UICollectionViewDataSource {
///     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
///         return 2
///     }
///  
///     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
///         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUIWhatsNewCollectionViewCell.reuseIdentifier, for: indexPath) as! FUIWhatsNewCollectionViewCell
///         switch indexPath.item {
///         case 0:
///             cell.detailImageViewSize = CGSize(width: 66, height: 66)
///             cell.detailImageView.image = UIImage(named: "cat")
///             cell.headlineLabel.text = "headline text"
///             cell.subheadlineLabel.text = "subheadline text"
///         case 1:
///             // configure cell
///         }
///         
///         return cell
///     }
///  }
///  
///  let listController = FUIWhatsNewDetailListController()
///  listController.collectionView.dataSource = CollectionViewDataSource()
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori31FUIWhatsNewDetailListController")
@interface FUIWhatsNewDetailListController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate>
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (void)traitCollectionDidChange:(UITraitCollection * _Nullable)previousTraitCollection;
/// :nodoc:
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
@end


/// Page style controller to be used in <code>FUIWhatsNewViewController</code>.
/// <h2>Components:</h2>
/// <ul>
///   <li>
///     imageView
///   </li>
///   <li>
///     titleLabel
///   </li>
///   <li>
///     descriptionTextView
///   </li>
/// </ul>
/// <h2>Usage</h2>
/// \code
///  let pageController = FUIWhatsNewDetailPageController()
///  pageController.imageView.image = UIImage(named: "cat")
///  pageController.imageViewSize = CGSize(width: 66, height: 66)
///  pageController.titleLabel.text = "Title text"
///  pageController.descriptionTextView.text = "description text"
///  // enable image only mode in which image takes entire space and title and description become hidden.
///  pageController.isImageExpanded = true
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori31FUIWhatsNewDetailPageController")
@interface FUIWhatsNewDetailPageController : UIViewController
/// :nodoc:
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
/// Returns a <code>FUIWhatsNewDetailPageController</code> instance.
- (nonnull instancetype)init;
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillLayoutSubviews;
@end


/// The ‘FUIWhatsNewViewController’ is used to display new features for the application. It takes an array of <code>UIViewController</code>s, which represents each page and the user can swipe left and right to view content. We recommend using <code>FUIWhatsNewDetailPageController</code> or <code>FUIWhatsNewDetailListController</code> to display pages or list style content, but any <code>UIViewController</code> can be provided in case the developer wants to use their own design.
/// <h2>Usage</h2>
/// <h3>Implement Data Source Object</h3>
/// \code
/// class DataSource: FUIWhatsNewViewControllerDataSource {
///
///    func presentationViewControllers(for whatsNewViewController: FUIWhatsNewViewController) -> [UIViewController] {
///
///        let pageController = FUIWhatsNewDetailPageController()
///        pageController.imageView.image = UIImage(named: "cat")
///        pageController.imageViewSize = CGSize(width: 66, height: 66)
///        pageController.titleLabel.text = "Title text"
///        pageController.descriptionTextView.text = "description text"
///        // enable image only mode.
///        pageController.isImageExpanded = true
///
///        return [pageController]
///     }
///
///     func presentationIndex(for whatsNewViewController: FUIWhatsNewViewController) -> Int {
///         return 0
///     }
/// }
///
/// \endcode<h3>Implement Delegate Object to Monitor Events</h3>
/// The following events will be monitored:
/// <ul>
///   <li>
///     Will transition to next controller
///   </li>
///   <li>
///     Finished transitioning to next controller
///   </li>
///   <li>
///     Finish flow by clicking on <em>Close</em> button
///   </li>
/// </ul>
/// <h3>Initiate and Present the What’s New Controller</h3>
/// \code
/// let whatsNewController = FUIWhatsNewViewController()
/// whatsNewController.dataSource = dataSource
/// whatsNewController.delegate = delegate
/// present(whatsNewController)
///
/// \endcode<h2>Theming</h2>
/// Supported style classes
/// \code
/// fdlFUIWhatsNewViewController_listheadlineLabel
/// fdlFUIWhatsNewViewController_pageheadlineLabel
/// fdlFUIWhatsNewViewController_detailLabel
/// fdlFUIWhatsNewViewController_whatsnewview
/// fdlFUIWhatsNewViewController_closeButton
/// fdlFUIWhatsNewViewController_startButton
///
/// \endcode
SWIFT_CLASS("_TtC8SAPFiori25FUIWhatsNewViewController")
@interface FUIWhatsNewViewController : UIViewController
/// :nodoc:
- (void)viewDidLoad;
/// :nodoc:
- (void)viewWillAppear:(BOOL)animated;
/// :nodoc:
- (void)viewWillLayoutSubviews;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


@interface FUIWhatsNewViewController (SWIFT_EXTENSION(SAPFiori)) <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
/// :nodoc:
- (UIViewController * _Nullable)pageViewController:(UIPageViewController * _Nonnull)pageViewController viewControllerBeforeViewController:(UIViewController * _Nonnull)viewController SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (UIViewController * _Nullable)pageViewController:(UIPageViewController * _Nonnull)pageViewController viewControllerAfterViewController:(UIViewController * _Nonnull)viewController SWIFT_WARN_UNUSED_RESULT;
/// :nodoc:
- (void)pageViewController:(UIPageViewController * _Nonnull)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> * _Nonnull)pendingViewControllers;
/// :nodoc:
- (void)pageViewController:(UIPageViewController * _Nonnull)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> * _Nonnull)previousViewControllers transitionCompleted:(BOOL)completed;
@end


/// An instance of JTAppleCalendarView (or simply, a calendar view) is a
/// means for displaying and interacting with a gridstyle layout of date-cells
SWIFT_CLASS("_TtC8SAPFiori19JTAppleCalendarView")
@interface JTAppleCalendarView : UICollectionView
/// Configures the size of your date cells
@property (nonatomic) IBInspectable CGFloat cellSize;
/// Implemented by subclasses to initialize a new object (the receiver) immediately after memory for it has been allocated.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Initializes and returns a newly allocated collection view object with the specified frame and layout.
- (nonnull instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout * _Nonnull)layout OBJC_DESIGNATED_INITIALIZER SWIFT_UNAVAILABLE_MSG("Please use JTAppleCalendarView() instead. It manages its own layout.");
/// Initializes using decoder object
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end




@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori))
/// A semantic description of the view’s contents, used to determine whether the view should be flipped when switching between left-to-right and right-to-left layouts.
@property (nonatomic) UISemanticContentAttribute semanticContentAttribute;
@end


@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori)) <UIScrollViewDelegate>
/// Inform the scrollViewDidEndDecelerating
/// function that scrolling just occurred
- (void)scrollViewDidScrollToTop:(UIScrollView * _Nonnull)scrollView;
/// Tells the delegate when the user finishes scrolling the content.
- (void)scrollViewWillEndDragging:(UIScrollView * _Nonnull)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(CGPoint * _Nonnull)targetContentOffset;
/// Tells the delegate when a scrolling
/// animation in the scroll view concludes.
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView * _Nonnull)scrollView;
/// Tells the delegate that the scroll view has
/// ended decelerating the scrolling movement.
- (void)scrollViewDidEndDecelerating:(UIScrollView * _Nonnull)scrollView;
/// Tells the delegate that a scroll occured
- (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView;
@end




@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori)) <UICollectionViewDataSource, UICollectionViewDelegate>
/// Asks your data source object to provide a
/// supplementary view to display in the collection view.
- (UICollectionReusableView * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView viewForSupplementaryElementOfKind:(NSString * _Nonnull)kind atIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
- (void)collectionView:(UICollectionView * _Nonnull)collectionView willDisplayCell:(UICollectionViewCell * _Nonnull)cell forItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// Asks your data source object for the cell that corresponds
/// to the specified item in the collection view.
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Asks your data sourceobject for the number of sections in
/// the collection view. The number of sections in collectionView.
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView * _Nonnull)collectionView SWIFT_WARN_UNUSED_RESULT;
/// Asks your data source object for the number of items in the
/// specified section. The number of rows in section.
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Asks the delegate if the specified item should be selected.
/// true if the item should be selected or false if it should not.
- (BOOL)collectionView:(UICollectionView * _Nonnull)collectionView shouldSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Asks the delegate if the specified item should be deselected.
/// true if the item should be deselected or false if it should not.
- (BOOL)collectionView:(UICollectionView * _Nonnull)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Tells the delegate that the item at the specified index
/// path was selected. The collection view calls this method when the
/// user successfully selects an item in the collection view.
/// It does not call this method when you programmatically
/// set the selection.
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
/// Tells the delegate that the item at the specified path was deselected.
/// The collection view calls this method when the user successfully
/// deselects an item in the collection view.
/// It does not call this method when you programmatically deselect items.
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didDeselectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
@end


@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori))
/// Lays out subviews.
- (void)layoutSubviews;
- (void)reloadData SWIFT_UNAVAILABLE;
@end

@class UINib;

@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori))
/// Registers a class for use in creating supplementary views for the collection view.
/// For now, the calendar only supports: ‘UICollectionElementKindSectionHeader’ for the forSupplementaryViewOfKind(parameter)
- (void)registerClass:(Class _Nullable)viewClass forSupplementaryViewOfKind:(NSString * _Nonnull)elementKind withReuseIdentifier:(NSString * _Nonnull)identifier;
/// Registers a class for use in creating supplementary views for the collection view.
/// For now, the calendar only supports: ‘UICollectionElementKindSectionHeader’ for the forSupplementaryViewOfKind(parameter)
- (void)registerNib:(UINib * _Nullable)nib forSupplementaryViewOfKind:(NSString * _Nonnull)kind withReuseIdentifier:(NSString * _Nonnull)identifier;
@end


@interface JTAppleCalendarView (SWIFT_EXTENSION(SAPFiori))
/// Workaround for Xcode bug that prevents you from connecting the delegate in the storyboard.
/// Remove this extra property once Xcode gets fixed.
@property (nonatomic, strong) IBOutlet id _Nullable ibCalendarDelegate;
/// Workaround for Xcode bug that prevents you from connecting the delegate in the storyboard.
/// Remove this extra property once Xcode gets fixed.
@property (nonatomic, strong) IBOutlet id _Nullable ibCalendarDataSource;
@property (nonatomic, strong) id <UICollectionViewDelegate> _Nullable delegate SWIFT_UNAVAILABLE;
@property (nonatomic, strong) id <UICollectionViewDataSource> _Nullable dataSource SWIFT_UNAVAILABLE;
@end


/// The JTAppleCell class defines the attributes and
/// behavior of the cells that appear in JTAppleCalendarView objects.
SWIFT_CLASS("_TtC8SAPFiori11JTAppleCell")
@interface JTAppleCell : UICollectionViewCell
@property (nonatomic, getter=isSelected) BOOL selected SWIFT_UNAVAILABLE_MSG("---> Please use cellState.isSelected");
/// Cell view that will be customized
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// Returns an object initialized from data in a given unarchiver.
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Prepares the receiver for service after it has been loaded from an Interface Builder archive, or nib file.
- (void)awakeFromNib;
@end


/// The header view class of the calendar
SWIFT_CLASS("_TtC8SAPFiori29JTAppleCollectionReusableView")
@interface JTAppleCollectionReusableView : UICollectionReusableView
/// Initializes and returns a newly allocated view object with the specified frame rectangle.
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// Returns an object initialized from data in a given unarchiver.
/// self, initialized using the data in decoder.
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end








@interface MKOverlayRenderer (SWIFT_EXTENSION(SAPFiori))
@end















































@class UIProgressView;
@class UISegmentedControl;
@class UISwitch;
@class UIPageControl;
@class UITabBar;
@class UITabBarItem;
@class UIToolbar;
@class NSNotification;

/// The master renderer class that provides a list of static functions for individual component rendering
SWIFT_CLASS("_TtC8SAPFiori11NUIRenderer")
@interface NUIRenderer : NSObject
/// Render <code>UIActivityIndicatorView</code> with the default <code>ActivityIndicator</code> style class
/// \param activityIndicator The <code>UIActivityIndicatorView</code> being rendered.
///
+ (void)renderActivityIndicatorWithActivityIndicator:(UIActivityIndicatorView * _Nonnull)activityIndicator;
/// Render <code>UIActivityIndicatorView</code> with an given style class
/// \param activityIndicator The <code>UIActivityIndicatorView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderActivityIndicatorWithActivityIndicator:(UIActivityIndicatorView * _Nonnull)activityIndicator withClass:(NSString * _Nonnull)className;
/// Render <code>UIBarButtonItem</code> with the default <code>BarButton</code> style class
/// \param item The <code>UIBarButtonItem</code> being rendered.
///
+ (void)renderBarButtonItemWithItem:(UIBarButtonItem * _Nonnull)item;
/// Render <code>UIBarButtonItem</code> with an given style class
/// \param item The <code>UIBarButtonItem</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderBarButtonItemWithItem:(UIBarButtonItem * _Nonnull)item withClass:(NSString * _Nonnull)className;
/// Render <code>UIButton</code> with the default <code>Button</code> style class
/// \param button The <code>UIButton</code> being rendered.
///
+ (void)renderButtonWithButton:(UIButton * _Nonnull)button;
/// Render <code>UIButton</code> with an given style class
/// \param button The <code>UIButton</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderButtonWithButton:(UIButton * _Nonnull)button withClass:(NSString * _Nonnull)className;
/// Render <code>UIControl</code> with the default <code>Control</code> style class
/// \param control The <code>UIControl</code> being rendered.
///
+ (void)renderControlWithControl:(UIControl * _Nonnull)control;
/// Render <code>UIControl</code> with a given style class
/// \param control The <code>UIControl</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderControlWithControl:(UIControl * _Nonnull)control withClass:(NSString * _Nonnull)className;
/// Render <code>UILabel</code> with the default <code>Label</code> style class
/// \param label The <code>UILabel</code> being rendered.
///
+ (void)renderLabelWithLabel:(UILabel * _Nonnull)label;
/// Render <code>UILabel</code> with a given style class
/// \param label The <code>UILabel</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderLabelWithLabel:(UILabel * _Nonnull)label withClass:(NSString * _Nonnull)className;
/// Render <code>UILabel</code> with a given style class and suffix
/// \param label The <code>UILabel</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
/// \param suffix The suffix to the className.
///
+ (void)renderLabelWithLabel:(UILabel * _Nonnull)label withClass:(NSString * _Nonnull)className withSuffix:(NSString * _Nonnull)suffix;
/// Render <code>UIImageView</code> with a given style class
/// \param imageView The <code>UIImageView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderImageViewWithImageView:(UIImageView * _Nonnull)imageView withClass:(NSString * _Nonnull)className;
/// Render <code>UINavigationBar</code> with the default <code>NavigationBar</code> style class
/// \param bar The <code>UINavigationBar</code> being rendered.
///
+ (void)renderNavigationBarWithBar:(UINavigationBar * _Nonnull)bar;
/// Render <code>UINavigationBar</code> with a given style class
/// \param imageView The <code>UINavigationBar</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderNavigationBarWithBar:(UINavigationBar * _Nonnull)bar withClass:(NSString * _Nonnull)className;
/// Render <code>UIProgressView</code> with the default <code>Progress</code> style class
/// \param progressView The <code>UIProgressView</code> being rendered.
///
+ (void)renderProgressViewWithProgressView:(UIProgressView * _Nonnull)progressView;
/// Render <code>UIProgressView</code> with a given style class
/// \param progressView The <code>UIProgressView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderProgressViewWithProgressView:(UIProgressView * _Nonnull)progressView withClass:(NSString * _Nonnull)className;
/// Render <code>UINavigationItem</code> with the default <code>NavigationBar</code> style class
/// \param item The <code>UINavigationItem</code> being rendered.
///
+ (void)renderNavigationItemWithItem:(UINavigationItem * _Nonnull)item;
/// Render <code>UINavigationItem</code> with a given style class
/// \param item The <code>UINavigationItem</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderNavigationItemWithItem:(UINavigationItem * _Nonnull)item withClass:(NSString * _Nonnull)className;
/// Render <code>UISearchBar</code> with the default <code>SearchBar</code> style class
/// \param bar The <code>UISearchBar</code> being rendered.
///
+ (void)renderSearchBarWithBar:(UISearchBar * _Nonnull)bar;
/// Render <code>UISearchBar</code> with a given style class
/// \param bar The <code>UISearchBar</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderSearchBarWithBar:(UISearchBar * _Nonnull)bar withClass:(NSString * _Nonnull)className;
/// Render <code>UISegmentedControl</code> with the default <code>SegmentedControl</code> style class
/// \param control The <code>UISegmentedControl</code> being rendered.
///
+ (void)renderSegmentedControlWithControl:(UISegmentedControl * _Nonnull)control;
/// Render <code>UISegmentedControl</code> with a given style class
/// \param control The <code>UISegmentedControl</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderSegmentedControlWithControl:(UISegmentedControl * _Nonnull)control withClass:(NSString * _Nonnull)className;
/// Render <code>UISlider</code> with the default <code>Slider</code> style class
/// \param control The <code>UISlider</code> being rendered.
///
+ (void)renderSliderWithSlider:(UISlider * _Nonnull)slider;
/// Render <code>UISlider</code> with a given style class
/// \param slider The <code>UISlider</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderSliderWithSlider:(UISlider * _Nonnull)slider withClass:(NSString * _Nonnull)className;
/// Render <code>UISwitch</code> with the default <code>Switch</code> style class
/// \param uiSwitch The <code>UISwitch</code> being rendered.
///
+ (void)renderSwitchWithUiSwitch:(UISwitch * _Nonnull)uiSwitch;
/// Render <code>UISwitch</code> with a given style class
/// \param uiSwitch The <code>UISwitch</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderSwitchWithUiSwitch:(UISwitch * _Nonnull)uiSwitch withClass:(NSString * _Nonnull)className;
/// Render <code>UIPageControl</code> with the default <code>PageControl</code> style class
/// \param uiSwitch The <code>UIPageControl</code> being rendered.
///
+ (void)renderPageControlWithPageControl:(UIPageControl * _Nonnull)pageControl;
/// Render <code>UIPageControl</code> with a given style class
/// \param pageControl The <code>UIPageControl</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderPageControlWithPageControl:(UIPageControl * _Nonnull)pageControl withClass:(NSString * _Nonnull)className;
/// Render <code>UITabBar</code> with the default <code>TabBar</code> style class
/// \param uiSwitch The <code>UITabBar</code> being rendered.
///
+ (void)renderTabBarWithBar:(UITabBar * _Nonnull)bar;
/// Render <code>UITabBar</code> with a given style class
/// \param bar The <code>UITabBar</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTabBarWithBar:(UITabBar * _Nonnull)bar withClass:(NSString * _Nonnull)className;
/// Render <code>UITabBarItem</code> with the default <code>TabBarItem</code> style class
/// \param UITabBarItem The <code>UITabBarItem</code> being rendered.
///
+ (void)renderTabBarItemWithItem:(UITabBarItem * _Nonnull)item;
/// Render <code>UITabBarItem</code> with a given style class
/// \param item The <code>UITabBarItem</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTabBarItemWithItem:(UITabBarItem * _Nonnull)item withClass:(NSString * _Nonnull)className;
/// Render <code>UITableView</code> with the default <code>TableView</code> style class
/// \param tableView The <code>UITableView</code> being rendered.
///
+ (void)renderTableViewWithTableView:(UITableView * _Nonnull)tableView;
/// Render <code>UITableView</code> with a given style class
/// \param tableView The <code>UITableView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTableViewWithTableView:(UITableView * _Nonnull)tableView withClass:(NSString * _Nonnull)className;
/// Render <code>UITableViewCell</code> with the default <code>TableCell</code> style class
/// \param tableView The <code>UITableViewCell</code> being rendered.
///
+ (void)renderTableViewCellWithCell:(UITableViewCell * _Nonnull)cell;
/// Render <code>UITableViewCell</code> with a given style class
/// \param cell The <code>UITableViewCell</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTableViewCellWithCell:(UITableViewCell * _Nonnull)cell withClass:(NSString * _Nonnull)className;
/// Render <code>UIToolbar</code> with the default <code>Toolbar</code> style class
/// \param tableView The <code>UIToolbar</code> being rendered.
///
+ (void)renderToolbarWithBar:(UIToolbar * _Nonnull)bar;
/// Render <code>UIToolbar</code> with a given style class
/// \param bar The <code>UIToolbar</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderToolbarWithBar:(UIToolbar * _Nonnull)bar withClass:(NSString * _Nonnull)className;
/// Render <code>UITextField</code> with the default <code>TextField</code> style class
/// \param textField The <code>UITextField</code> being rendered.
///
+ (void)renderTextFieldWithTextField:(UITextField * _Nonnull)textField;
/// Render <code>UITextField</code> with a given style class
/// \param textField The <code>UITextField</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTextFieldWithTextField:(UITextField * _Nonnull)textField withClass:(NSString * _Nonnull)className;
/// Render <code>UITextView</code> with the default <code>TextView</code> style class
/// \param textView The <code>UITextView</code> being rendered.
///
+ (void)renderTextViewWithTextView:(UITextView * _Nonnull)textView;
/// Render <code>UITextView</code> with a given style class
/// \param textView The <code>UITextView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderTextViewWithTextView:(UITextView * _Nonnull)textView withClass:(NSString * _Nonnull)className;
/// Render <code>FUIKPIProgressView</code> with the default <code>FUIKPIProgressView</code> style class
/// \param kpiProgressView The <code>FUIKPIProgressView</code> being rendered.
///
+ (void)renderProgressViewWithKpiProgressView:(FUIKPIProgressView * _Nonnull)kpiProgressView;
/// Render <code>FUIKPIProgressView</code> with a given style class
/// \param kpiProgressView The <code>FUIKPIProgressView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderProgressViewWithKpiProgressView:(FUIKPIProgressView * _Nonnull)kpiProgressView withClass:(NSString * _Nonnull)className;
/// Render <code>UIView</code> with the default <code>View</code> style class
/// \param view The <code>UIView</code> being rendered.
///
+ (void)renderViewWithView:(UIView * _Nonnull)view;
/// Render <code>UIView</code> with a given style class
/// \param view The <code>UIView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderViewWithView:(UIView * _Nonnull)view withClass:(NSString * _Nonnull)className;
/// Render <code>UIView</code> with a given style class and suffix to the style class
/// \param view The <code>UIView</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
/// \param suffix The suffix to the className.
///
+ (void)renderViewWithView:(UIView * _Nonnull)view withClass:(NSString * _Nonnull)className withSuffix:(NSString * _Nonnull)suffix;
/// Render <code>UIWindow</code> with the default <code>Window</code> style class
/// \param window The <code>UIWindow</code> being rendered.
///
+ (void)renderWindowWithWindow:(UIWindow * _Nonnull)window;
/// Render <code>UIWindow</code> with a given style class
/// \param window The <code>UIWindow</code> being rendered.
///
/// \param className The name of class style for rendering the component.
///
+ (void)renderWindowWithWindow:(UIWindow * _Nonnull)window withClass:(NSString * _Nonnull)className;
/// Checks to see if a given style class contains any text transform property.
/// \param className The name of class style for transforming the text.
///
///
/// returns:
/// true if the given style class contains the text transform property; otherwise false.
+ (BOOL)needsTextTransformWithClassWithClassName:(NSString * _Nonnull)className SWIFT_WARN_UNUSED_RESULT;
/// Transform a given text based on a given style class
/// \param text The text to be transformed.
///
/// \param className The name of class style for transforming the text.
///
+ (NSString * _Nonnull)transformTextWithText:(NSString * _Nonnull)text withClass:(NSString * _Nonnull)className SWIFT_WARN_UNUSED_RESULT;
/// Render <code>UINavigationBar</code> with the style class set.
/// \param bar The <code>UINavigationBar</code> being rendered.
///
+ (void)sizeDidChangeForNavigationBarWithBar:(UINavigationBar * _Nonnull)bar;
/// Render <code>UITabBar</code> with the style class set.
/// \param bar The <code>UITabBar</code> being rendered.
///
+ (void)sizeDidChangeForTabBarWithBar:(UITabBar * _Nonnull)bar;
/// Render <code>UITableViewCell</code> with the style class set.
/// \param cell The <code>UITableViewCell</code> being rendered.
///
+ (void)sizeDidChangeForTableViewCellWithCell:(UITableViewCell * _Nonnull)cell;
/// Render <code>UITableView</code> with the style class set.
/// \param tableView The <code>UITableView</code> being rendered.
///
+ (void)sizeDidChangeForTableViewWithTableView:(UITableView * _Nonnull)tableView;
/// Add an orientation observer in <code>NotificationCenter</code>
/// \param observer The <code>AnyObject</code> to be added as an observer.
///
+ (void)addOrientationDidChangeObserverWithObserver:(id _Nonnull)observer;
/// Remove the given observer from <code>NotificationCenter</code>
/// \param observer The <code>AnyObject</code> to be removed.
///
+ (void)removeOrientationDidChangeObserverWithObserver:(id _Nonnull)observer;
/// Rerender the root view
+ (void)rerender;
/// Rerender the given <code>UIView</code>
/// \param view The <code>UIView</code> to be rerendered.
///
+ (void)rerenderViewWithView:(UIView * _Nonnull)view;
/// Add or remove orientaiton observer
/// \param rerender true to add the observer by calling <code>addOrientationDidChangeObserver</code>; otherwise, remove the observer by calling <code>removeOrientationDidChangeObserver</code>
///
+ (void)setRerenderOnOrientationChangeWithRerender:(BOOL)rerender;
/// Get the global <code>NUIRenderer</code> instance.
///
/// returns:
/// The <code>NUIRenderer</code> instance.
+ (NUIRenderer * _Nonnull)getInstance SWIFT_WARN_UNUSED_RESULT;
/// Rerender the view when the orientation did changed
/// \param notification The <code>NSNotification</code> object
///
+ (void)orientationDidChangeWithNotification:(NSNotification * _Nonnull)notification;
/// Rerender the view when stylesheet file changed
+ (void)stylesheetFileChanged;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// The style class settings class that provides a list of static functions for applying-style-related functionalities
SWIFT_CLASS("_TtC8SAPFiori11NUISettings")
@interface NUISettings : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end








/// <code>NibDesignableProtocol</code>-compliant implementation of <code>UITableViewCell</code>
/// <h2>See also</h2>
/// <code>NibDesignableProtocol</code>
IB_DESIGNABLE
SWIFT_CLASS("_TtC8SAPFiori26NibDesignableTableViewCell")
@interface NibDesignableTableViewCell : UITableViewCell
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
/// :nodoc:
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Workaround for the compile issue where empty initializer is not accessible in xcframework.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end











@interface UIBarButtonItem (SWIFT_EXTENSION(SAPFiori))
/// The style class property.  Setting this value applys the style.
@property (nonatomic, copy) NSString * _Nullable nuiClass;
/// :nodoc:
- (void)override_didMoveToWindow;
@end
































































































































































@interface UIView (SWIFT_EXTENSION(SAPFiori))
/// :nodoc:
@property (nonatomic, readonly, strong) UIView * _Nonnull nibContainerView;
/// :nodoc:
@property (nonatomic, readonly, copy) NSString * _Nonnull nibName;
/// :nodoc:
@property (nonatomic, readonly, strong) NSBundle * _Nonnull bundle;
/// :nodoc:
@property (nonatomic, readonly) Class _Nonnull nibLoadingClass;
@end


@interface UIView (SWIFT_EXTENSION(SAPFiori))
/// The style class property.  Setting this value applys the style.
@property (nonatomic, copy) NSString * _Nullable nuiClass;
@end









#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
