bb.ui
The bb.ui plugin provides shared React components, pure helpers, and display contracts.
Purpose
bb.ui supplies one versioned component kit for first-party and external app plugins.
It exposes code through module imports, so it declares no claims, surfaces, services, or host roles.
The kit owns reusable presentation primitives. Domain plugins own their data, routes, state, and replaceable surfaces.
Surfaces
bb.ui declares no surfaces. It cannot win or replace a host surface.
| ID | kind | replaceable | props contract sketch | notes |
|---|---|---|---|---|
| — | — | — | — | Pure module exports only. |
Services
bb.ui declares no services. Its helpers do not read a service token or keep shared state.
| ID | kind | replaceable | methods | notes |
|---|---|---|---|---|
| — | — | — | — | Pure module exports only. |
Exports
Plugins import the kit from @bb/ui. The root entry re-exports the stable groups below.
import type {
ComponentPropsWithoutRef,
ComponentType,
CSSProperties,
ReactNode,
} from "react";
export type UiProps = {
className?: string;
children?: ReactNode;
};
export type UiComponent<P extends object = UiProps> = ComponentType<P>;
export type NativeButtonProps = ComponentPropsWithoutRef<"button">;
export type NativeInputProps = ComponentPropsWithoutRef<"input">;
export type NativeTextareaProps = ComponentPropsWithoutRef<"textarea">;
export type StyleProps = { style?: CSSProperties };
export type DateRange = { from: Date; to?: Date };
export type DateMatcher = (date: Date) => boolean;
export type ChartConfig = Record<string, {
label?: ReactNode;
color?: string;
icon?: ComponentType;
}>;
export type CarouselOptions = Record<string, unknown>;
export type CarouselApi = {
scrollNext(): void;
scrollPrev(): void;
selectedScrollSnap(): number;
};
export type FormFieldRenderContext = {
name: string;
value: unknown;
onChange(value: unknown): void;
onBlur(): void;
ref: unknown;
};The kit forwards standard DOM props unless a contract below lists a narrower prop. Every controlled component calls its change callback after it accepts the new value.
Layout, status, and display
These exports build static content, status, and responsive layout.
| Export family | Purpose | Props sketch |
|---|---|---|
Accordion* |
Shows collapsible sections with one or many open items. | `Root: { type?: "single" |
Alert |
Shows a short status message with optional title and icon. | `{ variant?: "default" |
AlertDialog* |
Requests a decision in a modal with explicit action and cancel controls. | Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void }; Content, Title, Description, Action, Cancel, Trigger: Radix-style props and children. |
AspectRatio |
Keeps child content at a fixed width-to-height ratio. | { ratio?: number; children; className? }. |
Avatar |
Shows an image with a fallback label or icon. | `{ src?: string; alt?: string; fallback?: ReactNode; size?: "sm" |
Badge |
Shows a small status or category label. | `{ variant?: "default" |
Card |
Groups related content in a bordered panel. | { children; className? }, with CardHeader, CardTitle, CardDescription, CardContent, and CardFooter using { children; className? }. |
Collapsible |
Shows or hides one content region. | Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children }; Trigger, Content: { children; className? }. |
Progress |
Shows a determinate or indeterminate progress state. | `{ value?: number |
Separator |
Draws a visual or semantic divider. | `{ orientation?: "horizontal" |
Skeleton |
Shows a loading placeholder with the target shape. | `{ width?: string |
Resizable* |
Provides draggable panels with minimum and maximum sizes. | `PanelGroup: { direction: "horizontal" |
ScrollArea, ScrollBar |
Adds styled, accessible scrolling to a bounded region. | `ScrollArea: { type?: "auto" |
Table* |
Renders tabular data with semantic row and cell elements. | Table: { children; className? }; TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption: native table props plus children. |
Chart* |
Renders chart content with shared color and label configuration. | { config: ChartConfig; data: readonly unknown[]; children; className? }; ChartConfig maps a series key to { label?: ReactNode; color?: string; icon?: ComponentType }. |
Form controls
These exports keep input behavior controlled and keyboard accessible.
| Export family | Purpose | Props sketch |
|---|---|---|
Button |
Triggers an action or renders a styled link-like action. | `Omit<NativeButtonProps, "title"> & { variant?: "default" |
Checkbox |
Selects a boolean value. | { checked?: boolean; defaultChecked?: boolean; onCheckedChange?: (checked: boolean) => void; disabled?: boolean; required?: boolean; name?: string; className? }. |
Form* |
Connects labels, descriptions, errors, and controls to form fields. | Form: { children }; FormField: { name: string; control: unknown; render: (field: FormFieldRenderContext) => ReactNode }; FormItem, FormLabel, FormControl, FormDescription, FormMessage: { children; className? }. |
Input |
Accepts one line of text or a native input value. | NativeInputProps. |
InputOtp |
Accepts a fixed-length one-time code. | { maxLength: number; value?: string; defaultValue?: string; onChange?: (value: string) => void; disabled?: boolean; pattern?: string; className? }. |
Label |
Names an input or control. | ComponentPropsWithoutRef<"label"> & { required?: boolean }. |
RadioGroup* |
Selects one value from a group. | `RadioGroup: { value?: string; defaultValue?: string; onValueChange?: (value: string) => void; orientation?: "horizontal" |
Select* |
Selects one value from a list of options. | Root: { value?: string; defaultValue?: string; onValueChange?: (value: string) => void; disabled?: boolean; children }; Trigger, Content, Item, Label, Group, Separator, ScrollUpButton, ScrollDownButton: Radix-style props. |
Slider |
Selects one or more numeric values in a range. | { value?: number[]; defaultValue?: number[]; min?: number; max?: number; step?: number; onValueChange?: (value: number[]) => void; onValueCommit?: (value: number[]) => void; disabled?: boolean; className? }. |
Switch |
Toggles a boolean setting. | { checked?: boolean; defaultChecked?: boolean; onCheckedChange?: (checked: boolean) => void; disabled?: boolean; required?: boolean; name?: string; className? }. |
Textarea |
Accepts multiple lines of text. | NativeTextareaProps. |
Toggle |
Toggles a button-like action state. | `{ pressed?: boolean; defaultPressed?: boolean; onPressedChange?: (pressed: boolean) => void; variant?: "default" |
ToggleGroup* |
Selects one or many values from toggle buttons. | `Root: { type: "single" |
Calendar |
Shows a calendar and selects a date or date range. | `{ mode?: "single" |
Menus, overlays, and feedback
These exports provide accessible overlays with controlled open state.
| Export family | Purpose | Props sketch |
|---|---|---|
Command* |
Searches and selects commands or records from a keyboard-first list. | Command: { value?: string; onValueChange?: (value: string) => void; loop?: boolean; children }; Input, List, Empty, Group, Item, Separator, Shortcut, Dialog: Radix-style props; Item adds { value: string; onSelect?: (value: string) => void; disabled?: boolean }. |
ContextMenu* |
Shows actions for a pointer or keyboard context target. | Root: { children }; Trigger: { asChild?: boolean; children }; Content, Item, CheckboxItem, RadioItem, Label, Separator, Sub, SubTrigger, SubContent: menu props; actionable items add onSelect?: () => void and disabled?: boolean. |
Dialog* |
Shows content in a modal dialog. | Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children }; Trigger, Content, Header, Footer, Title, Description, Close: { children; className? } plus overlay and modal props. |
Drawer* |
Shows content in a responsive bottom or side drawer. | `Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; direction?: "top" |
DropdownMenu* |
Shows actions from a button or menu trigger. | Root, Trigger, Content, Group, Label, Item, CheckboxItem, RadioGroup, RadioItem, Separator, Sub, SubTrigger, SubContent: the corresponding ContextMenu* shape; Item adds onSelect and disabled. |
HoverCard* |
Shows supporting content when a pointer rests on a trigger. | Root: { openDelay?: number; closeDelay?: number; open?: boolean; onOpenChange?: (open: boolean) => void; children }; Trigger, Content: { children; className? }. |
Menubar* |
Provides a horizontal application menu with keyboard navigation. | MenuBar: { children }; Menu, Trigger, Content, Item, CheckboxItem, RadioGroup, RadioItem, Label, Separator, Sub, SubTrigger, SubContent: menu props and onSelect where relevant. |
Popover* |
Shows anchored content without modal focus capture. | Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children }; Trigger, Content, Anchor, Close: { children; className? }; Content adds side?, align?, and sideOffset?. |
Sheet* |
Shows a modal panel from one edge of the viewport. | Root: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children }; Content adds `side?: "top" |
Tooltip* |
Shows a short label for an element after a delay. | Provider: { delayDuration?: number; children }; Root: { delayDuration?: number; children }; Trigger, Content, Arrow: { children; className? }; Content adds side?, align?, and sideOffset?. |
Navigation and data widgets
These exports support movement through records and presentation of structured values.
| Export family | Purpose | Props sketch |
|---|---|---|
Breadcrumb* |
Shows the current location in a navigation hierarchy. | Breadcrumb: { children; className? }; BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis: { children; href?; className? } as applicable. |
Carousel* |
Shows a swipeable or keyboard-controlled sequence of panels. | `Root: { opts?: CarouselOptions; plugins?: readonly unknown[]; orientation?: "horizontal" |
NavigationMenu* |
Shows hierarchical navigation links and submenus. | Root: { value?: string; onValueChange?: (value: string) => void; children }; List, Item, Link, Trigger, Content, Indicator, Viewport: navigation props and children. |
Pagination* |
Moves through a finite set of result pages. | Pagination: { page: number; pageCount: number; onPageChange: (page: number) => void; siblingCount?: number; showFirstLast?: boolean; className? }; PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis: { children?; page?: number; isActive?: boolean; onClick?: () => void }. |
Tabs* |
Switches between related panels. | `Root: { value?: string; defaultValue?: string; onValueChange?: (value: string) => void; orientation?: "horizontal" |
Domain-facing exports
These exports provide shared BB presentation behavior. They do not expose domain services.
Pure display helpers from @bb/ui/core
| Export | Purpose | Signature |
|---|---|---|
assertNever |
Fails when code reaches an impossible union branch. | (value: never, message?: string) => never |
formatEnvironmentDisplay |
Formats an environment for app and prompt labels. | (args: { environment: Environment; host: EnvironmentDisplayHostContext }) => EnvironmentDisplayInfo |
formatPendingInteractionSummary |
Builds the short summary for a pending interaction. | `(args: { interaction: PendingInteraction; surface: "app" |
formatPendingInteractionUserQuestionOptionLabel |
Formats one selected user-question option. | (args: { question: PendingInteractionUserQuestionQuestion; value: string }) => string |
summarizePendingInteractionRequestedPermissions |
Summarizes requested file, network, and macOS permissions. | `(permissions: PendingInteractionGrantablePermissionProfile |
formatPendingInteractionSubjectDetailLines |
Formats detail lines for a pending-interaction view. | (interaction: PendingInteraction) => string[] |
formatPendingInteractionApprovalResolutionOutcome |
Formats an approval decision result. | (decision: PendingInteractionApprovalDecision) => string |
buildPendingInteractionApprovalResolution |
Builds the approval response and granted permissions. | (interaction: PendingInteraction, decision: PendingInteractionApprovalDecision) => PendingInteractionResolution |
describePendingInteractionToolUse |
Projects tool-use approval data for a banner or row. | (payload: ToolUseApprovalPendingInteractionPayload) => PendingInteractionToolUseAsk |
formatPendingInteractionToolUseDetailLines |
Formats tool-use approval detail lines. | (ask: PendingInteractionToolUseAsk) => string[] |
extractErrorMessage |
Reads a displayable message from an unknown error value. | `(value: unknown, options?: { legacyKeys?: readonly string[] }) => string |
toRecord |
Narrows an unknown object to a string-keyed record. | `(value: unknown) => Record<string, unknown> |
The core helper types remain available from @bb/ui/core.
| Type | Shape |
|---|---|
EnvironmentDisplayInfo |
`{ modeLabel: string; compactModeLabel: string; id: string; mode: "direct" |
EnvironmentDisplayHostContext |
`{ locality: "local" |
PendingInteractionToolUseAsk |
`{ title: string; tool: string; headline: string |
Semantic links and code viewers
UrlLink keeps normal anchor behavior while applying the BB URL policy.
FileLink carries a complete target, so it does not depend on ambient route state.
SourceCode and Diff are module facades over the active Files renderer choice.
The bb.files plugin owns the renderer surfaces and their replacement rules.
| Export | Purpose | Props sketch |
|---|---|---|
UrlLink |
Opens an HTTP or app URL with BB link policy. | Omit<ComponentPropsWithoutRef<"a">, "href"> & { href: string }. |
FileLink |
Opens a live workspace, host, or thread-storage file. | `Omit<ComponentPropsWithoutRef<"a">, "href" |
SourceCode |
Displays source text with the active BB source renderer. | `{ content: string; path: string; overflow?: CodeOverflowMode; highlightedLines?: SourceCodeLineRange |
Diff |
Displays one file patch with the active BB diff renderer. | { patch: string; path: string; view?: DiffViewMode; overflow?: CodeOverflowMode; showLineNumbers?: boolean; experimental_fullFileContents?: DiffFullFileContents; className?: string }. |
experimental_UrlLink, experimental_FileLink, experimental_SourceCode, experimental_Diff |
Preserves old import names during migration. | Exact aliases of UrlLink, FileLink, SourceCode, and Diff. |
export type SourceCodeLineRange = { start: number; end: number };
export type CodeOverflowMode = "scroll" | "wrap";
export type DiffViewMode = "unified" | "split";
export interface SourceCodeProps {
content: string;
path: string;
overflow?: CodeOverflowMode;
highlightedLines?: SourceCodeLineRange | null;
className?: string;
}
export interface DiffFileContent {
path: string;
content: string;
}
export interface DiffFullFileContents {
old: DiffFileContent;
new: DiffFileContent;
}
export interface DiffProps {
patch: string;
path: string;
view?: DiffViewMode;
overflow?: CodeOverflowMode;
showLineNumbers?: boolean;
experimental_fullFileContents?: DiffFullFileContents;
className?: string;
}
export type LiveFileTarget =
| { kind: "workspace"; environmentId: string; path: string }
| { kind: "host"; hostId: string; path: string }
| { kind: "thread-storage"; threadId: string; path: string };
export type FileLocation =
| { kind: "line"; line: number; column: number | null }
| { kind: "range"; startLine: number; endLine: number };
export interface FileOpenOptions {
target: LiveFileTarget;
location: FileLocation | null;
}
export type UrlLinkProps = Omit<
ComponentPropsWithoutRef<"a">,
"href"
> & { href: string };
export type FileLinkProps = Omit<
ComponentPropsWithoutRef<"a">,
"href" | "target"
> & {
target: LiveFileTarget;
location?: FileLocation | null;
};
export const UrlLink: UiComponent<UrlLinkProps>;
export const FileLink: UiComponent<FileLinkProps>;
export const SourceCode: UiComponent<SourceCodeProps>;
export const Diff: UiComponent<DiffProps>;
/** Deprecated alias. Use UrlLink. */
export const experimental_UrlLink: typeof UrlLink;
/** Deprecated alias. Use FileLink. */
export const experimental_FileLink: typeof FileLink;
/** Deprecated alias. Use SourceCode. */
export const experimental_SourceCode: typeof SourceCode;
/** Deprecated alias. Use Diff. */
export const experimental_Diff: typeof Diff;The experimental_* names preserve old bundles during the alias window.
New code uses the unprefixed names.
Provider execution pickers
These controlled facades use the active bb.providers directory.
They keep the current provider, model, reasoning, tier, and permission reconciliation in one component contract.
export type ProviderPickerRouting =
| { kind: "host"; hostId: string }
| { kind: "environment"; environmentId: string };
export interface ProviderPickerValue {
providerId: string;
model: string;
reasoningLevel: string;
serviceTier?: string;
}
export interface ProviderModelPickerProps {
value: ProviderPickerValue;
onChange(value: ProviderPickerValue): void;
routing?: ProviderPickerRouting;
allowProviderChange?: boolean;
align?: "start" | "center" | "end";
disabled?: boolean;
className?: string;
}
export interface PermissionModePickerProps {
providerId: string;
value: string;
onChange(value: string): void;
routing?: ProviderPickerRouting;
align?: "start" | "center" | "end";
disabled?: boolean;
className?: string;
}
export const ProviderModelPicker: UiComponent<ProviderModelPickerProps>;
export const PermissionModePicker: UiComponent<PermissionModePickerProps>;The pickers use the Providers app adapter and the Workspace route identity.
They do not own provider records or workspace state.
The old experimental_ exports remain aliases during migration.
Host roles
bb.ui declares no host roles. Its code runs in the app module graph and uses no server or daemon artifact.
Example
This plugin uses bb.ui imports inside its own page. It owns the page data and action handlers.
import {
Alert,
Button,
Card,
CardContent,
FileLink,
Input,
SourceCode,
extractErrorMessage,
formatEnvironmentDisplay,
} from "@bb/ui";
type AuditProps = {
environment: Environment;
target: {
kind: "workspace";
environmentId: string;
path: string;
};
source: string;
onSearch(value: string): void;
onRefresh(): void;
error: unknown;
};
export function AuditPanel(props: AuditProps) {
const display = formatEnvironmentDisplay({
environment: props.environment,
host: { locality: "local", identity: null },
});
const errorMessage = extractErrorMessage(props.error);
return (
<Card>
<CardContent className="space-y-3">
<div>{display.modeLabel}</div>
<Input
aria-label="Search audit text"
onChange={(event) => props.onSearch(event.currentTarget.value)}
/>
<FileLink target={props.target} location={{ kind: "line", line: 1, column: null }}>
Open source file
</FileLink>
<SourceCode path={props.target.path} content={props.source} />
{errorMessage ? <Alert variant="destructive">{errorMessage}</Alert> : null}
<Button onClick={props.onRefresh}>Refresh</Button>
</CardContent>
</Card>
);
}The example imports concrete code. It does not claim bb.ui or replace a surface.
Covers
The following table covers every item assigned to this page.
Thread-selected host components and their types stay with bb.threads and do not appear here.
| old item ID | new contract/verb | note |
|---|---|---|
registry.ui.accordion |
@bb/ui: Accordion* |
Shared module export. |
registry.ui.alert |
@bb/ui: Alert |
Shared module export. |
registry.ui.alertDialog |
@bb/ui: AlertDialog* |
Shared module export. |
registry.ui.aspectRatio |
@bb/ui: AspectRatio |
Shared module export. |
registry.ui.avatar |
@bb/ui: Avatar |
Shared module export. |
registry.ui.badge |
@bb/ui: Badge |
Shared module export. |
registry.ui.breadcrumb |
@bb/ui: Breadcrumb* |
Shared module export. |
registry.ui.button |
@bb/ui: Button |
Shared module export. |
registry.ui.calendar |
@bb/ui: Calendar |
Shared module export. |
registry.ui.card |
@bb/ui: Card* |
Shared module export. |
registry.ui.carousel |
@bb/ui: Carousel* |
Shared module export. |
registry.ui.chart |
@bb/ui: Chart* |
Shared module export. |
registry.ui.checkbox |
@bb/ui: Checkbox |
Shared module export. |
registry.ui.collapsible |
@bb/ui: Collapsible* |
Shared module export. |
registry.ui.command |
@bb/ui: Command* |
Shared module export. |
registry.ui.contextMenu |
@bb/ui: ContextMenu* |
Shared module export. |
registry.ui.dialog |
@bb/ui: Dialog* |
Shared module export. |
registry.ui.drawer |
@bb/ui: Drawer* |
Shared module export. |
registry.ui.dropdownMenu |
@bb/ui: DropdownMenu* |
Shared module export. |
registry.ui.form |
@bb/ui: Form* |
Shared module export. |
registry.ui.hoverCard |
@bb/ui: HoverCard* |
Shared module export. |
registry.ui.input |
@bb/ui: Input |
Shared module export. |
registry.ui.inputOtp |
@bb/ui: InputOtp |
Shared module export. |
registry.ui.label |
@bb/ui: Label |
Shared module export. |
registry.ui.menubar |
@bb/ui: Menubar* |
Shared module export. |
registry.ui.navigationMenu |
@bb/ui: NavigationMenu* |
Shared module export. |
registry.ui.pagination |
@bb/ui: Pagination* |
Shared module export. |
registry.ui.popover |
@bb/ui: Popover* |
Shared module export. |
registry.ui.progress |
@bb/ui: Progress |
Shared module export. |
registry.ui.radioGroup |
@bb/ui: RadioGroup* |
Shared module export. |
registry.ui.resizable |
@bb/ui: Resizable* |
Shared module export. |
registry.ui.scrollArea |
@bb/ui: ScrollArea, ScrollBar |
Shared module export. |
registry.ui.select |
@bb/ui: Select* |
Shared module export. |
registry.ui.separator |
@bb/ui: Separator |
Shared module export. |
registry.ui.sheet |
@bb/ui: Sheet* |
Shared module export. |
registry.ui.skeleton |
@bb/ui: Skeleton |
Shared module export. |
registry.ui.slider |
@bb/ui: Slider |
Shared module export. |
registry.ui.switch |
@bb/ui: Switch |
Shared module export. |
registry.ui.table |
@bb/ui: Table* |
Shared module export. |
registry.ui.tabs |
@bb/ui: Tabs* |
Shared module export. |
registry.ui.textarea |
@bb/ui: Textarea |
Shared module export. |
registry.ui.toggle |
@bb/ui: Toggle |
Shared module export. |
registry.ui.toggleGroup |
@bb/ui: ToggleGroup* |
Shared module export. |
registry.ui.tooltip |
@bb/ui: Tooltip* |
Shared module export. |
app.coreUi.assertNever |
@bb/ui/core: assertNever |
Pure helper export. |
app.coreUi.formatEnvironmentDisplay |
@bb/ui/core: formatEnvironmentDisplay |
Pure helper export. |
app.coreUi.formatPendingInteractionSummary |
@bb/ui/core: formatPendingInteractionSummary |
Pure helper export. |
app.coreUi.formatPendingInteractionUserQuestionOptionLabel |
@bb/ui/core: formatPendingInteractionUserQuestionOptionLabel |
Pure helper export. |
app.coreUi.summarizePendingInteractionRequestedPermissions |
@bb/ui/core: summarizePendingInteractionRequestedPermissions |
Pure helper export. |
app.coreUi.formatPendingInteractionSubjectDetailLines |
@bb/ui/core: formatPendingInteractionSubjectDetailLines |
Pure helper export. |
app.coreUi.formatPendingInteractionApprovalResolutionOutcome |
@bb/ui/core: formatPendingInteractionApprovalResolutionOutcome |
Pure helper export. |
app.coreUi.buildPendingInteractionApprovalResolution |
@bb/ui/core: buildPendingInteractionApprovalResolution |
Pure helper export. |
app.coreUi.describePendingInteractionToolUse |
@bb/ui/core: describePendingInteractionToolUse |
Pure helper export. |
app.coreUi.formatPendingInteractionToolUseDetailLines |
@bb/ui/core: formatPendingInteractionToolUseDetailLines |
Pure helper export. |
app.coreUi.extractErrorMessage |
@bb/ui/core: extractErrorMessage |
Pure helper export. |
app.coreUi.toRecord |
@bb/ui/core: toRecord |
Pure helper export. |
app.coreUi.EnvironmentDisplayInfo |
@bb/ui/core: EnvironmentDisplayInfo |
Pure type export. |
app.coreUi.EnvironmentDisplayHostContext |
@bb/ui/core: EnvironmentDisplayHostContext |
Pure type export. |
app.coreUi.PendingInteractionToolUseAsk |
@bb/ui/core: PendingInteractionToolUseAsk |
Pure type export. |
app.components.experimental_FileLink |
@bb/ui: FileLink |
Canonical name removes the experimental prefix. |
app.components.UrlLink |
@bb/ui: UrlLink |
Shared semantic link export. |
app.components.experimental_SourceCode |
@bb/ui: SourceCode |
Facade; the bb.files renderer surface owns replacement. |
app.components.experimental_Diff |
@bb/ui: Diff |
Facade; the bb.files renderer surface owns replacement. |
app.components.ExperimentalLiveFileTarget |
@bb/ui: LiveFileTarget |
Pure file-link target type. |
app.components.ExperimentalFileLocation |
@bb/ui: FileLocation |
Pure file-link location type. |
app.components.ExperimentalFileOpenOptions |
@bb/ui: FileOpenOptions |
Pure file-link option type. |
app.components.experimental_UrlLink |
@bb/ui: experimental_UrlLink |
Deprecated alias for UrlLink. |
app.components.ExperimentalPermissionModePickerProps |
@bb/ui: PermissionModePickerProps |
The stable controlled props keep provider routing. |
app.components.ExperimentalPermissionModePickerProps.onChange |
PermissionModePickerProps.onChange |
The callback receives the accepted mode. |
app.components.ExperimentalProviderModelPickerProps |
@bb/ui: ProviderModelPickerProps |
The stable controlled props keep provider routing. |
app.components.ExperimentalProviderModelPickerProps.onChange |
ProviderModelPickerProps.onChange |
The callback receives one coherent selection. |
app.components.ExperimentalProviderModelPickerRouting |
@bb/ui: ProviderPickerRouting |
The route identifies a host or environment. |
app.components.ExperimentalProviderModelPickerValue |
@bb/ui: ProviderPickerValue |
The stable value keeps provider, model, reasoning, and tier. |
app.components.experimental_PermissionModePicker |
@bb/ui: PermissionModePicker |
The stable export drops the experimental prefix. |
app.components.experimental_ProviderModelPicker |
@bb/ui: ProviderModelPicker |
The stable export drops the experimental prefix. |
app.contracts.UrlLinkProps |
@bb/ui: UrlLinkProps |
The semantic link keeps standard anchor props and BB URL policy. |
app.coreUi |
@bb/ui/core |
The stable module contains shared display helpers. |