Перейти до вмісту
tatetUI

Roadmap компонентів

Реалізовані пріоритети UI-компонентів і критерії наступного циклу розвитку бібліотеки.

Три цикли завершено — усі кандидати реалізовані, мають живі приклади, API-сторінки та accessibility-контракти. Початкові пріоритети були звірені з каталогами Radix Primitives, shadcn/ui та Headless UI.

P0 — основа форм і оверлеїв

КомпонентДля чогоОснова композиціїСкладність a11yСтатус
UiCheckboxНезалежні булеві параметри та множинний вибірForm groups, Table settingsmixed state, label/error зв'язокstable
UiRadioGroupОдин вибір із 2–7 видимих варіантівНалаштування, опитуванняroving tabindex, Arrow/Home/Endstable
UiPopoverДовільна немодальна панель біля triggerHoverCard, складені фільтриfocus return, outside click, positioningstable

P1 — продуктові й адміністративні сценарії

КомпонентДля чогоОснова композиціїСкладність a11yСтатус
UiContextMenuДії над рядком, вузлом або полотномMenu + positioningклавіша Context Menu, координати pointerstable
UiInputOtpКоди підтвердження та 2FAInput semanticspaste, mobile keyboard, єдине accessible valuestable
UiNavigationMenuІєрархічна продуктова навігаціяPopover + linksmenubar/navigation semantics, focusstable
UiSidebarАдаптивна навігація застосункуDrawer + navigationcollapse state, landmarks, mobile focusstable

P2 — спеціалізовані складені контролі

КомпонентДля чогоОснова композиціїСкладність a11yСтатус
UiScrollAreaУзгоджений scroll affordanceDropdown, Sidebar, panelsне ламати нативну прокруткуstable
UiResizablePanelsРобочі області редакторів і dashboardPointer utilitiesseparator role, клавіатурний resizestable
UiCarouselПослідовність промо або медіаButtons + reduced motionоголошення slide, autoplay controlsstable
UiHoverCardНеобов'язковий preview за посиланнямPopoverhover/focus parity, dismissstable

Цикл 2 — CRM і адміністративні панелі

Другий цикл закриває те, чого бракувало для побудови CRM: дашборд, картка запису, стрічка активності й фільтр за періодом.

КомпонентДля чогоОснова композиціїСкладність a11yСтатус
UiStatCardКлючова метрика зі зміною за періодCard + Skeletonстрілка як символ, скорочене значенняstable
UiAvatarGroupУчасники запису в один рядокAvatarприховані учасники лишаються названимиstable
UiDescriptionListПари «назва — значення» в картці—справжні dl/dt/ddstable
UiSeparatorМежа між секціями—декоративний проти смисловогоstable
UiTimelineІсторія запису—<time datetime>, детермінований поясstable
UiTagInputМітки з вільним вводомCombobox + Chipсписок міток проти listbox, live-regionstable
UiNumberInputКількість, ціна, відсотокField stylesrole="spinbutton", aria-valuetextstable
UiSplitButtonГоловна дія плюс альтернативиButton + Menurole="group", ArrowDown на головнійstable
UiCalendarСітка місяця, діапазониRoving tabindexrole="grid", повна дата в назві дняstable
UiDateRangePickerПеріод над таблицею чи звітомCalendar + anchored panelодин tabindex="0" на два місяціstable
UiTable — вибір рядківМасові дії над записамиTable + Checkboxім'я прапорця з назви рядкаstable

Дати рахуються без бібліотеки дат: уся арифметика — в app/utils/calendar.ts, і кожна нова дата будується конструктором new Date(рік, місяць, день), а не додаванням мілісекунд. Це не стиль: + 86 400 000 ламає сітку місяця двічі на рік, у ночі переходу на літній і зимовий час.

Цикл 3 — те, що продукти пишуть заново

Третій цикл зібрано не з каталогів інших бібліотек, а з кодових баз продуктів: CRM, CMS, маркетплейсу, чату й дашбордів. Кожен компонент нижче знайшовся щонайменше у двох із них, написаний окремо й по-різному — спінер Loading.vue, ProgressRing, AdminDirtyBar, PageHeader, KpiCard зі спарклайном, ImageLightbox, дзвіночок із лічильником, групи кнопок у панелях інструментів.

КомпонентДля чогоОснова композиціїСкладність a11yСтатус
UiFormFieldЛейбл, опис і помилка для будь-якого контролаField styleslegend першою дитиною, один описstable
UiRatingОцінка у відгуку, середня оцінка в картціNative radioстрілки без зациклення, зняття оцінкиstable
UiActionBarМасові дії, незбережені зміниButtonпостійний live-регіон, sticky проти fixedstable
UiButtonGroupЗчеплені кнопки панелі інструментівButtongroup з назвою, не toolbarstable
UiPageHeaderШапка сторінки чи розділуBreadcrumb + Tabsрівень заголовка окремо від кегляstable
UiSparklineТренд у плитці метрики чи рядкуStatCardодин role="img" з підсумкомstable
UiLightboxФото, відео й сторінки на весь екран — рівня FancyboxOverlay stack + Carousel gestures + Fullscreen APIпастка фокуса, оголошення кадру, фокус на мініатюру після закриттяstable
UiSpinnerОчікування без відомої тривалості—статус лише з назвоюstable
UiProgressRingПрогрес у щільному місціProgressневизначений стан без aria-valuenowstable
UiIndicatorЛічильник чи крапка на іконціAvatar, Buttonчисло в назві кнопки, не в значкуstable

Разом із циклом у tokens.css з'явилась роль --rating: зірка оцінки — не попередження, і бренд має змогу перефарбувати її окремо від статусів.

Як наступний компонент переходить у роботу

Кандидат піднімається у пріоритеті, якщо повторюється щонайменше у двох продуктах, має нетривіальний keyboard/ARIA-контракт або стає основою для кількох наступних компонентів. Реалізація має лишатися copy-first і не додавати runtime-залежність без окремого задокументованого винятку.