func (ta *TextArea) Init() {
	ta.once.Do(func() {
		lm := &linesModel{lines: []string{}, width: 0}
		ta.model = lm
		ta.CellView.Init()
		ta.CellView.SetModel(lm)
	})
}
Init initializes the TextArea.
package views
import (
	"strings"
	"sync"
	"github.com/gdamore/tcell"
)
type TextArea struct {
	model *linesModel
	once  sync.Once
	CellView
}
type linesModel struct {
	lines  []string
	width  int
	height int
	x      int
	y      int
	hide   bool
	cursor bool
	style  tcell.Style
}
func (m *linesModel) GetCell(x, y int) (rune, tcell.Style, []rune, int) {
	var ch rune
	if x < 0 || y < 0 || y >= len(m.lines) || x >= len(m.lines[y]) {
		return ch, m.style, nil, 1
	}
	return rune(m.lines[y][x]), m.style, nil, 1
}
func (m *linesModel) GetBounds() (int, int) {
	return m.width, m.height
}
func (m *linesModel) limitCursor() {
	if m.x < 0 {
		m.x = 0
	}
	if m.y < 0 {
		m.y = 0
	}
	if m.x > m.width-1 {
		m.x = m.width - 1
	}
	if m.y > m.height-1 {
		m.y = m.height - 1
	}
}
func (m *linesModel) SetCursor(x, y int) {
	m.x = x
	m.y = y
	m.limitCursor()
}
func (m *linesModel) MoveCursor(x, y int) {
	m.x += x
	m.y += y
	m.limitCursor()
}
func (m *linesModel) GetCursor() (int, int, bool, bool) {
	return m.x, m.y, m.cursor, !m.hide
}
func (ta *TextArea) SetLines(lines []string) {
	ta.Init()
	m := ta.model
	m.width = 0
	m.height = len(lines)
	m.lines = append([]string{}, lines...)
	for _, l := range lines {
		if len(l) > m.width {
			m.width = len(l)
		}
	}
	ta.CellView.SetModel(m)
}
func (ta *TextArea) SetStyle(style tcell.Style) {
	ta.model.style = style
	ta.CellView.SetStyle(style)
}
func (ta *TextArea) EnableCursor(on bool) {
	ta.Init()
	ta.model.cursor = on
}
func (ta *TextArea) HideCursor(on bool) {
	ta.Init()
	ta.model.hide = on
}
func (ta *TextArea) SetContent(text string) {
	ta.Init()
	lines := strings.Split(strings.Trim(text, "\n"), "\n")
	ta.SetLines(lines)
}