GH GambleHub

Бібліотека компонентів Gamble Hub UI

1) Цілі та принципи

Навіщо: прискорити поставку фіч, забезпечити консистентний UX і спростити підтримку.

Принципи:
  • Семантика і нейтральність. Компонент вирішує UI-задачу, не воюючи бізнес-логіку.
  • A11y-by-default. Ролі, фокус-кільця, aria-атрибути і контраст - вшиті в компоненти.
  • i18n-first. Довжини рядків, числові формати, RTL - враховуємо з коробки.
  • Темізація. Світла/темна теми і брендові акценти через токени.
  • Масштабованість. Єдині API, стабільність мінорних релізів, міграції при major.

2) Підстави: дизайн-токени (foundation)

Приклад структури (JSON/YAML-джерело → build в CSS variables/Android/iOS):
json
{
"color": {
"text": { "default": "{palette. neutral. 900}", "muted": "{palette. neutral. 600}", "inverse": "{palette. neutral. 0}" },
"surface": { "default": "{palette. neutral. 0}", "elevated": "{palette. neutral. 50}", "brand": "{palette. brand. 50}" },
"accent": { "primary": "{palette. brand. 600}", "success": "{palette. green. 600}", "warning": "{palette. amber. 600}", "error": "{palette. red. 600}" }
},
"space": { "xs": 4, "sm": 8, "md": 12, "lg": 16, "xl": 24 },
"radius": { "sm": 8, "md": 12, "lg": 16, "full": 999 },
"elevation": { "0": "none", "1": "0 1px 2px rgba(0,0,0,.08)", "2": "0 4px 12px rgba(0,0,0,.12)" },
"motion": { "fast": "120ms", "base": "200ms" },
"opacity": { "disabled": 0. 45, "muted": 0. 7 }
}

Правила: семантичні токени (наприклад,'color. accent. success') використовуються компонентами; палітра - внутрішня.

3) Категорії компонентів

1. Базові (Primitives): Button, Icon, Typography, Link, Badge, Divider, Avatar.
2. Форми: Input, PasswordInput, NumberInput, Select, Combobox, DatePicker, Checkbox, Radio, Switch, Slider, Textarea, FileUpload.
3. Навігація: AppBar, Tabs, Breadcrumbs, Pagination, Drawer/Sidebar, Stepper.
4. Фідбек: Alert, InlineError, Tooltip, Toast, Snackbar, Modal, Popover, Skeleton, Progress, StatusDot.
5. Дані та таблиці: Table, DataList, Card, Accordion, Tag, EmptyState.

6. iGaming-специфіка:
  • GameTile (картка гри)
  • ProviderBadge
  • JackpotTicker
  • LiveBadge (live-стіл/шоу)
  • LobbyFilters (провайдер/жанр/ліміт)
  • BonusBanner / BonusCard
  • MissionProgress / AchievementBadge
  • TournamentLeaderboard
  • WalletCard / BalanceWidget
  • PaymentMethodCard
  • DepositForm / WithdrawalForm
  • KYCStatusBadge / KYCChecklist
  • ResponsibleGamingBanner / LimitsControl
  • AgeGate / SessionTimer / RiskAlert
  • SystemStatus / MaintenanceBanner

4) Сторінка компонента: обов'язковий зміст

Призначення і коли використовувати/не використовувати.
Склад і варіанти. Розміри, стани, модифікатори.
API. Пропси, події, слоти, контрольовані/неконтрольовані режими.
A11y. Ролі, фокус, aria-зв'язки, лайв-регіони.
i18n. Довжини, формати, локалізовані підписи.
Microcopy. Рекомендовані тексти (CTA, підказки, помилки).
Приклади коду. Типові кейси, edge-кейси (помилки, завантаження, порожньо).
Тести. Матриця візуальних/юніт/interaction/A11y.
Анти-приклади. Часті помилки використання.

5) Ключові компоненти: швидкі специфікації

5. 1 Button

Варіанти: 'primary | secondary | ghost | destructive'Розміри: `sm | md | lg`

Стани: normal, hover, focus-visible, active, loading, disabled

A11y: видимий focus-ring,'aria-busy'при'loading','aria-pressed'для toggle

Microcopy: дія + об'єкт («Зберегти зміни», «Пройти верифікацію»)

Анти-приклад: «ОК»

5. 2 Input / Field

Склад: label, field, helper, error, prefix/suffix

A11y: `aria-invalid`, `aria-describedby`, связка `for/id`

Патерн помилок: що не так + як виправити («Введіть номер у форматі + 380»...)

Слоти: 'prefix'( іконка),'suffix'( кнопка «показати пароль»)

5. 3 Select / Combobox

Особливості: пошук за списком, клавіатура, віртуалізація довгих списків

A11y: `role="combobox"`, `aria-expanded`, `aria-activedescendant`

Порожні результати: "Нічого не знайдено. Змініть запит"

5. 4 Modal / Drawer

Правила: trap focus, закриття по ESC/overlay, повернення фокусу ініціатору

Використання: підтвердження платежів, правила бонусу, KYC-кроки

5. 5 Toast / Snackbar

Час: 2-4 с, без блокування потоку

Лайв-регіони: 'aria-live = «polite»'для успіхів,'« assertive »'для помилок

Приклади: "Платіж прийнято. Баланс оновлено"

5. 6 EmptyState

Шаблон: контекст + цінність + CTA + вторинний CTA

Приклад: "Тут з'являться обрані ігри, коли ви додасте першу. [Додати в обране"

6) iGaming-компоненти: специфіка та API

6. 1 GameTile

Призначення: картка гри в лобі/каталозі.
Склад: обкладинка, провайдер, мітки (New/Hot/Jackpot/Live), RTP (опц.) , швидкі дії.

API (приклад):
ts
<GameTile title="Lightning Roulette"
provider="Evolution"
tags={["Live","Popular"]}
isJackpot={true}
onPlay={...}
onFavToggle={...}
/>

Стани: hover (швидкий старт), skeleton, недоступно (регіон/час).
A11y: alt-текст, клавіатурний старт,'aria-label = «Грати в Lightning Roulette»'.

6. 2 LobbyFilters

Призначення: фільтри лобі (жанр, провайдер, ліміти, волатильність).
Фічі: збережені пресети, скидання фільтрів, лічильник результатів.
Microcopy: "Фільтри", "Скинути фільтри", "Знайдено: 128».

6. 3 BonusBanner / BonusCard

Варіанти: вітальний, релоад, кешбек, фріспіни, турнір.
Поля: заголовок, умови, термін дії, CTA («Активувати бонус»).
A11y: посилання на умови читаються,'aria-describedby'→ деталі умов.
Анти-патерн: приховувати ключові обмеження.

6. 4 JackpotTicker

Призначення: біжуча сума джекпоту з автооновленням.
API: джерело даних, період оновлення, формат валюти.
A11y: 'role = «status»', не порушувати читаність скрінрідером.

6. 5 TournamentLeaderboard

Склад: таблиця позицій, окуляри, призи, таймер, власна позиція.
Фічі: пагінація/віртуалізація, закріплення свого рядка.
A11y: 'th '/' scope', колонки, що читаються, навігація стрілками.

6. 6 WalletCard / BalanceWidget

Поля: баланс, заблоковані кошти, бонусний баланс, валюта.
Дії: «Поповнити», «Вивести», «Історія».
Безпека: приховати/показати суму, маскування в загальних зонах.

6. 7 PaymentMethodCard

Поля: логотип провайдера, ліміти, комісії, ETA, регіональна доступність.
Стани: недоступно (регіон/статус), в обробці, попередження лімітів.
Microcopy: «Комісія 1,5% утримується провайдером», «Виплата - до 15 хвилин».

6. 8 DepositForm / WithdrawalForm

Патерни: inline-валідація, сумові ліміти, same-method rule підказками.
A11y: оголошення помилок («assertive»), переклад фокусу до першої помилки.
Службові поля: «Джерело коштів», «Призначення», якщо потрібно AML.

6. 9 KYCStatusBadge / KYCChecklist

Стани: `none | basic | extended | rejected | pending`.
Тексти: «Це займе ~ 2 хвилини», «Фото без відблисків, видно кути і текст».
CTA: «Пройти верифікацію», вторинний: "Чому це важливо? ».

6. 10 LimitsControl / ResponsibleGamingBanner

Призначення: ліміти депозитів/ставок/часу, перерви, самовиключення.
А11у/Тон: нейтрально, без тиску, з посиланням на довідку.

7) Патерни компонування (Recipes)

Реєстрація/КУС: Stepper + Form + InlineError + PageAlert + SuccessToast.
Депозит: PaymentMethodCard + AmountInput + LimitsHint + ConfirmModal + StatusToast.
Лобі: SearchBar + LobbyFilters + GameGrid (из GameTile) + Pagination + EmptyState.
Турнір: TournamentLeaderboard + MissionProgress + BonusBanner.
Відповідальна гра: ResponsibleGamingBanner + LimitsControl + FAQ-link.

8) Accessibility (A11y)

Видимий фокус завжди (в т.ч. в темній темі).
Навігація клавіатурою по всіх інтерактивних елементах.
'aria-live = «polite/assertive»'для тостів/статусів.
Контрасти не нижче WCAG 2. 1 AA.
Текст в іконках - не єдиний носій сенсу.
RTL-режими, перевірка на 320 px і читабельність вголос.

9) Локалізація та формати

Всі призначені для користувача рядки - через i18n-ключі.

Приклад ключів:

ui. button. save = Save wallet. deposit. success = Payment accepted. Balance updated.
kyc. photo. hint = Photo without glare, corners and text are visible.
filters. reset = Reset filters

Форматування дат/валют - утилітами, не рядками.
Тон на мовах - через tone-map (нейтральний/підтримуючий/офіційний).

10) Перформанс і якість

Віртуалізація списків (ігри, таблиці).
Лінива завантаження ілюстрацій, код-сплітинг по сторінках.
Розміри бандла: бюджет на пакет UI, без важких залежностей.
Skeleton для сприйняття швидкості, спінери - мінімально.
Тести: юніт, візуальні снапшоти, interaction, A11y, E2E для критичних флоу.

11) Версіонування та релізи

SemVer: patch - баги; minor - неруйнівні; major - з міграціями.
Release Notes: токени/API/поведінка, скріншоти до/після.
Deprecations: позначки в доці, код-моди і лінтер-правила.
Storybook/Playground: живі приклади, accessibility-панель, RTL toggle.

12) Contributing (внесок)

RFC на новий компонент: проблема → варіанти → вибране рішення → A11y → i18n → API → ризики.
PR-чек-лист: дока, сторіс, тести, візуальні снапшоти, контрасти, i18n, dark/RTL.
Definition of Done: компонент + документація + тести + приклади патернів.

13) MVP-набір і дорожня карта

MVP (перша поставка):
  • Button, Input, Select, Checkbox, Radio, Switch, Modal, Toast, Tooltip, Progress, Skeleton, Card, EmptyState, Tabs, Pagination, Breadcrumbs, Table, GameTile, LobbyFilters, BonusBanner, WalletCard, PaymentMethodCard, DepositForm, KYCStatusBadge.

Далі: TournamentLeaderboard, JackpotTicker, MissionProgress, LimitsControl, SystemStatus, Drawer/Sidebar, DatePicker, Combobox, FileUpload.

14) Приклади microcopy (готові вставки)

CTA: «Зберегти зміни», «Пройти верифікацію», «Додати спосіб оплати».

Помилки: "Неправильний формат дати. Використовуйте ДД. ММ. ГГГГ. ", "Файл занадто великий (макс. 10 МБ)"

Успіх: "Платіж прийнято. Баланс оновлено. «, «Готово! Документи перевірено"

Порожні стани: "По "{query}" нічого не знайшлося. Скиньте фільтри або уточніть запит"

15) Анти-патерни

Бізнес-логіка всередині UI-компонентів (ламає перевикористовуваність).
Невидимий фокус або залежність сенсу тільки від кольору.
Рядки, зашиті в код компонентів (без i18n).
Порушення семантики (кнопка на'div', списки без'ul/ol/li').
Варіанти без чітких правил (розмноження'ButtonPrimaryBlueBig2').

16) Чек-листи

Компонент перед релізом:
  • Описані призначення, варіанти, API.
  • A11y: роль, фокус, aria-атрибути, контраст.
  • i18n: всі рядки винесені, перевірені довгі мови і RTL.
  • Сторіс/демо: звичайні, завантаження, помилки, порожньо.
  • Тести: юніт + візуальні + interaction + A11y.
  • Немає бізнес-логіки, тільки UI/поведінка.
Патерн (композиція):
  • Є схема з компонентів і порядок фокусу.
  • Визначені microcopy і тексти помилок/успіхів.
  • Заміряні ключові метрики (конверсія кроку, error rate, time-to-complete).

17) Скелет документа для компонента (шаблон)

Назва та призначення

Коли використовувати/не використовувати

Варіанти та стани

API (пропси, події, слоти)

Accessibility (роль, клавіатура, aria, контраст)

i18n (ключі, формати, довжини, RTL)

Microcopy (приклади)

Приклади коду (типові та edge)

Тест-матриця

Анти-приклади

Підсумок

Gamble Hub UI - це не просто набір блоків, а дисципліна: токени → компоненти → патерни → документація → метрики. Слідуючи цьому гайду, команди швидше доставляють фічі, користувачі отримують передбачуваний і доступний інтерфейс, а продукт масштабується без візуального боргу. Якщо потрібно, зберу перші сторінки доки по MVP-набору з прикладами і ключами i18n.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.