         return display
     }
     
-    open func addComponentOperations            (height:CGFloat = 32, side:CGFloat = 36, operations:[Operation]) -> ComponentOperations {
-        
-        let display = ComponentOperations(height:height, side:side, operations:operations)
+    open func addComponentOperations            (side:CGFloat = 36, operations:[Operation], labels:[Operation:NSAttributedString]? = nil) -> ComponentOperations {
+        
+        let display = ComponentOperations(operations:operations)
+        
+        display.build(side:side, marginAboveTitle:configuration.operations.marginAboveTitle, labels:labels)
+        
+        var margin = configuration.operations.marginOnTop
+        
+        if labels != nil {
+            margin = configuration.operations.marginOnTopWithTitle + configuration.operations.marginAboveTitle
+            
+            for operation in operations {
+                let data = display.data[operation]
+                data?.label.insets = configuration.title.insets
+            }
+        }
         
         self.addSubview(display)
         
         display.translatesAutoresizingMaskIntoConstraints=false
-        display.heightAnchor.constraint(equalToConstant: side).isActive=true
+        display.heightAnchor.constraint(equalToConstant: side + margin).isActive=true
         display.widthAnchor.constraint(equalTo: self.widthAnchor).isActive=true
         display.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive=true
         

            let colorFill       = UIColor(white:0.3)
            let colorStroke     = UIColor(white:1,alpha:0.5)
            
            button.frame = CGRect(side:side)
            
            button.circle(for: .normal).fillColor       = colorFill.cgColor
            button.circle(for: .normal).strokeColor     = colorStroke.cgColor

    
    open class ComponentOperations : UIStackView {
        
        open var insets : UIEdgeInsets = UIEdgeInsets() {
            didSet {
                super.invalidateIntrinsicContentSize()
            }
        }
        
        open override var intrinsicContentSize: CGSize {
            var size = super.intrinsicContentSize
            size.width += insets.left + insets.right
            size.height += insets.top + insets.bottom
            return size
        }
        
        override open func draw(_ rect: CGRect) {
            return super.draw(UIEdgeInsetsInsetRect(rect, insets))
        }

        
        public let operations               : [Operation]
        
        public struct OperationData {
            public var button               : UIButtonWithCenteredCircle = UIButtonWithCenteredCircle()
            public var label                : UILabelWithInsets = UILabelWithInsets()
            public var function             : ()->() = { _ in }
        }
        
        public var data                     : [Operation:OperationData] = [:]

        public var durationOfTap            : Double        = 0.3
        public var durationOfLabelDisplay   : Double        = 1.0
