Tessera Public API Inventory
Purpose
This document tracks the public API tiers so the public alpha surface stays deliberate.
Freeze Status
The current working freeze line is:
- Tier 1 is the supported default consumer path
- Tier 2 is the supported advanced escape-hatch path
- anything outside those tiers is still a candidate for internalization or deletion before stable release
Examples, README guidance, and starter docs should teach Tier 1 first. Tier 2 may remain public, but it should not be the default onboarding story.
Tier 1: Default Consumer Path
These are the types new applications should discover first.
TesseraTesseraAppTesseraApplicationTesseraApplicationBuilderTesseraRuntimeOptionsTesseraEffectTesseraEffectsTesseraEffects.Periodic(...)for auto-rescheduling interval updatesMessageand the typed message records inTesseraTessera.Styles.TesseraStyleTessera.Styles.AnsiColorTessera.Styles.TesseraFontWeightTessera.Styles.TesseraThemeOverrideBundleTessera.Styles.TesseraThemeOverrideBundleExtensionsScreenScreenContextScreenOptionsScreen.Build(...)Tessera.Layout.*object-model typesTessera.Controls.ButtonTessera.Controls.BreadcrumbTessera.Controls.LabelTessera.Controls.BadgeTessera.Controls.BadgeToneTessera.Controls.AccordionTessera.Controls.AccordionSectionTessera.Controls.TextInputTessera.Controls.TextAreaTessera.Controls.ChoiceTessera.Controls.ComboBoxTessera.Controls.DropdownGlyphSetTessera.Controls.CommandPaletteTessera.Controls.CommandPaletteItemTessera.Controls.CommandPaletteGlyphSetTessera.Controls.DialogTessera.Controls.DialogResultTessera.Controls.DialogClosedEventArgsTessera.Controls.ContextMenuTessera.Controls.ContextMenuItemTessera.Controls.ContextMenuGlyphSetTessera.Controls.ProgressBarTessera.Controls.BarPointTessera.Controls.BarChartTessera.Controls.LineChartTessera.Controls.SparklineTessera.Controls.TelemetryChartTessera.Controls.TelemetryChartOptionsTessera.Controls.TelemetryChartRenderModeTessera.Controls.AreaPlotTessera.Controls.ScatterPlotPointTessera.Controls.ScatterPlotTessera.Controls.HistogramBucketTessera.Controls.HistogramTessera.Controls.LineSeriesTessera.Controls.LinePlotTessera.Controls.PlotPanelTessera.Controls.BulletChartTessera.Controls.BulletRangeTessera.Controls.BulletRangeKindTessera.Controls.DashboardGridTessera.Controls.DashboardTileTessera.Controls.QuickOpenOverlayTessera.Controls.QuickOpenItemTessera.Controls.QuickOpenOverlayGlyphSetTessera.Controls.QuickOpenOverlaySubmittedEventArgsTessera.Controls.ResizablePaneGroupTessera.Controls.PaneSpecTessera.Controls.SideNavRailTessera.Controls.NavItemTessera.Controls.SideNavRailGlyphSetTessera.Controls.SideNavRailSelectionChangedEventArgsTessera.Controls.SideNavRailActivatedEventArgsTessera.Controls.TokenEditorTessera.Controls.TokenItemTessera.Controls.TokenEditorGlyphSetTessera.Controls.TokenEditorSelectionChangedEventArgsTessera.Controls.HealthBoardTessera.Controls.HealthServiceTessera.Controls.HealthServiceSeverityTessera.Controls.HealthBoardGlyphSetTessera.Controls.JumpListTessera.Controls.JumpListItemTessera.Controls.JumpListGlyphSetTessera.Controls.JumpListActivatedEventArgsTessera.Controls.AutocompleteInputTessera.Controls.AutocompleteInputGlyphSetTessera.Controls.AutocompleteInputSuggestionCommittedEventArgsTessera.Controls.BoxPlotTessera.Controls.BoxPlotSeriesTessera.Controls.GaugeTessera.Controls.MiniLogTessera.Controls.StatItemTessera.Controls.StatsCardTessera.Controls.NumberInputTessera.Controls.DatePickerTessera.Controls.TimePickerTessera.Controls.MarkdownViewTessera.Controls.MultiSelectTessera.Controls.PaginatorTessera.Controls.RadioGroupTessera.Controls.LogViewTessera.Controls.ModalTessera.Controls.Notifications(primary notification feed API)Tessera.Controls.ToggleTessera.Controls.SliderTessera.Controls.SpinnerTessera.Controls.StatusBarTessera.Controls.TabsTessera.Controls.ListView<T>Tessera.Controls.VirtualizedListView<T>Tessera.Controls.VirtualizedListViewOptionsTessera.Controls.GroupedListView<TGroup,TItem>Tessera.Controls.GroupedListViewGroup<TGroup,TItem>Tessera.Controls.GroupedListSelectionChangedEventArgs<TGroup,TItem>Tessera.Controls.TableTessera.Controls.KanbanBoardTessera.Controls.KanbanLaneTessera.Controls.KanbanCardTessera.Controls.KanbanSelectionChangedEventArgsTessera.Controls.TagInputTessera.Controls.CalendarMonthViewTessera.Controls.CalendarDayCellTessera.Controls.CalendarDateSelectedEventArgsTessera.Controls.SchedulerTimelineTessera.Controls.SchedulerEntryTessera.Controls.SchedulerSelectionChangedEventArgsTessera.Controls.PivotTableTessera.Controls.PivotTableColumnTessera.Controls.PivotTableCellTessera.Controls.PivotSortDirectionTessera.Controls.PivotSortRequestedEventArgsTessera.Controls.QueryBuilderTessera.Controls.QueryGroupTessera.Controls.QueryRuleTessera.Controls.QueryOperatorTessera.Controls.QueryChangedEventArgsTessera.Controls.RichTextViewTessera.Controls.RichTextSegmentTessera.Controls.RichTextStyleKindTessera.Controls.JsonTreeViewTessera.Controls.JsonTreeNodeTessera.Controls.JsonTreeNodeKindTessera.Controls.JsonTreeSelectionChangedEventArgsTessera.Controls.TraceViewerTessera.Controls.TraceEntryTessera.Controls.TraceSelectionChangedEventArgsTessera.Controls.CommandOutputTessera.Controls.CommandOutputLineTessera.Controls.CommandOutputChannelTessera.Controls.LogTailPanelTessera.Controls.LogEntryTessera.Controls.LogLevelTessera.Controls.TaskRunnerPanelTessera.Controls.TaskRunItemTessera.Controls.TaskRunnerSelectionChangedEventArgsTessera.Controls.DockWorkspaceTessera.Controls.DockPaneTessera.Controls.DockPanePositionTessera.Controls.PaneTabsTessera.Controls.PaneTabItemTessera.Controls.PaneTabSelectionChangedEventArgsTessera.Controls.PaletteEditorTessera.Controls.PaletteSwatchTessera.Controls.PaletteSelectionChangedEventArgsTessera.Controls.HeatmapTessera.Controls.HeatmapCellTessera.Controls.HeatmapLegendTessera.Controls.TreeMapChartTessera.Controls.TreeMapNodeTessera.Controls.TerminalPanelTessera.Controls.TerminalPanelLineTessera.Controls.TerminalPanelChannelTessera.Controls.ProcessListViewTessera.Controls.ProcessListEntryTessera.Controls.ProcessListStatusTessera.Controls.ProcessListSelectionChangedEventArgsTessera.Controls.ActivityFeedTessera.Controls.ActivityFeedItemTessera.Controls.ActivityFeedItemKindTessera.Controls.InboxItemTessera.Controls.KeyBindingHelpDialogTessera.Controls.KeyBindingItemTessera.Controls.DataGridTessera.Controls.TreeTableTessera.Controls.KeyValueListTessera.Controls.TimelineTessera.Controls.StepperTessera.Controls.TreeItemTessera.Controls.TreeView(native)Tessera.Controls.TreeViewGlyphSetTessera.Controls.MenuBarTessera.Controls.MenuBarGlyphSetTessera.Controls.ToolbarTessera.Controls.CommandBarTessera.Controls.SearchBoxTessera.Controls.SearchResultsViewTessera.Controls.SearchResultsGlyphSetTessera.Controls.FormTessera.Controls.FormFieldTessera.Controls.DataForm<TModel>Tessera.Controls.DataFormField<TModel>Tessera.Controls.DataFormSelectionChangedEventArgs<TModel>Tessera.Controls.DataFormFieldCommittedEventArgs<TModel>Tessera.Controls.FieldSetTessera.Controls.SplitViewTessera.Controls.SplitViewOrientationTessera.Controls.InspectorPanelTessera.Controls.InspectorSectionTessera.Controls.InspectorFieldTessera.Controls.WizardTessera.Controls.WizardStepTessera.Controls.WizardStepChangedEventArgsTessera.Controls.EmptyStateTessera.Controls.ValidationSummaryTessera.Controls.DiffViewTessera.Controls.PropertyGridTessera.Controls.FileExplorerTessera.Controls.FuzzyFinderTessera.Controls.ToastCenterTessera.Controls.MenuItemTessera.Controls.Control
The intended beginner path is:
- build an app by deriving from
TesseraApp - run it with the minimal startup lane (
TesseraApplication.RunAsync(new App())) or configured startup lane (TesseraApplication.CreateBuilder().UseApp<TApp>().ConfigureRuntime(...).Build()) - rely on automatic control routing;
Update(...)handles only unhandled input plus runtime messages - return
ScreenfromBuild(ScreenContext) - assemble screens with
Screen.Build(...)and shallow builder callbacks - keep configuration in
TesseraRuntimeOptionsandScreenOptions - follow the public onboarding path in getting-started, starting with
HelloWorld,CounterForm, andWorkspaceAppin examples before the flagship showcases in showcase - treat
Tessera.Corenamespaces as the low-level advanced lane (inside theTesserapackage), while keeping onboarding centered on primaryTesseranamespaces - use semantic theme tokens and palette-driven styling on the default path
Pointer Runtime Semantics (Tier 1)
PointerActivationPolicycontrols click activation gating:DoubleClick(default): first press transfers focus, activation requires a qualifying second press.SingleClick: first press focuses and activates.
- hover (
PointerEventKind.Motion) is visual-only and should not be treated as click activation. - pointer terminal transport is independent from policy:
- policy controls activation semantics.
ScreenOptions.MouseTrackingcontrols requested terminal mouse reporting mode.
Runtime input-path contract:
- runtime keeps terminal byte-stream decoding when capabilities advertise CSI input features (
MouseReporting,FocusReporting,BracketedPaste, orModeReports), including non-raw console mode. Console.ReadKeyfallback is reserved for non-raw legacy terminals without CSI input features.
Terminal prerequisites and troubleshooting:
- CSI-capable terminals (Ghostty, iTerm2, Windows Terminal, macOS Terminal) should run through byte-stream decoding for pointer/focus/paste.
- verify app requests mouse reporting (
runtime.Screen.MouseTracking = CellMotion|AllMotion). - verify
DisableInputis false. - verify
TESSERA_CAPSis not disabling mouse (mouse=0). - if using tmux, enable
set -g mouse on. - if terminal text selection appears instead of app pointer behavior, run through the checklist above first.
Notification Surface Guidance (Tier 1)
- primary onboarding path:
Tessera.Controls.Notifications - advanced/devops path:
Tessera.Controls.NotificationInbox(Tier 2) - shared item model:
Tessera.Controls.InboxItem
Current Notifications primary API surface:
ItemsSelectedIndexSelectedItemSelectionChangedSetItems(IEnumerable<InboxItem>)Add(InboxItem)SetSelectedIndex(int)Select(int)(compatibility wrapper)MarkAllRead()RemoveSelected()Push(...)remains supported and forwards toAdd(...)
Selection Naming Policy (Tier 1)
Canonical selection naming for docs/examples is Selected*:
SelectedIndexSelectedItem(or domain-specificSelectedNode,SelectedProperty, etc.)SelectionChanged
Compatibility names such as Current* remain supported in V1 where already present, but they are compatibility aliases only. New docs, examples, and additive APIs should use Selected* names.
Selection Ergonomics Additions (Tier 1)
Additive selection APIs now available on the default path:
Table.SetSelectedIndex(int)Choice.SetSelectedIndex(int)Choice.TrySetSelectedItem(string)ComboBox.SetSelectedIndex(int)ComboBox.TrySetSelectedItem(string)DataForm<TModel>.SelectField(string key)DataForm<TModel>uses explicit edit mode on the default path: row selection first,Enterto edit,Enterto commit,Escto cancel, and failed commits render a dedicated validation line inside the widgetDataForm<TModel>.BeginEdit()DataForm<TModel>.CancelEdit()DataForm<TModel>.IsEditing
These close the consumer proof-loop selection pressure without breaking existing APIs.
DataForm<TModel> now defaults to selection-first interaction: row selection does not mutate values, Enter enters edit mode, Enter commits, Esc cancels, and validation failure remains visible inside the control.
Tier 2: Advanced But Supported
These APIs remain public because they still offer real value, but they should not dominate the default path.
Tessera.Hosting.TesseraHostingOptionsTessera.Hosting.TesseraHost.CreateApplication(...)Tessera.Hosting.TesseraHost.RunAsync(...)Tessera.Hosting.IProgramRendererTessera.Hosting.RenderOutputTessera.Hosting.AnsiRendererOptionsTessera.Hosting.AnsiDiffRendererTessera.Hosting.NullRendererTessera.Hosting.ITerminalAdapterTessera.Hosting.TerminalSizeTessera.Hosting.TerminalCapabilityProfileTessera.Hosting.TerminalColorProfileTessera.Hosting.ConsoleTerminalAdapterTessera.Hosting.TerminalCapabilityDetectorTessera.Hosting.TerminalColorProfileDetectorTessera.Hosting.IEventDecoderTessera.Hosting.EventDecodeResultTessera.Hosting.EventDecoderTessera.Hosting.TerminalCursorStyleTessera.Controls.NotificationInbox(advanced dev/ops inbox workflow)Tessera.Controls.BarChartOptionsTessera.Controls.LineChartOptionsTessera.Controls.LinePlotOptionsTessera.Controls.LinePlotRenderModeTessera.Controls.PlotPanelOptionsICanvasComponentas a render-only advanced seam- renderer, terminal, and capability-probing seams
Most of these types are now marked EditorBrowsable(Advanced).
Tier 3: Candidates For Further Narrowing
These areas still expose more mechanism than the long-term public design should:
- low-level widget models leaking through component configuration
- runtime seams that most apps never need
- duplicate terminology between root app types and older core/runtime types
- the remaining advanced component namespaces that still expose an alternate engine-shaped control story
- lower-level runtime/input helpers that still live deeper than the preferred Tessera-owned hosting surface
- overlap between the
Tesseradefault surface andTessera.Coreadvanced namespaces when boundaries are not documented clearly
Current Direction
Tessera is shifting from:
InteractiveScreenModelInputRouter
to:
TesseraApplication.RunAsync(...)TesseraApplicationBuilderTesseraAppScreenScreenContextTesseraRuntimeOptionsWindowLayout,RowLayout,ColumnLayout,PanelLayout,CenterLayout,LayoutSlot- root
Tessera.Controlswrappers
The old TesseraHost.CreateProgram(...) / TesseraProgramOptions / IScreen program-hosting path has been removed.
The old ScreenComposer composition bridge has been removed. The previous static layout helper DSL is internal-only, and root layouts now compile through the scene compiler/runtime loop.
The first root controls that already own their implementation directly are:
LabelButton- label chrome can be customized with
LabelPrefixandLabelSuffix - defaults to plain label chrome plus built-in symmetric horizontal breathing room
- padded button body can be styled via
SurfaceStyle,FocusedSurfaceStyle, andPressedSurfaceStyle - label styles are text-only; body/background semantics belong to button surface styles
- surface styling is expected to cover the whole allocated button box, including padding, not only the post-padding content rect
- measurement must account for the widest rendered line across label and description
- label chrome can be customized with
TextInputTextAreaBreadcrumbChoiceComboBoxContextMenuCommandPaletteDialogProgressBarLogViewBadgeSliderSpinnerToggleNumberInputDatePickerTimePickerMarkdownViewModalAccordionRadioGroupMultiSelectGaugeMiniLogStatsCardBarChartLineChartSparklineAreaPlotScatterPlotHistogramLinePlotPlotPanelListView<T>VirtualizedListView<T>GroupedListView<TGroup,TItem>TabsDataGridTreeTableKanbanBoardTagInputCalendarMonthViewSchedulerTimelinePivotTableQueryBuilderRichTextViewKeyValueListTimelineStepperDockWorkspacePaneTabsPaletteEditorHeatmapTreeMapChartTerminalPanelProcessListViewDashboardGridQuickOpenOverlayBulletChartResizablePaneGroupSideNavRailTokenEditorHealthBoardJumpListAutocompleteInputBoxPlotMenuBarToolbarCommandBarStatusBarPaginatorSearchBoxSearchResultsViewFormDataForm<TModel>FieldSetSplitViewInspectorPanelWizardDiffViewPropertyGridFileExplorerFuzzyFinderToastCenter
Their old Tessera.Components.Prebuilt.* counterparts have been removed instead of kept as compatibility wrappers.
Design Constraints
- normal apps should stay in
Tessera - normal apps usually start with primary
Tesseranamespaces, then addTessera.Core.*namespaces only when advanced runtime control is needed - normal apps should not manage terminal size manually
- normal apps should not manage input scopes or region routing manually
- custom widgets should remain possible through a small stable contract
Theme Mapping Status
Current shipped theme mapping is centralized in Tessera.Styles.TesseraThemeControlExtensions and split into domain partial files (Basic, InputValue, Navigation, NavigationOverlay, NavigationPrimitives, DataAndFlow, PlanningAndBoards, QueryAndRichText, ExplorerAndFeedback, RenderingTextUtilities, ModalAndCharts, Plotting, DevOpsAndWorkflows, Workspace, FormsAndShell).
Overlay glyph cookbook snippets for MenuBarGlyphSet, ContextMenuGlyphSet, and CommandPaletteGlyphSet are documented in theme-system.
Border override, dropdown/tree glyph-set, and data marker/separator cookbook snippets are documented in theme-system.
Wave 2 query/analytics controls (PivotTable, QueryBuilder, RichTextView) are mapped with the same semantic-token and border-style contract.
Wave 3 dev/ops controls (JsonTreeView, CommandOutput, LogTailPanel, ActivityFeed, NotificationInbox, KeyBindingHelpDialog) are mapped with the same semantic-token contract. For onboarding/default app flows, use Notifications; treat NotificationInbox as advanced dev/ops surface.
Wave 4 batch A + B controls (DockWorkspace, PaneTabs, PaletteEditor, Heatmap, TreeMapChart, TerminalPanel, ProcessListView) are integrated and mapped in TesseraThemeControlExtensions.Workspace.cs.
Wave 1 app-shell/forms controls (Form, FieldSet, DataForm<TModel>, Wizard, SplitView, InspectorPanel) are integrated and mapped in TesseraThemeControlExtensions.FormsAndShell.cs.
Expansion tranche controls (DashboardGrid, QuickOpenOverlay, BulletChart, ResizablePaneGroup, SideNavRail, TokenEditor, HealthBoard, JumpList, AutocompleteInput, BoxPlot) are implemented with dedicated tests; theme extension mapping is wired for all of them across TesseraThemeControlExtensions.DashboardMetrics.cs, TesseraThemeControlExtensions.FormsAndShell.cs, TesseraThemeControlExtensions.Navigation.cs, TesseraThemeControlExtensions.NavigationOverlay.cs, TesseraThemeControlExtensions.PlanningAndBoards.cs, and TesseraThemeControlExtensions.Plotting.cs (commit evidence: 4e005ed, 1c1b748, 03c7a43, db63e01).
Reusable consumer-level override helpers are available via TesseraThemeOverrideBundle.CreateDashboardBundle(...) and ApplyThemeAndDashboardOverrides(...) extensions for ListView<T>, Table, Notifications, LogView, Button, and Dialog.
State-Style Naming Matrix (Tier 1 Consumer Quick Lookup)
Use this matrix to find the expected public hook names quickly when customizing focus/selection/hover/border behavior on the no-DI default path.
| Control family | Focus hooks | Selected hooks | Hovered hooks | Border hooks |
|---|---|---|---|---|
Text and query inputs (TextInput, TextArea, SearchBox, NumberInput, DatePicker, TimePicker) | FocusMarker, ShowFocusMarker, TitleStyle, FocusedTitleStyle | Selected* where control-specific (for example result rows in SearchResultsView) | Hovered* where control-specific | BorderStyleText, FocusedBorderStyleText |
List and tree navigation (ListView<T>, TreeView, Choice, ComboBox, SearchResultsView) | FocusMarker, ShowFocusMarker, TitleStyle, FocusedTitleStyle | SelectedIndex, SelectedItem, Selected*Style | Hovered*Style | BorderStyleText, FocusedBorderStyleText |
Data surfaces (Table, DataGrid, TreeTable, KeyValueList, Timeline) | FocusMarker, ShowFocusMarker, focused title styles where supported | Selected*Marker and/or Selected*Style | Hovered*Style where supported | BorderStyleText, FocusedBorderStyleText |
Forms and validation (Form, FieldSet, DataForm<TModel>, Wizard, ValidationSummary) | FocusMarker, ShowFocusMarker, FocusedTitleStyle | Selected*Style or active-step styles | Hovered*Style where supported | BorderStyleText, FocusedBorderStyleText |
Menus and overlays (MenuBar, ContextMenu, CommandPalette, Notifications) | FocusMarker, ShowFocusMarker, focused title styles where supported | selected-item style/marker hooks per control | hovered-item style/marker hooks per control | BorderStyleText, FocusedBorderStyleText |
Marker/glyph note:
- symbolic affordances remain explicit and typed (
DropdownGlyphSet,TreeViewGlyphSet,MenuBarGlyphSet,ContextMenuGlyphSet,CommandPaletteGlyphSet,SearchResultsGlyphSet) Focus.Markertoken is first-class in theme docs and should be mapped through marker-capable controls instead of hardcoded marker styling
Plotting Authoring Guidance (Tier 1)
Plotting/dashboard controls on the default app path:
- single-metric trend:
SparklineorAreaPlot - multi-metric trend:
LinePlot+LineSeries - correlation analysis:
ScatterPlot - distribution analysis:
Histogram - dashboard composition:
PlotPanel - dense telemetry cards:
LinePlotOptions.RenderMode = Compact
Operational pattern:
- stream with bounded buffers
- reuse long-lived controls/series and mutate data in place
- apply theme defaults first, then control-instance overrides for title, border, legend, stats, axis, and data emphasis
Planned reference sample: examples/PlottingDashboard (once available).
Typography Capability Status
- Portable typography lane:
TesseraStyle.WithFontWeight(TesseraFontWeight)for ANSI SGR emphasis intent (normal/bold/dim), not real font engine control. - Terminal request lanes:
ScreenOptions.FontSpec(legacy/explicit raw request).ScreenOptions.FontFamily+ScreenOptions.FontSize(structured request).ScreenOptions.Iterm2Profile(iTerm2 profile switch request).
- Capability gating:
- OSC 50 requests are emitted only when
SupportsOsc50FontRequestsis true. - iTerm2 profile requests are emitted only when
SupportsIterm2ProfileRequestsis true.
- OSC 50 requests are emitted only when
- Preference rule: if iTerm2 profile switching is supported and
Iterm2Profileis set, renderer prefers profile switching over OSC 50 font requests. - Explicit caveat: all font requests are best-effort and terminal-dependent.
- Terminal matrix: terminal-font-capability-matrix.
Usage guidance (default path):
runtime.Screen = new ScreenOptions
{
FontSpec = "JetBrains Mono 13", // legacy/raw
FontFamily = "JetBrains Mono", // structured
FontSize = 13,
Iterm2Profile = "Tessera",
};Support matrix (Tessera V1 contract):
- sequence emission: capability-gated (
SupportsOsc50FontRequests/SupportsIterm2ProfileRequests) - sanitization:
BEL,ESC,\, and control chars are stripped before emission - preference: iTerm2 profile lane wins when supported and requested
- reset/restore previous font: no (intentionally avoids unsafe assumptions)
Bordered control parity policy:
- any public control with bordered frame rendering must expose
BorderStyleTextandFocusedBorderStyleText - each bordered control must have
ApplyTheme/ApplyThemeDefaultstoken mapping in the correspondingTesseraThemeControlExtensionsdomain file - parity is enforced through theme mapping tests plus visual edge-case assertions before merge
Basic controls with direct token mappings:
Label,Button,ListView<T>,StatusBar,TextInput,Table,TabsButtonmapsSurfaceStyle->Surface.Panel,FocusedSurfaceStyle->Surface.Panel, andPressedSurfaceStyle->Selection.BackgroundTextInputandTablemapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Input/value controls with direct token mappings:
TextInput,TextArea,Toggle,Slider,Spinner,ProgressBar,NumberInput,DatePicker,TimePickerTextInputmaps value/placeholder/focused-title styling; focus title marker is configurable throughFocusMarker+ShowFocusMarkerSpinnerexposesFramesandSetFrames(...)for runtime spinner-family swaps without replacing the control instanceToggle,Slider,Spinner, andProgressBarmapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderTextArea,NumberInput,DatePicker, andTimePickermapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Navigation controls with direct token mappings:
Breadcrumb,Paginator,Toolbar,CommandBar,SearchBox,SearchResultsViewSearchBoxmaps title/value/placeholder/match/navigation styles plus border text hooks; title focus marker is configurable throughFocusMarker+ShowFocusMarkerSearchResultsViewmaps title, row-state, and border text hooks; marker customization is explicit throughSearchResultsGlyphSet
Form/shell controls with direct token mappings:
Form,FieldSet,DataForm<TModel>,Wizard,SplitView,InspectorPanel- these controls map
BorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Navigation/overlay controls with direct token mappings:
Choice,ComboBox,TreeView,MenuBar,ContextMenu,CommandPalette,Notifications,SearchBoxChoice/ComboBoxmapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderChoice/ComboBoxkeep glyph customization explicit throughDropdownGlyphSetTreeViewmapsBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderTreeViewkeeps title focus marker rendering configurable throughFocusMarker+ShowFocusMarkerand glyph customization throughTreeViewGlyphSetMenuBar,ContextMenu, andCommandPalettemap border text hooks to border/focus tokensMenuBar,ContextMenu, andCommandPaletteexpose typed glyph configuration throughMenuBarGlyphSet,ContextMenuGlyphSet, andCommandPaletteGlyphSetNotificationsmapsBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderContextMenupreserves focused title markers in bordered rendering width calculations
Navigation primitive controls with direct token mappings:
Accordion,MultiSelect,RadioGroup
Data/flow controls with direct token mappings:
DataGrid,TreeTable,KeyValueList,Timeline,StepperDataGridmapsBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderDataGridprovides API-level text hooks forColumnSeparatorText,SortAscendingMarker, andSortDescendingMarkerTreeTablemapsBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.BorderTreeTableprovides API-level text hooks forColumnSeparatorText, row markers, and branch/leaf markersKeyValueListandTimelinemapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Explorer/feedback controls with direct token mappings:
DiffView,PropertyGrid,FileExplorer,FuzzyFinder,ToastCenterDiffView,PropertyGrid,FileExplorer,FuzzyFinder, andToastCentermapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Dev/ops workflow controls with direct token mappings:
JsonTreeView,CommandOutput,LogTailPanel,ActivityFeed,NotificationInbox,KeyBindingHelpDialogJsonTreeView,CommandOutput,LogTailPanel, andActivityFeedmapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Workspace/visual-data controls with direct token mappings:
DockWorkspace,PaneTabs,PaletteEditor,Heatmap,TreeMapChart,TerminalPanel,ProcessListView- bordered controls in this set (
DockWorkspace,PaneTabs,Heatmap,TreeMapChart,ProcessListView) mapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Rendering text utility controls with direct token mappings:
Badge,LogView,MarkdownView,MiniLogLogViewandMarkdownViewmapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Modal/chart summary controls with direct token mappings:
Dialog,Modal,BarChart,LineChart,Gauge,StatsCardDialogandModalmapBorderStyleText->Border.DefaultandFocusedBorderStyleText->Border.Focused + Focus.Border
Follow-up Targets
- keep moving control authoring toward a single obvious configuration style
- review Tier 2 periodically and internalize anything that is public only by inertia
- keep
Tessera.Coreas the intentional low-level namespace lane (shipped inTessera) and keep docs/examples explicit about when app authors should stay on the primaryTesserapath - keep custom widget extensibility stable while internal runtime details continue to shrink and stay behind Tessera-owned internal adapters
- preserve discoverability and parity policy tests (for example
BorderedControlParityPolicyTests.cs) so new bordered controls cannot drift from required hook/mapping coverage - keep V1 image scope out of the V1 default path docs (image rendering planned for V1.1)