  A `KeyboardGrid` can be used to list actions in a grid with
  a certain number of `columns`.
  
- The grid supports a custom grid `padding` and item `spacing`
- and will even out the provided `actions` array with actions
- so that the array has enough tems to evenly fit the grid.
- 
- The provided `buttonBuilder` will be called for each action
- and will be used to provide the grid with any view for each
- action. This makes the grid very customizable.
+ The grid supports a custom item `spacing` and will fill the
+ provided `actions` array with enough `.none` actions, so it
+ has enough items to evenly fit the grid. The `buttonBuilder`
+ will be used to create a button for each action.
  */
 @available(iOS 13.0, *)
 public struct KeyboardGrid<Button: View>: View {

    public init(
        actions: [KeyboardAction],
        columns: Int,
        padding: CGFloat = 10,
        spacing: CGFloat = 10,
        @ViewBuilder buttonBuilder: @escaping (KeyboardAction) -> Button) {
        self.actions = actions.evened(for: columns)
        self.rows = actions.batched(withBatchSize: columns)
        self.padding = padding
        self.spacing = spacing
        self.buttonBuilder = buttonBuilder
    }
    
    public let actions: [KeyboardAction]
    public let rows: KeyboardActionRows
    public let padding: CGFloat
    public let spacing: CGFloat
    public let buttonBuilder: (KeyboardAction) -> Button
    

            ForEach(Array(rows.enumerated()), id: \.offset) {
                self.gridRow(for: $0.element)
            }
        }
    }
}

