Skip to content

feat(sdui): design path for skipped components in codegen #460

@roblevintennis

Description

@roblevintennis

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

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 list
  • SPECIFICATION.md section 4 — Stateful Component Policy

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions