 /// Base class for any view placeholder that need dynamic position and/or size.
 /// Used UIViewController pattern for loading target view, therefore will be very simply use him.
 open class LayoutPlaceholder<Item: LayoutItem, Super: LayoutItem>: LayoutGuide<Super> {
+    private(set) lazy var itemLayout: LayoutBlock<Item> = self.item.layoutBlock(with: Layout.equal, constraints: [self.layoutConstraint(for: [LayoutAnchor.equal])])
     private weak var _item: Item?
     open weak var item: Item! {
         set { _item = newValue }

    /// - Returns: Added view
    @discardableResult
    func add<V: UIView>(_ type: V.Type) -> V? {
        guard let superItem = owningView else { return nil }

        let view = build(type)
        superItem.addSubview(view)

            itemDidLoad()
        }
    }

    open func layout() {
        if isItemLoaded {
            itemLayout.layout(in: frame)
        }
    }
}

/// Base class for any layer placeholder that need dynamic position and/or size.
/// Used UIViewController pattern for loading target view, therefore will be very simply use him.
open class LayerPlaceholder<Layer: CALayer>: LayoutPlaceholder<Layer, CALayer> {
    open override func loadItem() {
        item = add(Layer.self) // TODO: can be add to hierarchy on didSet `item`
    }
}

