-
Notifications
You must be signed in to change notification settings - Fork 47
Description
Background
codegen.config.ts maintains a skipComponents list of components excluded from all SDUI generated output because they require JS-tracked mutable state that cannot be expressed in a static AgNode. Issue #375 flagged several of these for future design work. This issue is the actionable follow-up: triage each skipped component, group by effort, and decide which ones are candidates for partial SDUI support.
Current skip list
| Component | Reason skipped |
|---|---|
Collapsible |
requires open/close boolean state |
Combobox |
complex filtering + multi-select state |
Flex |
multi-component family (FlexRow/FlexCol/FlexInline) — no single wrapper |
Menu |
complex open + selected-value state |
Pagination |
stateful current-page tracking |
ScrollProgress |
tracks live scroll position — purely behavioral |
ScrollToButton |
scroll-detection behavioral component |
Sidebar |
open + collapsed state management |
SidebarNav |
no Props interface, pure slot composition |
Slider |
continuous value requires two-way binding |
Toast |
autoDismiss + open/close lifecycle |
VisuallyHidden |
no Props interface, pure slot wrapper |
Proposed groupings
Group 1 — Achievable with an open prop (low effort)
Collapsible, Menu, Sidebar — the open/close state can be set from a static node prop, similar to how Dialog and Drawer are already supported. The open/close lifecycle fires as action aliases so the consumer can respond.
Group 2 — Requires payload-carrying on_change (medium effort)
Combobox, Slider — need two-way value binding or complex selection state. Depends on the on_change payload standardization tracked in #459.
Group 3 — Pagination — medium effort
Current page state needs to be expressible as a node prop, with on_change carrying the new page value.
Group 4 — Purely behavioral / no Props interface (skip indefinitely)
ScrollProgress, ScrollToButton, SidebarNav, VisuallyHidden — these either have no serializable props or track DOM/browser state that cannot be expressed in a JSON node. Not candidates for SDUI support.
Group 5 — Toast — design needed
autoDismiss + lifecycle complexity puts Toast in a category of its own. Needs a dedicated design discussion before any implementation.
Tasks
- Confirm Group 1 approach (open prop + action aliases) by prototyping Collapsible support — it is the simplest case and a good template
- File sub-issues for each Group 1 component (Collapsible, Menu, Sidebar) once approach is validated
- File sub-issue for Pagination once on_change payload shape is settled (design(sdui): adaptive questionnaire flows via server-side transition logic #459)
- File sub-issue for Combobox and Slider after design(sdui): adaptive questionnaire flows via server-side transition logic #459 on_change work lands
- Mark Group 4 components as permanently skipped with a comment in
codegen.config.ts - File a separate design issue for Toast
Related
#375— original stateful component support discussion#459— on_change payload standardization (prerequisite for Group 2/3)v2/sdui/schema/scripts/codegen.config.ts— skipComponents listSPECIFICATION.mdsection 4 — Stateful Component Policy