AgentsIcon
AlertTriangleIcon
ArrowDownIcon
ArrowLeftIcon
ArrowUpIcon
BADGES_NOTE
Badge
Related: BadgeProps
BadgeProps
Button
Related: LinkButtonProps
ButtonProps
Button: button attributes, no anchor ones.
This stays an INTERFACE extending ButtonHTMLAttributes<HTMLButtonElement>
because it is published plugin API: a plugin may write
interface MyButton extends ButtonProps {} (a union cannot be extended —
TS2312) and may hand a ButtonProps value to a slot typed as plain
ButtonHTMLAttributes<HTMLButtonElement> (a union including anchor attributes
is not assignable — TS2322). The link form is the ADDITIVE LinkButtonProps,
and Button accepts either.
It declares NO href member. href?: undefined here would make
interface MyButton extends ButtonProps { href: string } a TS2430
(“incorrectly extends”), which is a narrowing of a surface that is additive
only. The discriminant Button narrows on lives on ButtonActionProps.
Properties
Related: ButtonVariant
ButtonVariant
Card
Related: CardProps
CardProps
CheckCircleIcon
CheckIcon
Checkbox
Related: CheckboxProps
CheckboxProps
ChevronDownIcon
ChevronRightIcon
CloseIcon
CodeBlock
Related: CodeBlockProps
CodeBlockProps
CompletionInput
Related: CompletionInputProps
CompletionInputProps
ConfirmDialog
Related: ConfirmDialogProps
ConfirmDialogProps
ConnectorsIcon
ConversationsIcon
CopyField
Related: CopyFieldProps
CopyFieldProps
CopyIcon
DEFAULT_DATE_RANGE_PRESETS
DashboardIcon
DatabaseIcon
DateRangePicker
datetime-local inputs and
an Apply action, with the active window echoed as text below.
Controlled: the caller owns value and receives the next window through
onValueChange — a preset click emits its token immediately, while the custom
inputs hold a working draft until Apply commits the normalized absolute range.
The drafts track the controlled value, re-seeded on a NEW absolute value (keyed
on from/to), so edits against an unchanged value are preserved but a genuinely
different value replaces an in-progress draft.
Props
Related: DateRangePickerProps
DateRangePickerProps
Related: DateRangePreset, DateRangeValue
DateRangePreset
\d+[hdw] token the backend resolves, plus its chip label.
Properties
DateRangeValue
Dialog
Related: DialogProps
DialogProps
DirtyGuardBoundary
useRegisterDirty; while any is dirty a route
navigation (a route-token/plugin navigate, an AppLink, or a browser
back/forward) confirms through the shared discard dialog, and a full-page unload
raises the native prompt. Use this directly to guard a dirty editor that is a plain
page section (no tabs); GuardedTabs wraps this same boundary to additionally
guard tab switches.
Parameters
Drawer
Related: DrawerProps
DrawerProps
EditIcon
EmptyState
Related: EmptyStateProps
EmptyStateProps
EntityCardGrid
Related: EntityCardGridProps
EntityCardGridProps
ErrorBoundary
ErrorBoundaryProps
ErrorState
Related: ErrorStateProps
ErrorStateProps
ExplorerColumn
renderRow must emit exactly this many
<TD>s per item; folder rows span all of them.
Properties
ExplorerEmptyState
ExplorerEmptyStates
Related: ExplorerEmptyState
ExplorerSearch
matches owns the item shape and casing; it is
called only with a non-empty, already-trimmed query.
Properties
ExplorerTags
ExplorerView
Related: ExplorerViewProps
ExplorerViewProps
Related: ExplorerColumn, ExplorerEmptyStates, ExplorerSearch, ExplorerTags, Folder
ExtensionComboBuilder
Related: ExtensionComboBuilderProps
ExtensionComboBuilderProps
ExtensionFamily
ExtensionKindGroup
kind and every catalog entry of that kind.
Properties
ExtensionPicker
Related: ExtensionPickerProps
ExtensionPickerProps
ExtensionsIcon
ExternalLinkButton
Related: ExternalLinkButtonProps
ExternalLinkButtonProps
ExternalLinkIcon
EyeIcon
EyeOffIcon
Field
Related: FieldProps
FieldControlProps
FieldProps
FilterIcon
FleetReport
Related: FleetReportProps
FleetReportProps
null for a converged/absent
report (nothing to warn about) so callers can always mount it unconditionally
beside their own success line.
Properties
Folder
parentId, null = root).
Properties
FolderBreadcrumb
Related: FolderBreadcrumbProps
FolderBreadcrumbProps
Related: Folder
FolderIcon
FolderPicker
Related: FolderPickerProps
FolderPickerProps
Related: Folder
FolderRow
Related: FolderRowProps
FolderRowProps
Related: Folder
FormDialog
Related: FormDialogProps
FormDialogProps
GridIcon
GuardedTabs
Tabs that guards a switch away from a dirty
editor. Wraps the tabs in a DirtyGuardBoundary, so an editor rendered in
any panel can arm the guard through useRegisterDirty.
Parameters
Related: TabItem
HeadingLevel
# through ######.
HooksIcon
IconComponent
IconProps
style, events and ARIA pass
through. className is APPENDED to the tai-icon sizing class rather than
replacing it — the same merge every other design-system primitive does.
InteractionsIcon
JsonDiff
Related: JsonDiffProps
JsonDiffProps
JsonDiffRow
JsonTree
Related: JsonTreeProps
JsonTreeProps
LinkButtonProps
Button: an href, so it carries anchor attributes and no
button ones.
target and rel are inherited from AnchorHTMLAttributes and are settable,
but on the EXTERNAL branch they are not the caller’s to choose: an absolute
http(s) URL always renders target="_blank" with
rel="noopener noreferrer external", whatever the caller passed. On the
in-app branch target is the caller’s and rel is pinned only when they ask
for _blank.
It declares NO ref, and that is a REFUSAL rather than an omission: a blocked
href renders a NeutralizedLink span and no anchor at all, so a
Ref<HTMLAnchorElement> would be filled on two of the three renderings and
left null on the third — a ref that silently does nothing for exactly the
input the check exists to catch. A caller that needs the element wraps the
button.
Properties
Related: ButtonVariant
ManifestIcon
Markdown
Related: MarkdownProps
MarkdownBlock
text is resolved at render time.
Related: HeadingLevel
MarkdownProps
MarketplaceIcon
MenuIcon
MinusIcon
MonitorIcon
MoonIcon
NAV_ICONS
login is excluded: it is
not a destination the navigation surfaces list. Keyed by the token type, so
adding a route to RouteToken fails the build here until it gets a mark.
Related: IconComponent, RouteToken
NON_STACKABLE_KIND
backend extension may
appear in a combo (the backend kind is declared non-stackable, multiple=False).
The ExtensionPicker enforces single-select for this kind.
NotificationsIcon
NumberInput
Related: NumberInputProps
NumberInputProps
NumericColumnProps
OpenTargetOptions
OpenTargetProps
openTargetProps yields — spread onto the entry
element (<TR>, card <div>). Every field is optional so the disabled case
is the empty object.
Properties
OverflowRegionAttributes
OverlayDetails
OverlayDetailsFields
Related: OverlayDetailsFieldsProps
OverlayDetailsFieldsProps
Related: OverlayDetails
Page
Related: PageLayoutProps
PageFillProvider
useFillViewport) and the active
flag (for usePageFillActive). Renders no DOM of its own.
Parameters
PageHeader
Related: PageHeaderProps
PageHeaderProps
PageLayoutProps
PendingIcon
PluginIcon
PlusIcon
PresetsIcon
ProgressBar
total, value/total fills the track
and the percentage is announced via aria-valuenow; without one, the bar is
indeterminate (no aria-valuenow, per ARIA).
Props
Related: ProgressBarProps
ProgressBarProps
ProseScrollLabels
RadioGroup
Related: RadioGroupProps
RadioGroupProps
Related: RadioOption
RadioOption
RevealInput
Related: RevealInputProps
RevealInputProps
SchedulingIcon
ScrollRegion
Related: ScrollRegionProps
ScrollRegionProps
SearchIcon
Select
SelectGroup
Related: SelectOption
SelectGroupsProps
Related: SelectGroup
SelectOption
SelectProps
Related: SelectOption
ServedEndpointsIcon
SettingsIcon
SignOutIcon
Skeleton
Related: SkeletonProps
SkeletonProps
SortAscIcon
SortDescIcon
Spinner
Related: SpinnerProps
SpinnerProps
Stack
Related: StackProps
StackProps
StorageIcon
SunIcon
SystemIcon
TBody
Related: TableSectionProps
TD
Related: TDProps
TDProps
Related: NumericColumnProps
TH
Related: THProps
THProps
scope defaults to col because that is what a <th> in the
header row IS, and without it nothing associates the cell with the column
below it: a screen reader announcing a data cell has no header to name it.
A row header — the leading cell of a body row — passes scope="row".
Properties
Related: NumericColumnProps
THead
Related: TableSectionProps
TOKEN_NAMES
--tai-dark-* half of each themed pair is deliberately NOT here. Those
names are the theming mechanism’s own storage — the two blocks in tokens.css
that apply the dark theme are the only readers, and the scanner test holds
them to that. A plugin styles against the name WITHOUT the dark segment and
gets whichever half the viewer’s theme resolves to.
TR
Related: TableRowProps
TabItem
Table
Related: TableProps
TableProps
TableRowProps
TableSectionProps
<thead> and <tbody> take the same surface: the native one.
Properties
Tabs
Related: TabsProps
TabsProps
Related: TabItem
TagChips
Related: TagChipsProps
TagChipsProps
TagVocabularyEntry
TagsInput
value list; onChange receives the
next list on every add/remove. A blank or duplicate entry is ignored (never a
silent duplicate chip). Enter or comma commits the draft chip.
The draft input is a NATIVE-ATTRIBUTE PASS-THROUGH (the family inputs.tsx
documents): inside a Field it renders the SDK’s TextInput, which spreads
useFieldControl() and so claims the Field’s control id, taking the Field’s
visible label as its name; mounted OUTSIDE a Field it is named by a caller
aria-label, which the editor forwards to that same input. Without one a bare
editor is unnamed — the published component owns the naming route rather than
assuming a Field is always present. When a Field DOES name it, a caller
aria-label still has to CONTAIN that visible label (WCAG 2.5.3, Label in
Name); components/field-group.test.ts enforces that at every call site.
Props
Related: TagsInputProps
TagsInputProps
TemplatedTextField
Related: TemplatedTextFieldProps
TemplatedTextFieldProps
Related: TemplatedTextInlineProps, TemplatedTextTemplateOption
TemplatedTextInlineProps
renderInline receives to draw the inline-content editor.
Properties
TemplatedTextTemplateOption
TemplatesIcon
TextInput
Related: TextInputProps
TextInputProps
Textarea
Related: TextareaProps
TextareaProps
TokenName
ToolPicker
Related: ToolPickerProps
ToolPickerProps
ToolsIcon
Tooltip
Related: TooltipProps
TooltipProps
UNTAGGED_TOKEN
UnplugIcon
VersionHistoryEntry
VersionHistoryPanel
Related: VersionHistoryPanelProps
VersionHistoryPanelProps
Related: VersionHistoryEntry
ViewMode
ViewToggle
useViewMode.
Props
Related: ViewToggleProps
ViewToggleProps
Related: ViewMode
XCircleIcon
baseNameOf
tool, tool_a, tool_a_b
all resolve to tool; x_chain and x_batch both resolve to x.
Parameters
buildTagVocabulary
items, name-sorted, plus an untagged pseudo-tag
(labelled untaggedLabel) when any item is untagged; a selected token whose
items vanished still appears (count 0) so it can be cleared.
Parameters
Related: TagVocabularyEntry
childFolders
parentId (null = the root directory), name-sorted.
Parameters
Related: Folder
diffJson
before and after.
Parameters
Related: JsonDiffRow
folderPathTo
folderId, for a
breadcrumb. null is the root (an empty path). The walk is bounded by the folder
count, so a cyclic or dangling chain truncates instead of looping.
Parameters
Related: Folder
formatRangeLabel
Related: DateRangePreset, DateRangeValue
groupByKind
kind, for the picker. Groups are ordered by
kind and each group’s members by name, so the render order is stable regardless
of the server’s list order. The backend group is flagged non-stackable.
Parameters
Related: ExtensionKindGroup
groupIntoFamilies
Related: ExtensionFamily
isSafeHttpUrl
http:///https:// URL. Everything else is unsafe.
Parameters
kindVariant
kind to a Badge variant. Known skeleton kinds get
a themed color; any unrecognized kind falls back to the neutral variant (the
Badge itself also neutral-fallbacks, but choosing here keeps the mapping
explicit and testable).
Parameters
matchesSelectedTags
normalizeCustomRange
now —
capping first can leave a future instant on the post-swap end. The end is
INCLUSIVE of its minute, extended to :59.999, so 23:59 reaches the day’s end.
Parameters
openTargetProps
onOpen: undefined to get an inert entry (empty props).
Props
Related: OpenTargetOptions, OpenTargetProps
overlayDetailsPatch
Related: OverlayDetails
parseMarkdown
Related: MarkdownBlock
safeHttpUrl
href denotes, or undefined when it denotes none.
The // is required rather than inferred from a successful new URL(),
because for a scheme that matches the document’s own, the authority-less
spelling is a PATH: an anchor with href="https:/settings" on an https page
navigates to /settings on the CURRENT origin, while new URL() with no base
reads the same string as the host settings. Only the // form means the same
thing to both.
An absolute http(s) URL carrying user:pass@ userinfo is rejected too: .href
re-serialization preserves the userinfo (unlike host tricks), so
https://trusted.com@evil.com would render as trusted.com yet navigate to
evil.com.
Callers render the returned string rather than their input, so the URL that was
judged is always the URL that is navigated.
Parameters
templatedTextSummary
useFieldControl
id and aria-describedby are undefined both when there is no Field AND
inside a group Field: a group has no single element to carry them, and the
group container itself already carries the name and the description. Only
aria-invalid still crosses that boundary, because role="group" does not
support it (ARIA 1.2), so the control is the sole place an errored group can
expose its invalid state.
Related: FieldControlProps
useFillViewport
<main> to the viewport and lets the page’s own root flex or
height: 100% down the chain. Must be called under a PageFillProvider
(the shell mounts one); outside it there is no wrapper to modify, so it throws
rather than silently do nothing.
useOverflowRegion
<pre>, a JSON
pane, or the div ScrollRegion renders. Use the hook when wrapping the
content in a ScrollRegion would give the surface a second scroller.
The box is measured as it is attached, whenever it or any child resizes, and
whenever its content changes — replaced, appended, or edited in place. A
replaced child is a NEW element, so the registration is re-pointed at the
current children before each measurement, adding and dropping only the ones
that actually changed; both sides of that are registrations on the shared
observers, not observers of this mount’s own. The only DOM change a
measurement can cause is the region ATTRIBUTES this hook returns, and
attributes are deliberately left unobserved — that, not an absence of
mutation, is what stops the pair from re-triggering each other.
Parameters
Related: OverflowRegionAttributes
usePageFillActive
<main> and the page wrapper.
useProseScrollRegions
<table> and every <pre> — as scroll regions. React
cannot wrap markup it did not create, so this walks the DOM instead. A table
is moved into a div.tai-scroll-region (once — the pass is idempotent)
because the table itself is not the scrolling box; a <pre> already IS its
own scrolling box, so it is instrumented in place. Either way the scrolling
element carries the same conditional tabindex/role/aria-label as
ScrollRegion.
The name is the nearest heading preceding the surface — read for all of them
in one document-order pass — so a reader landing on the region hears which
section it belongs to; labels covers a surface with no heading above it, and
a name shared by several surfaces is numbered so no two regions answer to the
same one.
The pass runs from the ref callback rather than an effect, which puts it in
the commit phase, BEFORE the browser paints: .tai-prose table is
width: 100% with no overflow of its own — the scroller exists only on the
wrapper this builds — so a pass that ran after paint would show one frame at
320/360 px with the table overflowing the document, then jolt sideways. A
passive-effect probe measured exactly that: at first paint wrappers=0 and the
table’s parent was .tai-prose.
Injected HTML is replaced wholesale when its source changes, so the pass is
re-run from a MutationObserver on the subtree rather than on attachment
alone.
Props
Related: ProseScrollLabels
useRegisterDirty
DirtyGuardBoundary (which
GuardedTabs also provides). A no-op outside a boundary (an editor rendered
standalone, e.g. in isolation tests) so the hook is always safe to call.
Parameters
useViewMode
surface (a stable key like 'tools'). Returns
the stored choice or fallback when none is set, and a setter that writes through
to localStorage. Storage failures degrade to in-memory only — never a thrown
boot, matching the theme preference’s defensive reads/writes.
Parameters
Related: ViewMode

