GoField — рядок, який може бути хибним
Один рядок угорі форми з п'яти полів, який каже «перевірте введене», не каже, яке саме поле. Саме через цю одну річ люди й кидають реєстрацію.
var name_field := GoField.make("Ім'я персонажа", GoStyle.line_edit("2-12"), "Змінити потім не можна")
name_field.set_error("Це ім'я вже зайняте") # сервер сказав ні
name_field.clear_error()
Підказка ховається, поки видно помилку, тож ряд не виростає на рядок і не штовхає все, що під ним, а текст помилки долучається до доступної назви контрола — сама лише червона рамка нічого не каже тому, хто не бачить червоного.
GoStyle.field() — статична версія: напис, контрол, підказка, без стану помилки. Беріть фабрику
там, де ніщо не може піти не так, і вузол — для всього, що сервер може відхилити.
GoInputGroup — поле вводу, приварене до своєї кнопки
GoInputGroup.make(GoStyle.line_edit("Повідомлення"), {"suffix": GoStyle.icon_button(&"send", send)})
GoInputGroup.make(GoStyle.line_edit("Ім'я"), {"prefix_icon": &"search"})
Він розв'язує кути. Дві заокруглені форми, що сходяться посередині, мають защемлений вигляд, а типовий проміжок змушує читати їх як два окремі об'єкти. Зовнішні кути лишаються круглими, дотичні стають прямими — у кожному стані кнопки, інакше група розпадається тієї ж миті, коли на неї натиснули. У скінів із фаскою полів кута немає взагалі, тож там він їх не чіпає, і прямі грані сходяться чисто.
GoCombobox — вибирач, який шукає
До десяти записів краще GoStyle.select(): на один дотик менше, і видно весь список.
Після тридцяти переглядати очима — вже робота.
var picker := GoCombobox.make(server_names, 0, "Виберіть сервер")
picker.picked.connect(func(i: int) -> void: connect_to(servers[i]))
GoCodeInput — купони та подарункові коди
Код куди частіше вставляють із повідомлення, ніж набирають. Дванадцять справжніх полів зламали б вставляння
на першій комірці й губили б символи через IME, тож текст приймає одне приховане поле, а комірки просто
малюються. ABCD-EFGH-IJKL дорогою втрачає свої дефіси.
var coupon := GoCodeInput.make(12, 4)
coupon.completed.connect(func(code: String) -> void: server.redeem(code))
coupon.set_error("Уже використано")
GoTable — заголовки для сортування, рядки для вибору
var board := GoTable.make(
[{"text": "Місце", "width": 56}, {"text": "Ім'я"}, {"text": "Очки", "numeric": true}], rows)
board.row_selected.connect(func(i: int) -> void: open_profile(rows[i]))
numeric: true, інакше рейтинг перевернеться. При порівнянні як тексту "9124"
перемагає "91240" — а в очок, золота й шкоди кількість цифр щоразу різна.
row_selected дає індекс у вашому початковому масиві, а не позицію після сортування. Напрямок
сортування показано гліфом, а не самим лише кольором, і натискаються цілі рядки, тож нікому не треба влучати
в одну комірку. GoStyle.table() лишається сіткою тільки для читання.
GoPagination — сторінки або рядок «Ще»
var pager := GoPagination.make(1, 12, func(page: int) -> void: load_mail(page))
var more := GoPagination.more(load_next) # варіант, зручний для мобільних
Номери — це інтерфейс для миші; на телефоні рядок «Ще» читається краще. Поточна сторінка лишається посередині вікна, тож натискання «далі» не перетасовує всіх номерів. Загальна кількість 0 означає «невідомо», і малюються лише стрілки — він не вигадує кількості сторінок, якої йому не дали.