Перейти до вмісту
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 ламає сітку місяця двічі на рік, у ночі переходу на літній і зимовий час.

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

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