Skip to main content
The design-system components — inputs, layout, tables, pickers, and disclosure primitives.

ActionMenu

Props Related: ActionMenuProps

ActionMenuItem

Properties

ActionMenuProps

Properties Related: ActionMenuItem

AgentListQuery

The subset of the agent list read this picker reads; a TanStack query result satisfies it. Properties

AgentPicker

Props Related: AgentPickerProps

AgentPickerProps

Properties Related: AgentListQuery

AgentsIcon

Agents: a bot — antenna, panel head with eyes and mouth, side ports. Related: IconComponent

AlertTriangleIcon

Warning. Related: IconComponent

ArrowDownIcon

Move the item one place later in an ordered list. Related: IconComponent

ArrowLeftIcon

Back / previous. Related: IconComponent

ArrowUpIcon

Move the item one place earlier in an ordered list. Related: IconComponent

BADGES_NOTE

The shared informational note every badge surface carries: declared, never enforced.

Badge

Props Related: BadgeProps

BadgeProps

Properties

Button

Parameters Related: LinkButtonProps

ButtonProps

The ACTION form of 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

Props Related: CardProps

CardProps

Properties

ChannelListQuery

The subset of the channel list read this picker reads; a TanStack query result satisfies it. Properties

ChannelPicker

Props Related: ChannelPickerProps

ChannelPickerProps

Properties Related: ChannelListQuery

CheckCircleIcon

Success. Related: IconComponent

CheckIcon

A bare tick, for selection and confirmation. Related: IconComponent

Checkbox

Props Related: CheckboxProps

CheckboxProps

Properties

ChevronDownIcon

Expand / collapse affordance. Related: IconComponent

ChevronRightIcon

Disclosure / breadcrumb separator. Related: IconComponent

ChipGroup

Parameters Related: ChipGroupProps

ChipGroupProps

Related: ChipOption

ChipOption

One selectable chip: its answer value and the visible label. Properties

CloseIcon

Dismiss. Related: IconComponent

CodeBlock

Props Related: CodeBlockProps

CodeBlockProps

Properties

CompletionInput

A completion-backed text input. Suggestions refresh on every edit (a per-request sequence guard drops a stale response) and render as an ARIA listbox; selecting an option fills the field and clears the list. Props Related: CompletionInputProps

CompletionInputProps

Properties

ConfirmDialog

Props Related: ConfirmDialogProps

ConfirmDialogProps

Properties

ConnectorsIcon

Connectors: a two-pin power plug on its lead. Related: IconComponent

ConversationsIcon

Conversations: one speech bubble holding transcript lines. Related: IconComponent

CopyField

Props Related: CopyFieldProps

CopyFieldProps

Properties

CopyIcon

Copy to clipboard: a sheet duplicated behind another. Related: IconComponent

CreateFolder

Create a folder under parentId and resolve with its id.

DEFAULT_DATE_RANGE_PRESETS

The presets a picker offers when the caller names none. Related: DateRangePreset

DashboardIcon

Observability: a dial gauge — arc, base and needle. Related: IconComponent

DatabaseIcon

States: a stacked-disk cylinder — one document store per subject. Related: IconComponent

DateRangePicker

The range control: a row of preset chips over the two 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

Properties Related: DateRangePreset, DateRangeValue

DateRangePreset

A relative preset: a \d+[hdw] token the backend resolves, plus its chip label. Properties

DateRangeValue

A named time window: either a relative token the backend resolves against its own clock, or an absolute pair of ISO instants.

Dialog

Props Related: DialogProps

DialogProps

Properties

DirtyGuardBoundary

Boundary that guards navigation away from a region holding a dirty editor. Editors inside it arm the guard through 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

Props Related: DrawerProps

DrawerProps

Properties

EditIcon

Edit: a pencil laid across the surface it writes on. Related: IconComponent

EmptyState

Props Related: EmptyStateProps

EmptyStateProps

Properties

EntityCardGrid

Props Related: EntityCardGridProps

EntityCardGridProps

Properties

ErrorBoundary

ErrorBoundaryProps

Properties

ErrorState

Props Related: ErrorStateProps

ErrorStateProps

Properties

ExecutionKeyPicker

Props Related: ExecutionKeyPickerProps

ExecutionKeyPickerProps

Properties Related: ExecutionKeyBinding, ExecutionKeyQuery

ExecutionKeyQuery

The subset of the api-key list query this picker reads. A caller’s TanStack UseQueryResult<TokensPayload> satisfies it structurally, so the SDK names no query library. Properties

ExplorerColumn

One header cell of the table view. renderRow must emit exactly this many <TD>s per item; folder rows span all of them. Properties

ExplorerEmptyState

Properties

ExplorerEmptyStates

The folder-aware empty-state ladder — every label caller-supplied. Properties Related: ExplorerEmptyState

ExplorerSearch

Controlled free-text search. The caller names the texts an item is searched by; the explorer matches them with the SDK’s one search rule (matchesSearch). Properties

ExplorerTags

Enables the tag vocabulary, filter chips, and OR filter. Fully controlled. Properties

ExplorerView

Props Related: ExplorerViewProps

ExplorerViewProps

Properties Related: ExplorerColumn, ExplorerEmptyStates, ExplorerSearch, ExplorerTags, Folder

ExtensionComboBuilder

Props Related: ExtensionComboBuilderProps

ExtensionComboBuilderProps

Properties

ExtensionKindGroup

One extension kind and every catalog entry of that kind. Properties

ExtensionPicker

Props Related: ExtensionPickerProps

ExtensionPickerProps

Properties

ExternalLinkButton

Props Related: ExternalLinkButtonProps

ExternalLinkButtonProps

Properties

ExternalLinkIcon

Opens in a new tab / leaves the app. Related: IconComponent

EyeIcon

Reveal a masked value. Related: IconComponent

EyeOffIcon

Mask a revealed value. Related: IconComponent

FailedReplyOutcome

Props Related: FailedReplyOutcomeProps

FailedReplyOutcomeProps

Properties

Field

Props Related: FieldProps

FieldControlProps

The a11y wiring a form control spreads onto its element. Properties

FieldProps

Properties

FilterIcon

A funnel. Related: IconComponent

FleetOutcomeReport

Props Related: FleetOutcomeReportProps

FleetOutcomeReportProps

Properties

FleetReloadReport

Props Related: FleetReloadReportProps

FleetReloadReportProps

Properties

FleetReport

Render a fleet broadcast’s failure state, an unreleased write span, and its workers awaiting a respawn. Returns null for an absent report or a converged one with no unreleased span and no worker awaiting a respawn (nothing to warn about), so callers can always mount it unconditionally beside their own success line. Props Related: FleetReportProps

FleetReportProps

Properties

Folder

A folder in the tree, in the SDK’s camelCase UI shape (parentId, null = root). Properties

FolderActionsMenu

The Rename, Move and Delete buttons for one folder row/card, each owning its dialog — for an explorer’s renderFolderActions slot. Each button shows only where the caller may make that write; a dialog already open stays open after its button is withdrawn, so its outcome is still shown. Renders nothing for a caller who may make none of the three writes. Props Related: FolderActionsMenuProps

FolderActionsMenuProps

Props of FolderActionsMenu. Properties Related: Folder, FoldersChanged

FolderBreadcrumb

The root → … → current path; each crumb navigates to that level. Props Related: FolderBreadcrumbProps

FolderBreadcrumbProps

Properties Related: Folder

FolderIcon

Folder: a tabbed folder, for the tool-organization tree and breadcrumbs. Related: IconComponent

FolderPicker

A folder chooser with inline new-folder creation, for the edit / move dialogs. Props Related: FolderPickerProps

FolderPickerProps

Properties Related: Folder

FolderRow

One subfolder in the current-directory explorer; opening it navigates inward. Props Related: FolderRowProps

FolderRowProps

Properties Related: Folder

FoldersChanged

Re-read the folder tree after a write; the write resolves once this settles.

FormDialog

Props Related: FormDialogProps

FormDialogProps

Properties

GridIcon

Grid: a 2x2 tile array — the card-view half of the list/card toggle. Related: IconComponent

GuardedTabs

A drop-in replacement for 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

The heading levels ATX syntax can express, # through ######.

HolderHref

Where one holder links: its href and the client-side transition to it. Properties

HolderList

The lead line, then one list item per holder: a link where one resolves, else text. Props Related: HolderListProps

HolderListProps

Properties

HolderPreview

The holder region of a rename, delete or detach dialog. The preview is advisory: loading, no grant and a failed read leave the dialog’s action enabled, and the server’s refusal decides. An empty preview renders nothing. Props Related: HolderPreviewProps

HolderPreviewProps

Properties Related: HolderListProps, HolderPreviewState

HolderPreviewState

What a dialog knows about the holders of a name before it acts: still reading, the caller has no grant for the read, the read failed, or the holders it read (or the holders a refusal named).

HooksIcon

Hooks: a webhook fan-out — one source branching to two subscribers. Related: IconComponent

IconComponent

The shape every exported icon satisfies. Related: IconProps

IconProps

Props of every icon: the full SVG surface, so 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

Interactions: two overlapping speech bubbles — a conversation. Related: IconComponent

JsonDiff

Props Related: JsonDiffProps

JsonDiffProps

Properties

JsonDiffRow

One leaf difference between the two JSON values. Properties

JsonTree

Props Related: JsonTreeProps

JsonTreeProps

Properties

LinkButtonProps

The LINK form of 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

Manifest: a document with a folded corner and its entries. Related: IconComponent

Markdown

Props Related: MarkdownProps

MarkdownBlock

A parsed block. Inline markup inside text is resolved at render time. Related: HeadingLevel

MarkdownProps

Properties

MarketplaceIcon

Marketplace: a shopping bag. Related: IconComponent

McpListingRefusal

Props Related: McpListingRefusalProps

McpListingRefusalProps

Properties Related: McpListingRefusalReason

McpListingRefusalReason

Why the answering worker holds no listing for the server a refused call had to read.

MediaDocument

One document: a labelled download affordance. The served route sends Content-Disposition: attachment for documents, so the anchor download-hints and opens in a new tab; rel="noreferrer" stops the Studio URL leaking to the media host. A url that fails isRenderableMediaSrc is the caller’s notice, never a live href. Props Related: MediaDocumentProps

MediaDocumentProps

Properties

MediaImage

One served/remote image. Its own component (not an inline .map body) because the load-failure flag is per-image useState, which the rules of hooks forbid inside a .map callback. referrerPolicy="no-referrer" is REQUIRED: it stops the Studio URL (which can encode the interaction/operator context) from leaking to the image host on a remote-image load. altFallback supplies the alt when the item has no caption; a caller overrides it for its own content and can supply renderNotice to render the blocked/failed states in its own presentation. Props Related: MediaImageProps

MediaImageProps

Properties

MediaPlayer

A native <audio>/<video controls> player. referrerPolicy is not a valid attribute on <audio>/<video>, so a remote load has no per-element referrer control; the player therefore admits ONLY the platform’s own served-media reference (isServedMediaUrl: same-origin, leaking no page URL to a media host), and any other url, a bare https: one included, is the caller’s notice. The load-failure flag keys on the url that failed so a new url at the same position gets a fresh load. Props Related: MediaPlayerProps

MediaPlayerProps

Properties

MembersIcon

Members: two people — a front figure with a second shouldered behind it. Related: IconComponent
The three-bar menu / drawer toggle. Related: IconComponent

MinusIcon

A bare dash, for a partial selection — the tick’s mixed-state counterpart. Related: IconComponent

MonitorIcon

Follow the operating system. Related: IconComponent

MoonIcon

Dark theme. Related: IconComponent

MoveToFolderDialog

A dialog that files one tool into a folder (or unfiles it). Mount while open. Props Related: MoveToFolderDialogProps

MoveToFolderDialogProps

Props of MoveToFolderDialog. Properties Related: Folder, FoldersChanged
The canonical mark for every navigable route token. 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

NotificationsIcon

Notifications: a bell with its clapper. Related: IconComponent

NumberInput

Parameters Related: NumberInputProps

NumberInputProps

NumericColumnProps

Right-align a column of digits on tabular figures. Properties

OpenTargetOptions

Properties

OpenTargetProps

The React attributes openTargetProps yields — spread onto the entry element (<TR>, card <div>). Every field is optional so the disabled case is the empty object. Properties

OverflowAxis

The axis a scroll region is measured on. A prose table or a code line scrolls SIDEWAYS (horizontal, the default); a bounded, capped-height list scrolls DOWN (vertical). Both wear the same conditional region attributes — only the dimension read to decide whether they overflow differs.

OverflowRegionAttributes

The attribute set a scrolling box wears; every value is absent while it fits. Properties

OverlayDetails

The two overlay fields this control edits. Properties

OverlayDetailsFields

Props Related: OverlayDetailsFieldsProps

OverlayDetailsFieldsProps

Properties Related: OverlayDetails

Page

The screen wrapper: the max-width, the gutters, and the vertical rhythm. Props Related: PageLayoutProps

PageFillProvider

Wraps the shell’s routed region: holds the count of pages asking for fill mode and publishes both the registrar (for useFillViewport) and the active flag (for usePageFillActive). Renders no DOM of its own. Parameters
Props Related: PageHeaderProps

PageHeaderProps

Properties

PageLayoutProps

Properties

PendingIcon

Pending / running / queued — a clock hand inside a dashed ring. The dash period has to TILE the circumference or the ring closes on a seam. At r = 9 the circumference is 2π·9 = 56.5487. A 3.2/3.2 array (period 6.4) fits 8.84 times, so the ring shut with a 2.15 gap instead of 3.2 — and with the inherited round linecap eating 1.6 at each end that seam rendered ~0.37 px wide at 16 px, reading as joined while every other gap read as a gap. Eight whole periods divide it exactly: 56.5487 / 8 = 7.0686, halved for the dash and the gap = 3.5343 each, giving 16 even segments and no seam. Related: IconComponent

PluginIcon

Plugin: a puzzle piece — the host’s provenance mark for plugin-contributed nav. Related: IconComponent

PlusIcon

Add / insert: the dash crossed by an upright, for an append or attach affordance. Related: IconComponent

PresetsIcon

Presets: three sliders, each with its knob at a different stop. Related: IconComponent

ProgressBar

Render a progress bar. With a positive 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

Properties

ProseScrollLabels

The fallback name per instrumented surface, when no heading precedes it. Properties

RadioGroup

Props Related: RadioGroupProps

RadioGroupProps

Properties Related: RadioOption

RadioOption

Properties

RecycleRollSection

Props Related: RecycleRollSectionProps

RecycleRollSectionProps

Properties

RevealInput

Props Related: RevealInputProps

RevealInputProps

Properties

SUBJECT_INCOMPLETE_MESSAGE

The message a partially-filled subject is refused with (all three fields or none).

SchedulingIcon

Scheduling: a calendar grid with its binding posts. Related: IconComponent

ScrollRegion

Props Related: ScrollRegionProps

ScrollRegionProps

Properties Related: OverflowAxis

SearchIcon

A magnifier. Related: IconComponent

SearchableSelect

Parameters

SearchableSelectGroup

A labelled cluster of SearchableSelectOptions. Properties Related: SearchableSelectOption

SearchableSelectGroupsProps

The GROUPED shape: labelled clusters, each carrying its own options. Properties Related: SearchableSelectGroup

SearchableSelectOption

One option of a SearchableSelect: a SelectOption that may carry a description, a line of text drawn under its label and searched alongside it. Properties Related: SelectOption

SearchableSelectProps

The FLAT shape: one ungrouped run of options. Properties Related: SearchableSelectOption

Select

Parameters

SelectGroup

A labelled cluster of options (e.g. tools grouped by tag). Properties Related: SelectOption

SelectGroupsProps

The GROUPED listbox: labelled clusters, each carrying its own options. Properties Related: SelectGroup

SelectOption

Properties

SelectProps

The FLAT listbox: one ungrouped run of options. Properties Related: SelectOption

ServedEndpointsIcon

Served endpoints: a broadcast node radiating to the tools it serves. Related: IconComponent

ServedMediaGrammar

The served-media grammar the contract publishes, read from the injected client (useApi().constants): the served route prefix and the stored-media id pattern. Media is stored by reference and served from the API origin at MEDIA_ROUTE_PREFIX + <id>; a record carries it as a RELATIVE url of exactly that shape, resolved to the API base at render time (resolveMediaSrc), not assumed same-origin as the SPA page.

SettingsIcon

Settings: an eight-tooth cog around its bore. Related: IconComponent

SignOutIcon

Sign out: a door with an outbound arrow. Related: IconComponent

Skeleton

Props Related: SkeletonProps

SkeletonProps

Properties

SortAscIcon

Ascending sort: an up arrow beside narrow-to-wide rows. Related: IconComponent

SortDescIcon

Descending sort: a down arrow beside wide-to-narrow rows. Related: IconComponent

Spinner

Props Related: SpinnerProps

SpinnerProps

Properties

Stack

A vertical flex column on the spacing scale. Props Related: StackProps

StackProps

Properties

Stepper

Props Related: StepperProps

StepperProps

Properties Related: StepperStep

StepperStatus

StepperStep

Properties Related: StepperStatus

StorageIcon

Storage: a database cylinder with two shelves. Related: IconComponent

SubjectSection

Parameters Related: SubjectSectionProps

SubjectSectionKeyFieldProps

The HOST’S key: the section draws keyField where the key goes, labelled by the host. Properties Related: SubjectSectionSharedProps, SubjectTargetOption

SubjectSectionProps

What SubjectSection accepts: exactly one of the two key shapes. Related: SubjectSectionKeyFieldProps, SubjectSectionTextKeyProps

SubjectSectionSharedProps

What every subject section takes, whatever its key field. Properties Related: SubjectTargetOption

SubjectSectionTextKeyProps

The TEXT key: the section draws a “Subject key” text field over subjectKey. Properties Related: SubjectSectionSharedProps, SubjectTargetOption

SubjectTargetOption

One conversation-target option: target_kind:target_name value, kind · name label. Properties

SunIcon

Light theme. Related: IconComponent

SystemIcon

System: a processor die with its pins. Related: IconComponent

TBody

Props Related: TableSectionProps

TD

Props Related: TDProps

TDProps

Right-align a column of digits on tabular figures. Properties Related: NumericColumnProps

TH

Props Related: THProps

THProps

A header cell. 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

Props Related: TableSectionProps

TOKEN_NAMES

The documented CSS-variable token names — the Studio-plugin styling API. A snapshot test pins this list so the contract can’t drift silently. A rename or a removal bumps the SDK compatibility version; a new name does not. The --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.

TOOL_SEARCH_NAMES_ONLY_NOTE

The sentence a host adds while a failed description read leaves the search on names alone.

TR

Props Related: TableRowProps

TabItem

Properties

Table

Props Related: TableProps

TableProps

Properties

TableRowProps

Properties

TableSectionProps

<thead> and <tbody> take the same surface: the native one. Properties

Tabs

Props Related: TabsProps

TabsProps

Properties Related: TabItem

TagChips

Read-only chips for a list of tags. Renders nothing when there are none. Props Related: TagChipsProps

TagChipsProps

Properties

TagVocabularyEntry

Properties

TagsInput

Controlled tag editor. The caller owns the 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

Properties

TemplatedTextField

Props Related: TemplatedTextFieldProps

TemplatedTextFieldProps

Properties Related: TemplatedTextInlineProps, TemplatedTextTemplateOption

TemplatedTextInlineProps

The props renderInline receives to draw the inline-content editor. Properties

TemplatedTextTemplateOption

One stored template the id picker offers. Properties

TextInput

Parameters Related: TextInputProps

TextInputProps

Textarea

Parameters Related: TextareaProps

TextareaProps

TokenName

Related: TOKEN_NAMES

ToolListQuery

The subset of a tool list read this picker reads: data is the names the host offers. A caller’s TanStack UseQueryResult<readonly string[]> satisfies it structurally, so the SDK names no query library. Properties

ToolMetaWriteAccess

Which overlay writes the caller may be offered. Properties

ToolMetaWriteError

A failed overlay write as its dialog shows it: the muted OFF note with the server’s message for a not-configured refusal, an error for anything else. Parameters

ToolPicker

Props Related: ToolPickerProps

ToolPickerProps

Properties Related: ToolListQuery

ToolsIcon

Tools: an open-ended spanner over its handle. Related: IconComponent

Tooltip

Props Related: TooltipProps

TooltipProps

Properties

UNTAGGED_TOKEN

Reserved filter token for items carrying NO tag; namespaced so it never collides with a real tag.

UnplugIcon

Detach / unmount: a plug pulled from its socket, the two prongs above the gap. Related: IconComponent

VersionHistoryEntry

One version row — the kind-agnostic shape every consumer projects into. Properties

VersionHistoryPanel

Props Related: VersionHistoryPanelProps

VersionHistoryPanelProps

Properties Related: VersionHistoryEntry

ViewMode

The two entity-screen layouts.

ViewToggle

The icon-only segmented switch. Controlled: pair it with useViewMode. Props Related: ViewToggleProps

ViewToggleProps

Properties Related: ViewMode

WriteFailure

Props Related: WriteFailureProps

WriteFailureProps

Properties

XCircleIcon

Failure. Related: IconComponent

buildSubject

Build a StateSubject from the sub-form values: null when untouched (no subject), a subject when target, kind and key are all set, or a loud failure when only some are — never a silently dropped partial subject. The target splits on its FIRST colon, so a target name may itself contain one. Parameters

buildTagVocabulary

The tag vocabulary over 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

canHoldExecutionKey

Whether the form has a key to send: always with access control off, never while the projection is pending, and otherwise once the list read has answered (loaded, or refused with a 403) and the picker holds a value, lists a key, or offers a key session’s own identity. Under a checked binding the picker renders its Select exactly while the list read is pending or this holds. Parameters Related: ExecutionKeyBinding, ExecutionKeyQuery

channelIdentityHint

The named channel’s declared hint for a route’s identity: the hint, null for a listed channel that declares none, undefined when the name is not listed. Parameters

childFolders

The subfolders directly under parentId (null = the root directory), name-sorted. Parameters Related: Folder

diffJson

The pure structural diff — every leaf difference between before and after. Parameters Related: JsonDiffRow

folderPathTo

The ordered ancestor path from the root down to (and including) 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

foldersForView

The folders a screen draws, in the input order. rows are the overlay rows (each tool’s folder_id), population the tool names the screen lists. Linear in folders + rows; the subtree walk is cycle-guarded, so a malformed parent chain yields a bounded result rather than looping. Parameters Related: Folder

formatRangeLabel

Parameters Related: DateRangePreset, DateRangeValue

groupByKind

Group a flat extension list by kind. 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. Each group carries its kind’s served multiple; a kind whose entries disagree is a catalog fault and throws. Parameters Related: ExtensionKindGroup

isExecutionKeyListEmpty

Resolved, and holding no key at all. Props Related: ExecutionKeyQuery

isRenderableMediaSrc

The media src gate: a media element renders ONLY for an https: URL, the platform’s own served-media reference (a relative MEDIA_ROUTE_PREFIX + <id>), or — when the caller opts in with allowDataImage — an inline data:image/* URI. isSafeHttpUrl is TIGHTENED to https-only here (it alone also admits http:, which the Studio CSP img-src/media-src blocks and the contract never emits); the served-media branch pins a well-formed platform media id (a relative url isSafeHttpUrl cannot parse). allowDataImage defaults OFF: only a sink that stores media RAW (never substituted to a served reference) opts in, and even then ONLY data:image/* is admitted — a data: of any other type (data:text/html, an SVG document, …) is ALWAYS blocked. http:, javascript:, a non-image data:, and any other-shaped relative url fail every branch → a loud blocked item. The gate keys on the reference form; resolveMediaSrc joins an admitted reference to the API base for the actual load. Parameters Related: ServedMediaGrammar

isSafeHttpUrl

True only for an absolute http:///https:// URL. Everything else is unsafe. Parameters

isServedMediaUrl

Whether url is the platform’s own served-media reference: a relative MEDIA_ROUTE_PREFIX + <id> whose id matches MEDIA_ID_PATTERN whole. A served reference is same-origin to the API base (resolveMediaSrc) and leaks no page context on load, so a sink with no per-element referrer control (<audio>/<video>, where referrerPolicy is not a valid attribute) admits ONLY this form. Parameters Related: ServedMediaGrammar

matchesSelectedTags

OR semantics: an empty selection matches everything; otherwise an item matches when it carries any selected tag, or is untagged and UNTAGGED_TOKEN is selected. Parameters

mcpListingRefusalOf

The listing refusal error is, read through the client that raised it, or null when it is not one: a read of a server’s tools or a selection-changing write, refused because the worker that answered holds no listing for the server. Parameters Related: McpListingRefusalReason

normalizeCustomRange

A raw from/to pair resolved to a clean absolute range. Order matters: SWAP the reversed pair first (earlier instant becomes start), THEN cap both ends at 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

Build the whole-target open props for one entry. See the module doc for the contract; pass onOpen: undefined to get an inert entry (empty props). Props Related: OpenTargetOptions, OpenTargetProps

overlayDetailsPatch

The merge-patch a display-name + tags write sends: ONLY these two fields. Props Related: OverlayDetails

parseMarkdown

Folds markdown source into an ordered list of blocks. Pure and total: any string parses, and text that matches no block construct becomes a paragraph rather than being discarded. Parameters Related: MarkdownBlock

previewHolders

The holders a preview state blocks on: a non-empty list disables the action. Parameters Related: HolderPreviewState

resolveMediaSrc

The URL an admitted media element actually loads. An https: url is already absolute and is returned unchanged. A served-media reference is RELATIVE and is joined to the API origin (baseUrl) — NOT the SPA page origin: in a cross-origin deployment the two differ, and a page-relative src would resolve against Studio and 404. An empty baseUrl (same-origin deployment) leaves the reference relative, which is correct; a configured base’s trailing slash is stripped so the join never double-slashes. Parameters Related: ServedMediaGrammar

safeHttpUrl

The absolute http(s) URL 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. isSafeHttpUrl gives the yes/no answer for a caller that does not need the URL itself. Parameters

templatedTextSummary

A short one-line rendering of a templated-text value, for read-only summaries. Parameters

toFolders

Map the overlay’s wire folder records into the UI Folder shape. Parameters Related: Folder

toSubjectTargetOptions

Map the conversation routes read to the target select’s options: one option per distinct target, in first-seen order, since several routes may share a target. Parameters Related: SubjectTargetOption

toolSearchShown

Whether a ToolPicker given these props draws its search: the list is loaded, the select offers an option (a listed tool, or a flagged stored value) and the picker is enabled. A pending, failed, refused or empty read, or a disabled picker, draws none. A host reads it to say what the search matches only while the search is there. Parameters Related: ToolPickerProps

useCreateFolder

Create a folder through the folder door and refresh the screen’s tree, resolving with the new folder’s id — the shape FolderPicker’s onCreateFolder takes. undefined when the caller may not create a folder, so the picker offers no create. A rejection propagates to the picker, which shows it; a not-configured refusal is also reported, withdrawing every overlay write. Parameters Related: CreateFolder, FoldersChanged

useFieldControl

Read the enclosing Field’s wiring. 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

Opt the current page into full-height fill mode for as long as it is mounted. The shell fills <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.

useHolderHref

The resolver for holder links: null for a count holder and for a kind neither the core table nor any registered plugin resolves. Related: HolderHref

useOverflowRegion

The conditional region attributes for a scrolling box, alongside the ref that names it. The ref must go on the scrolling box ITSELF — a <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: OverflowAxis, OverflowRegionAttributes

usePageFillActive

Whether any mounted page currently asks for fill mode — the shell’s cue to add the fill modifiers to <main> and the page wrapper.

useProseScrollRegions

Instruments the scrollable surfaces under the element the returned ref is attached to — every <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

Report an editor’s dirty state to the enclosing 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

useReportToolMetaRefusal

Hand a failed overlay write here: a not-configured refusal (501 tool-meta-not-configured) is recorded so every screen withdraws its overlay writes; any other failure is left to the caller, which shows it.

useSubjectFields

Subject field state + setters + the collapse toggle. The host feature owns the open-gated conversation-targets query and derives targetOptions from it.

useToolMetaWriteAccess

The overlay writes the caller may be offered: each one’s own route reached by the projection (fail closed until the projection is ready) and the tool_meta store not known OFF. Related: ToolMetaWriteAccess

useViewMode

The persisted view mode for one 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