   // MARK: Fill
 
   open func color(_ color: UIColor) -> Self {
-    self.color = color
+    self.colors = [color]
+    return self
+  }
+
+  open func color(
+    gradient: [UIColor],
+    locations: [CGFloat] = defaultGradientLocations,
+    from startPoint: CGPoint = defaultGradientFrom,
+    to endPoint: CGPoint = defaultGradientTo
+  ) -> Self {
+    self.colors = gradient
+    self.colorLocations = locations
+    self.colorStartPoint = startPoint
+    self.colorEndPoint = endPoint
     return self
   }
 

    )

    let image = UIImage.with(size: imageSize) { context in
      self.color.setFill()
      self.borderColor.setStroke()

      let path: UIBezierPath

      if self.cornerRadiusTopLeft == self.cornerRadiusTopRight &&

      } else {
        path = UIBezierPath(rect: rect)
      }
      context.addPath(path.cgPath)

      if self.colors.count <= 1 {
        self.colors.first?.setFill()
        path.fill()
      } else {
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let colors = self.colors.map { $0.cgColor } as CFArray
        let gradient = CGGradient(colorsSpace: colorSpace, colors: colors, locations: self.colorLocations)!
        let startPoint = CGPoint(
          x: self.colorStartPoint.x * imageSize.width,
          y: self.colorStartPoint.y * imageSize.height
        )
        let endPoint = CGPoint(
          x: self.colorEndPoint.x * imageSize.width,
          y: self.colorEndPoint.y * imageSize.height
        )
        context.clip()
        context.drawLinearGradient(gradient, start: startPoint, end: endPoint, options: [])
      }

      self.borderColor.setStroke()
      path.lineWidth = self.borderWidth
      path.stroke()
    }

