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"

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?.

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

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.