Skip to content

Public component classification

Status: Accepted

Components needs an architecture vocabulary that says what kind of ownership each public component requires. Capability profiles such as Foundation, Advanced React, and Spatial answer a different question: they group subpaths by adoption shape and dependencies. They do not determine whether a component is a leaf, owns interaction behavior, coordinates a larger workflow, or exists only as an adapter.

Without a separate classification, a high-order composition can be mistaken for a replaceable renderer slot, while an element-bounded primitive can inherit unnecessary framework policy. The classification must cover every React component exported by the package’s current public barrels exactly once.

Every public component belongs to exactly one of these architecture categories:

  • Visual primitive — an element-bounded or static leaf. It owns Components markup and styling but does not coordinate a larger workflow or reusable interaction system. Native element behavior does not by itself make a visual primitive an interaction primitive.
  • Interaction primitive — a reusable surface that owns interaction behavior such as overlays, focus, keyboard navigation, selection, picking, or range manipulation. Dialog, Dropdown, DatePickerInput, and Tooltip are representative behavior owners.
  • Arc/high-order composite — an Arc-bound component or a larger composition that coordinates data, state, children, contexts, slots, commands, queries, or several primitives. Declarative marker and provider components belong with the composite whose contract they configure.
  • Interop-only — a component whose sole public purpose is translating between Components and an external renderer or framework contract. It owns no independent Components interaction or workflow contract. This category is empty today; using Pixi internally or delegating behavior to React Aria does not make a component interop-only.

The permanent non-slot composite boundaries are DataTables, Canvas, PivotViewer, SchemaEditor, TimeMachine, Toolbar, ObjectContentEditor, CommandDialog, CommandForm, Notifications, and Chat, together with repository-grounded peers DataPage and ObjectNavigationalBar. Their roots and contract-specific composition pieces remain Components-owned high-order contracts rather than renderer slots.

This classification is intentionally independent of the Foundation, Advanced React, and Spatial capability profiles.

The inventory follows the setup root and every JavaScript component subpath in Source/package.json, including transitive exports from their public barrels. A symbol re-exported by more than one subpath appears once and names both paths.

Public subpathComponentClassification
CommonActionMenubarinteraction primitive
CanvasAnchoredOverlayinteraction primitive
CommandFormAutoCommandFormArc/high-order composite
DisplayAvatarvisual primitive
DisplayBadgevisual primitive
DialogsBusyIndicatorDialogArc/high-order composite
CommonButtonvisual primitive
CommandFormCalendarFieldArc/high-order composite
CanvasCanvasArc/high-order composite
CanvasCanvasControlsArc/high-order composite
CanvasCanvasItemArc/high-order composite
CanvasCanvasMinimapArc/high-order composite
CanvasCanvasOverlayArc/high-order composite
CanvasChatArc/high-order composite
CanvasChatBubbleinteraction primitive
CanvasChatComposerArc/high-order composite
ChatChatConversationArc/high-order composite
ChatChatMessageBodyvisual primitive
CanvasChatMessageBubbleArc/high-order composite
ChatChatSidebarArc/high-order composite
ChatChatSidebarForObservableQueriesArc/high-order composite
ChatChatTopicListArc/high-order composite
CommonCheckboxvisual primitive
CommandFormCheckboxFieldArc/high-order composite
DisplayChipvisual primitive
CommandFormChipsFieldArc/high-order composite
CommandFormColorPickerFieldArc/high-order composite
DataTables and DataPageColumnArc/high-order composite
DataTablesColumnFilterMenuArc/high-order composite
DataPageColumnsArc/high-order composite
CommandDialogCommandDialogArc/high-order composite
CommandDialog and CommandStepperCommandStepperArc/high-order composite
DialogsConfirmationDialogArc/high-order composite
@cratis/components and CommonCratisComponentsProviderArc/high-order composite
DataTablesDataTableCoreArc/high-order composite
DataTablesDataTableForObservableQueryArc/high-order composite
DataTablesDataTableForQueryArc/high-order composite
CommonDatePickerInputinteraction primitive
DialogsDialoginteraction primitive
DropdownDropdowninteraction primitive
CommandFormDropdownFieldArc/high-order composite
CanvasEmojiPickerinteraction primitive
CommonErrorBoundaryArc/high-order composite
TimeMachineEventsViewArc/high-order composite
CanvasFailedReplyArc/high-order composite
FilterFilterEditorArc/high-order composite
FilterFilterPanelArc/high-order composite
CommonFormElementvisual primitive
CommonIconButtonvisual primitive
CommonIconDisplayvisual primitive
CommandFormInputTextFieldArc/high-order composite
CanvasMentionSuggestionsinteraction primitive
DataPageMenuItemArc/high-order composite
DataPageMenuItemsArc/high-order composite
DisplayMessagevisual primitive
CanvasMessageReactionsinteraction primitive
CommandFormMultiSelectFieldArc/high-order composite
CanvasNoteArc/high-order composite
CommandFormNumberFieldArc/high-order composite
ObjectContentEditorObjectContentEditorArc/high-order composite
ObjectNavigationalBarObjectNavigationalBarArc/high-order composite
CommonPageArc/high-order composite
CommandFormPasswordFieldArc/high-order composite
CanvasPersonAvatarCirclevisual primitive
PivotViewerPivotViewerArc/high-order composite
DisplayProgressBarvisual primitive
DisplayProgressSpinnervisual primitive
TimeMachinePropertiesArc/high-order composite
CommonRadiovisual primitive
CommandFormRadioButtonFieldArc/high-order composite
CommandFormRadioGroupFieldArc/high-order composite
FilterRangeHistogramFilterinteraction primitive
CommandFormRatingFieldArc/high-order composite
CanvasReactionPickerinteraction primitive
TimeMachineReadModelViewArc/high-order composite
CanvasRegionArc/high-order composite
SchemaEditorSchemaEditorArc/high-order composite
DisplaySkeletonvisual primitive
CommandFormSliderFieldArc/high-order composite
CommandDialogStepperCommandDialogArc/high-order composite
CommandDialogStepperPanelArc/high-order composite
CommonSurfacevisual primitive
CommonSwitchvisual primitive
DataTablesTablePaginatorArc/high-order composite
DisplayTagvisual primitive
CommonTextAreavisual primitive
CommandFormTextAreaFieldArc/high-order composite
CommonTextInputvisual primitive
TimeMachineTimeMachineArc/high-order composite
NotificationsToasterArc/high-order composite
CommandFormToggleSwitchFieldArc/high-order composite
ToolbarToolbarArc/high-order composite
ToolbarToolbarButtonArc/high-order composite
ToolbarToolbarContextArc/high-order composite
ToolbarToolbarFanOutItemArc/high-order composite
ToolbarToolbarFolderArc/high-order composite
ToolbarToolbarGroupArc/high-order composite
ToolbarToolbarLayoutArc/high-order composite
ToolbarToolbarSectionArc/high-order composite
ToolbarToolbarSeparatorArc/high-order composite
ToolbarToolbarSlotArc/high-order composite
ToolbarToolbarSlotProviderArc/high-order composite
CommonTooltipinteraction primitive
CanvasTypingIndicatorvisual primitive

The accepted inventory contains 21 visual primitives, 12 interaction primitives, 71 Arc/high-order composites, and no interop-only components.

Exported types and interfaces, helpers and hooks, events and messages, enum and configuration values, registries, and React context values are not components and are excluded. Examples include CanvasItemRegistryContext, DialogInitialFocus, ChatMessageAdded, NoteTextChanged, toast, useFilterState, and the *Props, event, label, parts, and model types.

Visual and interaction primitives can evolve behind Components-owned markup and types, but classification does not authorize leaking an internal renderer’s types or DOM.

High-order composites remain owned compositions. Their declarative markers, providers, table state, Arc bindings, and nested workflow contracts are not treated as generic renderer slots merely because they contain lower-level primitives.

The inventory must change whenever a public barrel adds, removes, or renames a component. A new export must be assigned once; non-component exports remain explicitly outside the inventory.

Classification does not indicate maturity, accessibility conformance, support tier, performance tier, or capability profile.