Private_Private_OptionalactiveIf present, an animation currently targeting this view (or its subviews).
IHosannaView
OptionalaudioThis hint can be used in conjunction with the audio guide item
OptionalaudioIndicates whether the element can receive focus.
These are the children that are rendered on screen in the tree structure of the view
Indicdates whether the view is a focus group which means it can have a focused child Otherwise it will be focused itself
OptionalcustomOptionalfocusedIndicates whether the element is currently focused.
If true, this view has been presented in an AggregateViewController
PrivateisTrue while reconcileChildren is swapping this view's children. Focus recovery for a removed focused child is deferred until the swap completes — restoring mid-reconcile cannot resolve getInitialFocusId because the replacement views are not mounted yet.
PrivateisAutomatic keyboard avoidance opt-out. When a software keyboard appears, the framework translates the visible screen to keep the editing input in view; set 'none' on the screen or the input to disable. Plain field (not reactive) — checked at keyboard-show time.
OptionalparentPrivatependingSet when a focused child was removed mid-reconcile; consumed at reconcile end.
PrivatereleasedTracks structs released this inflate batch to prevent double-release when same struct appears twice (e.g. pool corruption). Uses Record for efficiency (avoids Set allocation, faster lookups on Roku).
These are the children that were created in getViews, in a flat strcuture - it contains EVERYTHING that we declared.
The IHosannaView subclass that created us in getViews
Indicates whether the navigatable entity is visible.
Children
OptionalmountTarget: IHosannaView<ViewState>View Creation
Convenience: animate logical properties across this view's subtree.
Animation specification mapping view IDs to their target property values
Animation duration in milliseconds
OptionalonCompleted: () => voidOptional callback invoked when animation completes
Optionaloptions: Partial<AnimationOptions>Extra animation options; duration and useCurrentState here are ignored (see HosannaViewAnimator.animateViews).
PrivateapplyApplies a resolved child id: setFocus when in the focus chain, else stores focusedChildId.
OptionalnextState: TPrivatebuildBuilds the view and attaches it to the view owner.
OptionalmountTarget: IHosannaView<ViewState>The target to mount the view.
The built view or undefined.
PrivatecalculateOptionaloptions: IScreenDismissOptionsOptionalargs: Record<string, unknown>OptionalcancellationToken: HsCancellationTokenOptionaltaskId: stringAsync Support
Optionalargs: Record<string, unknown>Optionalcallback: AsyncCommandEventCallbackOptionaltaskId: stringPrivateenablePrivatefindResolves the next focusable element in the given direction.
The event containing details about the focus transition.
The next focusable element, or undefined if none exists.
Default animation provider mapping for simple properties. By default, maps 'opacity' to the base renderer's 'opacity' field. Views can override to provide richer mappings.
Audio guide support
Measurement
PrivategetRendererers
PrivategetHibernates the view and its subviews by releasing native renderers and setting the view phase to Hibernating.
The view to be added as a subview.
index of the child in the parent view, -1 means add to end
PrivateisPrivateisFocus
PrivatemountPrefer BaseView.onDidAppearInAggregateView / BaseView.onDidReappearInAggregateView when shown via an aggregate transition. The framework still invokes this for other paths until migrated.
Called when this view becomes the visible top again after having been covered by another screen on the same NavController (same transition finish as onAppear, immediately after it).
Prefer overriding onDidReappearInAggregateView; default implementation chains from it.
DO NOT CALL THIS METHOD DIRECTLY DO NOT OVERRIDE IT
Called after the navigatable entity has been added to an aggregate view.
The aggregate view to which the entity has been added.
Called when this view becomes the visible top of its owning NavController stack for the first time (after onDidAddToAggregateView). Default implementation delegates to onAppear and onFirstAppear.
The aggregate view (e.g. NavController) whose transition finished.
Called when this view becomes the visible top again after having been covered by another screen on the same NavController. Default implementation delegates to onAppear and onAppearAgain.
The aggregate view (e.g. NavController) whose transition finished.
Called after the navigatable entity has been removed from an aggregate view.
The aggregate view from which the entity has been removed.
Prefer BaseView.onDisappearFromAggregateView when leaving an aggregate context during a transition. The framework still invokes this for other paths until migrated.
Called when this view is hidden during an aggregate transition or via BaseAggregateView.hideView.
Default implementation delegates to onDisappear.
The aggregate view from which this view is disappearing.
Called when this view becomes the visible top of a NavController stack for the first time for that controller (same transition finish as onAppear, immediately after it).
Prefer overriding onDidAppearInAggregateView; default implementation chains from it.
DO NOT CALL THIS METHOD DIRECTLY DO NOT OVERRIDE IT
Called before the navigatable entity is added to an aggregate view.
The aggregate view to which the entity will be added.
This method is called before applying state changes to the view. It is used to perform any necessary preparations before the state changes are applied.
Called before the navigatable entity is removed from an aggregate view.
The aggregate view from which the entity will be removed.
Called by InstancePool.get() before a pooled instance is handed out. Restores the view to a construction-equivalent state so that stale lifecycle data (focus, viewStatus, old text, dirty flags, etc.) from the previous owner does not bleed into the new one.
Class-default
values (captured on first construction into the
InstancePool per-class-name registry) are placed into pendingState
with state left empty — matching a freshly-constructed view. This guarantees that every subsequent
setField call (in applyInitialState) detects a difference
against the empty state and pushes the value into pendingState,
so applyLayoutStateToNativeRenderer applies ALL layout props
(opacity, visible, translation, …) to the newly-acquired renderer
even when the logical value equals the class default.
Presents a new screen in the navigation stack or as a dialog.
The screen to be presented, represented by a ViewStruct<ViewState>.
Optionaloptions: IScreenPresentationOptionsOptional presentation options.
If true, the screen will be presented as a dialog.
If true, the screen transition will be animated.
PrivateprintPrints out view type and id of each struct in the nextViewStructs array.
PrivatereleaseReleases a struct to the pool once per inflate batch. Prevents double-release when same struct appears twice (id collision).
Sets which direct child this composite prefers on the next focus cascade, or moves focus to that child if this view is already in the focus chain.
First / Last: first or last direct child in children order with canReceiveFocus && visible.Default: clears focusedChildId only (next cascade uses getInitialFocusId()); does not call setFocus.Specific: same behavior as setFocusedSubview for a known child id.OptionalchildId: stringPrivateresolveFirst direct child id in layout order that can receive focus and is visible.
PrivateresolveAfter removing the child that was at oldIndex, returns the splice index for the replacement so ordering
matches insertChild(..., requestedIndex) on the pre-removal children array (buildView / insert-before-after).
requestedIndex === -1 keeps the replaced slot (same z-order position as the removed child).
PrivateresolveLast direct child id in layout order that can receive focus and is visible.
Changes the visual z-order of a child by moving it to a new index. Higher indices render on top. Updates both the children array and the renderer. Requires removeChild before insertChild because the SG node's insertChild always adds (splices in) and does not move; calling it on an already-present child would duplicate.
Navigatable View
Wakes up the view and its subviews by reserving native renderers and setting the view phase to Mounted.
The
BaseViewclass is a generic class that represents a base view in the Hosanna UI framework. It provides a foundation for creating custom views by managing state, layout, and rendering.It implements several interfaces including
IFocusable,ILayoutable,IHosannaViewThis class manages the state and layout of a view, handles focus and key events, and supports rendering and updating the view. It maintains parent-child relationships for both the view tree and on-screen rendering. The class also provides methods for setting and applying state changes, laying out children, inflating view structures, and reconciling children based on the next view structures.
The
BaseViewclass uses decorators for dependency injection and state management, and it interacts with theViewManagerandViewBuilderfor managing and building views. It also supports debug information retrieval and navigation support.