/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import #import #import #import #import #import @protocol CKInspectableView; @class SKComponentLayoutWrapper; @class SKComponentMountedView; // RC::Variant does not support Objective-C types unless they are boxed: struct SKLeafViewChild { UIView* view; }; struct SKMountedViewChild { SKComponentMountedView* view; }; /** The children of a SKComponentLayoutWrapper may be: - A single leaf view, which may have UIView children of its own. - A single non-leaf view, if the component created a view; its children will be the component's child components. - An array of SKComponentLayoutWrappers, if the component did not create a view. */ using SKComponentLayoutWrapperChildren = CK::Variant< SKLeafViewChild, SKMountedViewChild, std::vector>; @interface SKComponentLayoutWrapper : NSObject @property(nonatomic, weak, readonly) CKComponent* component; @property(nonatomic, readonly) NSString* identifier; @property(nonatomic, readonly) CGSize size; @property(nonatomic, readonly) CGPoint position; @property(nonatomic, readonly) SKComponentLayoutWrapperChildren children; @property(nonatomic, weak, readonly) id rootNode; /** CK::none for components that are not the child of a CKFlexboxComponent. */ @property(nonatomic, readonly) CK::Optional flexboxChild; + (instancetype)newFromRoot:(id)root parentKey:(NSString*)parentKey; @end