 // MARK: - Public API
 extension UPActionButton {
     
-    /* Items management */
-    
-    open func add(item: UPActionButtonItem) {
-        add(item: item, computeSize: true)
-    }
-    
-    open func add(items: [UPActionButtonItem]) {
-        items.forEach({ self.add(item: $0, computeSize: false) })
-        computeOpenSize()
-    }
-    
-    open func remove(item: UPActionButtonItem) {
-        remove(item: item, computeSize: true)
-    }
-    
-    open func remove(itemAt index: Int) {
-        guard index >= 0 && index < items.count else { return }
-        
-        remove(item: items[index], computeSize: true)
-    }
-    
-    open func removeAllItems() {
-        items.forEach({ self.remove(item: $0, computeSize: false) })
-        computeOpenSize()
-    }
-    
-    
-    /* Interactions */
-    
-    open func toggle() {
-        if isOpen {
-            close()
-        } else {
-            open()
-        }
-    }
-    
-    open func open() {
-        guard !isOpen && !isAnimatingOpenClose else { return }
-        
-        delegate?.actionButtonWillOpen?(self)
-        
-        isAnimatingOpenClose = true
-        animatedItemTag = 0
-        
-        expandContainers()
-        expandOverlay()
-        expandItems()
-        transitionButtonTitle()
-    }
-    
-    open func close() {
-        guard isOpen && !isAnimatingOpenClose else { return }
-        
-        delegate?.actionButtonWillClose?(self)
-        
-        isAnimatingOpenClose = true
-        animatedItemTag = 0
-        
-        reduceOverlay()
-        reduceItems()
-        transitionButtonTitle()
+    /* Customization */
+    
+    open func setShadow(color: UIColor, opacity: Float, radius: CGFloat, offset: CGSize) {
+        button.layer.shadowColor = color.cgColor
+        button.layer.shadowOpacity = opacity
+        button.layer.shadowRadius = radius
+        button.layer.shadowOffset = offset
     }
     
     

                animation.animation?()
            }, completion: { (finished: Bool) in
                animation.completion?()
            })
        } else {
            backgroundView.frame = CGRect(origin: .zero, size: self.frame.size)

                    }) { (finished: Bool) in
                        animation.completion?()
                        if index == lastAnimatedItemIndex {
                            self.closeAnimationDidStop()
                        }
                    }
                } else {
                    item.center = center
                    item.alpha = 0.0
                    if self.overlayAnimationType == .none && index == lastAnimatedItemIndex {
                        self.closeAnimationDidStop()
                    }
                }
                
