Namespace Velvet
Namespaces
Classes
- AnchoredSettings
The 3D Transform an Anchored element's screen position tracks, plus the camera whose projection drives it (null resolves to UnityEngine.Camera.main on every tick, so a scene's active camera can change without a settings update), a pixel offset applied after projection, an opt-in physics occlusion test, and an opt-in camera-distance scale factor. The constructor fail-fasts on a non-positive or NaN DistanceFactor so every construction path (the factory, wrapper hosts, direct construction) shares one guard; a
withexpression bypasses it like any record init.
- AnimateControls
A running animation or sequence from Animator: Framer Motion's animation controls.
- AnimatePresenceNode
Container node that manages mount / unmount animations of its children. When keyed children become null, it does not delete them immediately and retains them until the exit animation completes. A keyed child is kept while the exits of the Motions under it play, however deep they sit; the Exits section of Documentation~/motion.md owns which Motions play one. A keyed FragmentNode is accepted as a child: its first Motion is the child's anchor and every element it places stays until the exits of its Motions finish. Children without a key receive a position-based automatic key, so reordering can cause unintended exit / enter animations. Set explicit keys on children that participate in animation.
- Animator
What UseAnimate() returns for animating elements inside its scope, Framer Motion's
animateofuseAnimate. Animations are cancelled when the scope's component unmounts.
- BaseElementNode
Base class shared by ElementNode and MotionNode. ClassNames / Children / Events default to empty arrays so derived nodes can omit them when unused.
- BlockerFunctionArgs
What a navigation Blocker's predicate is asked about: React Router's
BlockerFunctionargument.
- ChangeEventBinding<T>
Binding for BaseField<T>.RegisterValueChangedCallback events.
- ChoicesSettings
List of choices for DropdownField / RadioButtonGroup.
- ClickedBinding
Binding for the Button.clicked event.
- ClickedEvent
The click a ClickedEventBinding handler receives, carrying React's
preventDefault():V.LinkandV.NavLinkskip their navigation for a click a handler bound ahead of it prevented, as React Router'sLinkdoes.
- ClickedEventBinding
Binding for a click on a
Buttonwhose handler receives the click, React'sonClickwith its event. The bindings of this kind on one button share one ClickedEvent per click and run in the order they were bound, so a handler sees what an earlier one did to it.
- ComponentAttribute
Registers a static method returning VNode as a Velvet function component.
- ComponentContext<T>
Typed context definition that lets a value be supplied by an ancestor Provider and read by any descendant via
UseContext. Holds the default value returned when no Provider is configured.
- ComponentFiber
Identity that persists across re-renders for one component instance. Forms a parent/child linked-list tree via Parent / Child / Sibling pointers, and holds hook slots / context dependencies / refs / error boundary / suspense boundary.
- ComponentMethodRegistry
Process-global registry of methods annotated with
[Component(IsErrorBoundary = true)]and[Component(DisplayName = "...")]. Populated at startup by registration callsMetadataRegistrationWeaverinjects into the assembly's module initializer at build time; consumed byV.Componenton every render and by hook-rule violation paths.
- ComponentNode
Node that embeds a child component into a VNode tree. Holds the function-style component (
[Component] static VNode) as a Body delegate and its function identity (MethodInfo) in Identity.
- ContextProviderNode
Non-generic base for a Context Provider.
- ContextProviderNode<T>
Node that provides a context value to a subtree, read by descendants via
UseContext.
- Deferred<T>
A value a loader hands back before it has it: React Router's unawaited promise in loader data. A loader returns it inside its data so the navigation commits without waiting for it, and the route reads it through
V.Awaitbeneath aV.Suspense, which shows its fallback until the value arrives. Any number ofV.Awaitmay read one.
- DndAccessibility
A scope's screen-reader settings, dnd-kit's
accessibilityprop. Announcements null means Default. Announce receives each announcement; null sends it toUnityEngine.Accessibility.AssistiveSupport.notificationDispatcherwhile a screen reader is enabled, where dnd-kit writes it into an ARIA live region.
- DndAnnouncements
The text DndAccessibility hands the screen reader for each drag event, dnd-kit's
announcements. A null function, or one returning null, announces nothing for that event. Default carries dnd-kit's default English sentences.
- DndAutoScroll
Scrolling the
ScrollViews around the drag while the pointer nears their edges, dnd-kit'sautoScroll. Within ThresholdX or ThresholdY (a fraction of the view's size per axis) of an edge the view scrolls toward it, faster the closer the pointer is, at up to Acceleration px per IntervalMs, and only in a direction the pointer has moved in since the drag started. A drag DndKeyboardSensor drives never auto-scrolls.
- DndCollisions
The built-in collision strategies: RectIntersection, ClosestCenter, ClosestCorners and PointerWithin. Each is a pure function over a DndCollisionQuery (no panel access) returning every colliding droppable ranked best first, with the same ranking value, rounding and tie order as the algorithm of the same name in
@dnd-kit/core(packages/core/src/utilities/algorithms), computed in double precision from the rects' float edges as it computes in JavaScript numbers. The context takes the first entry as the over target. None of them consider occlusion; all are rect-based only.
- DndContextSettings
Drag-and-drop scope configuration. All callbacks are optional; CollisionDetection null means RectIntersection; Activation is the scope-wide default a per-draggable override wins over.
- DndContextState
What
Hooks.UseDndContextreturns: the drag the nearestV.DndContextholds, dnd-kit's public context. Active is null while no drag is active; ActiveNodeRect is the source's rect at activation, panel space.
- DndDropAnimation
How a
V.DragOverlayreturns to its source when the drag ends or is cancelled, dnd-kit'sdropAnimation: the overlay moves from where it was to the source's settled position over DurationMs with CSSeasetiming while the source is held at opacity 0, then hides. A zero duration, or an overlay already over the source, hides at once.
- DndKeyboardCodes
The keys DndKeyboardSensor starts, cancels and ends a drag with.
- DndKeyboardSensor
dnd-kit's
KeyboardSensor: a start key on a draggable that holds keyboard focus, or contains the element that does, starts a drag; until an end or cancel key, each other key the CoordinateGetter answers moves it. The default getter moves 25 px per arrow key.
- DndModifiers
The modifiers dnd-kit's
@dnd-kit/modifiersships.
- DndMonitorListener
The callbacks
Hooks.UseDndMonitorregisters with the nearestV.DndContext, each called after the context's own callback of the same name, as dnd-kit'suseDndMonitoris.
- DndPointerSensor
dnd-kit's
PointerSensor: a primary-button press starts the drag under Activation, or under the scope'sactivation:when this is null. A draggable's ownactivation:wins over both.
- DndSensor
An input source that can start a drag, dnd-kit's sensor. A scope offers each pointer-down and key-down that reaches one of its enabled draggables to its sensors in order (Sensors), and the first whose TryActivate(EventBase, DndSensorActivation) returns true takes the event. A press or key that lands inside a nested draggable, or inside a
NoDragelement, is offered to the innermost draggable only.
- DndSensorActivation
What a sensor is handed with the event it may claim.
- DndSensorSession
The drag a sensor started, which the sensor drives until it ends.
- DndSensors
The sensors a scope uses when it names none.
- DndSortable
Helpers of dnd-kit's
@dnd-kit/sortable.
- DndSortingStrategies
The sorting strategies dnd-kit's
@dnd-kit/sortableships.
- DragActivation
Constraint before a press becomes a drag. Distance is panel px of travel before activation; zero (the default, and None) makes the press itself the drag, as dnd-kit's
PointerSensordoes with no constraint — so a press on a draggable control is a drag and not a click. A DelaySec > 0 switches from distance-based to hold-to-drag activation: activation happens after the hold, aborted if the observed travel exceeds Tolerance first.
- DragCancelArgs
Fired when a drag aborts without a drop: Escape, a pointer cancel, a lost pointer capture, or the source/scope unmounting mid-drag.
- DragEndArgs
Fired on release. Over is null when dropped on nothing; state written here flushes synchronously, like any discrete input handler. Collisions is the strategy's full ranking at the last pointer move, empty when the drag ended before one.
- DragMoveArgs
Fired on every move of an active drag, before an
onDragOverthe same move causes, as dnd-kit'sonDragMoveis. Over is the target the drag was over before this move and Collisions the strategy's ranking at this move.
- DragOverArgs
Fired when the winning drop target CHANGES (including to null — leaving all targets). Delta is the total panel-space translation since the press. Collisions is the strategy's full ranking at that move, as dnd-kit's event carries
collisions.
- DragOverlaySettings
Marker settings for the
V.DragOverlaypositioner element (framework-positioned, picking-ignored, hidden while no drag is active). Carried on props so the overlay rides the same binding lifecycle as every other element binding.
- DragStartArgs
Fired once when a press crosses its activation constraint and becomes a drag. Origin is the pointer's panel-space position at the press.
- DraggableInfo
The active drag source, as seen by every context callback.
- DraggableSettings
Drag-source configuration. The element carrying the setting is the drag node itself.
- DroppableInfo
A drop target, as seen by the over/end callbacks.
- DroppableSettings
Drop-target configuration. WhileOverClass applies while this target is the winning collision; WhileDragActiveClass applies to every enabled candidate while any drag is live in scope.
- ElementNode
Node corresponding to a VisualElement (the host primitive, e.g. div, button).
- ErrorBoundaryReset
An error boundary's reset — react-error-boundary's
resetErrorBoundary. One instance per boundary, reference-stable for the boundary's lifetime; it converts to an System.Action that invokes it with no arguments, so it can be passed as anonClick.
- ErrorBoundaryResetDetails
Handed to the
onResetof UseErrorBoundaryReset(object?[]?, Action<ErrorBoundaryResetDetails>?) before the boundary resets, as react-error-boundary hands itsonResetthe reset's details.
- ErrorInfo
Diagnostic data passed to
Hooks.UseFallback's 2-arg overload and to OnCaughtError when an Error Boundary catches a descendant's exception, and to OnUncaughtError when none does.
- ErrorResponse
An error a route renders with a status, as React Router's
ErrorResponse: the 404 a navigation to a path no route matches commits.Hooks.UseRouteErrorreturns it to theerrorElementthat renders it.
- FiberDispatchedEventBinding
Base for the bindings that take React's
on…Captureform: pointer down, up and move, wheel, key, focus in and out, focus and blur. The enter and leave bindings derive from FiberEventBinding instead, as React'sonPointerEnterandonPointerLeavehave no capture form, and so does the geometry binding, which has no React counterpart at all.
- FiberElementProps
Type-safe property bag for a VNode (text, tooltip, enabled/visible, field value, and element-specific settings), passed as the
props:argument of theV.*factories.
- FiberEventBinding
Abstract base for event bindings. Uses an "unbind all → bind all" diff strategy (event count is typically 1-3, so this is lightweight).
- FiberPortalRegistry
Registry that registers and retrieves the destination VisualElement for a Portal. A Portal renders its children into the container looked up here by id, rather than into its own position in the tree. Not thread-safe (main thread only).
- FocusManager
Moves focus among the focusable descendants of the focus scope around the component that called
Hooks.UseFocusManager, in hierarchy order — React Aria'sFocusManager. A field such as aTextFieldor aToggleis one element. The scope is the nearestV.FocusScopeorFocusScopeelement prop above the component, a portal's content reaching the scope its portal is declared in. Each method focuses the element it finds and returns it; it returns null, leaving focus where it is, when it finds none or the component is in no scope.
- FocusManagerOptions
Options for a FocusManager move, React Aria's
FocusManagerOptions.
- FocusScopeSettings
Focus-management behavior for a container subtree: Contain, RestoreFocus, and AutoFocus are straightforward toggles; SingleTabStop is the WAI-ARIA composite-widget (roving) contract adapted to UI Toolkit, where arrow/dpad movement inside the group is engine-native 2D navigation. Record structural equality simplifies DiffProps.
- FragmentNode
Node that returns multiple nodes without a wrapper element (a Fragment).
- HookServiceContext
Provides the host IHookServiceResolver to descendant components through the Velvet Provider tree. UseService<T>() reads Ref and throws when no Provider has supplied a resolver.
- Hooks
Single entry point for all hooks invoked from a
[Component] static VNodebody. Hooks may only be called during Render(), unconditionally and in a stable order (the Rules of Hooks). For example, UseState<T>(T) returns the 2-tuple(value, setValue)wheresetValueis a StateUpdater<T> accepting either a replacement value (setValue.Invoke(next)) or a functional updater (setValue.Invoke(prev => next)).
- MemoNode
Node that skips rebuilding its child tree when the dependency array is unchanged. When omitting key, do not change the order of MemoNodes within the same component, since the node is identified by its position in the element it is written into.
- MemoizationReportAttribute
Written onto a
[Component]method by the build-time compiler transform to record what it made of the body, so that a component cached in part can be inspected as readily as one cached whole. Do not apply by hand.
- MemoizeMethodAttribute
Marks a method as a per-method auto-memoization target recognized by the Source Generator. The annotated partial method is expanded into a
V.Memoized(...)wrapper.
- MotionClock
The time source a mounted tree's motion advances on, chosen per mount through MotionClock: every StyleTransitionConfig play whatever its Type, its DelaySec included, a
layoutIdmove, afilter-transition, theanimate-loops, and the delta UseFrame(Action<float>, int) hands its callback.Documentation~/motion.mdowns the full scope.
- MotionNode
Element node that participates in animations. A variant Initial/Animate pair plays its mount enter on ANY Motion, standalone or under AnimatePresence; Exit requires AnimatePresence (something must defer the unmount for the removal to animate against) and switches CSS classes on unmount based on the transition definition. Inline styles (StyleOverrides) are intentionally not supported. Apply styles via USS classes.
- MountOptions
Options passed to Mount(VisualElement, VNode, MountOptions), as React's
createRoottakes an options object.
- MountedTree
Handle to a tree created by V.Mount. Unmounts on Dispose.
- MutableRef<T>
Mutable slot holder with no type constraint, for non-element values held across renders.
- MutateOptions<TVariables, TData>
The cancellation token and callbacks passed to one Mutate(TVariables, MutateOptions<TVariables, TData>?) or MutateAsync(TVariables, MutateOptions<TVariables, TData>?) call: TanStack Query's
mutate(variables, { onSuccess, onError, onSettled }). The callbacks run after the hook options' own callbacks, once the call's outcome is on the handle, and only while the component is mounted and the call is still the one the handle follows: the component unmounting, a newer call starting and Reset() each drop them. Every context parameter is the call'sOnMutateresult boxed, and null for the context-free option records.
- MutationOptions
Options for a void mutation that takes no input and returns no data. Common for "save current state" / "logout" / "reset" actions where everything is captured in closure.
- MutationOptions<TVariables>
Options for a void mutation that takes
TVariablesinput but returns no data. Use this overload when the mutation is fire-and-forget (typical for Store actions that update state internally).
- MutationOptions<TVariables, TData>
Options passed to UseMutation<TVariables, TData>(MutationOptions<TVariables, TData>). The MutationFn is the async function invoked by Mutate(TVariables) / MutateAsync(TVariables). For a value carried from before the call to its callbacks, use MutationOptions<TVariables, TData, TContext>. Each callback returns a task the call waits for before the next stage, as TanStack Query awaits the promise its callbacks return; a callback with nothing to wait for returns CompletedTask.
- MutationOptions<TVariables, TData, TContext>
Options passed to UseMutation<TVariables, TData, TContext>(MutationOptions<TVariables, TData, TContext>): TanStack Query's
onMutate/onSuccess/onError/onSettledquartet. OnMutate runs before MutationFn, and what it returns is the context each later callback of that call receives — the place to snapshot and write an optimistic value, roll it back in OnError, and finish in OnSettled. Where OnMutate throws or its task faults, or the options declare none, the callbacks receive a default context. Every callback returns a task the call waits for before the next stage, OnMutate included, so a context built from a request is the task's result.
- MutationResultExtensions
Convenience extensions for mutations that take Unit as input. Allows callers to omit the explicit
Unit.Defaultargument:mutation.Mutate()instead ofmutation.Mutate(Unit.Default).
- MutationResult<TVariables, TData>
Mutation handle returned by UseMutation<TVariables, TData>(MutationOptions<TVariables, TData>). Exposes Status flags + Data / Error / Variables snapshots + Mutate(TVariables) / MutateAsync(TVariables) / Reset() imperative API.
- NavigateOptions
The per-call options of a NavigateFunction: React Router's second argument to
navigate, lessflushSyncandviewTransition, whichrouting.mdlists among its deviations.
- NetworkSignals
The application-wide readings of whether the device is online and whether the application is visible, TanStack's online manager and focus manager. A QueryClient refetches its queries when either turns true (
RefetchOnReconnect,RefetchOnWindowFocus), and a refetch interval waits while the application is not visible (RefetchIntervalInBackground). A RetryPolicy pauses on the same readings when it supplies none of its own (IsOnline, IsFocused).
- ParticlesElement
The element behind Particles(ParticleSystem?, string?, string?, string?, PlayTrigger, float, StyleOverrides?, Func<VisualElement, Action>?, string?, string?, string?, IReadOnlyDictionary<string, string>?, IReadOnlyDictionary<string, string>?, FiberEventBinding[]?): draws a hidden ParticleSystem simulation's baked geometry in its own visual content and in the blend layers over it, or the texture a camera renders of a hidden VisualEffect. A dedicated subclass so a type change to or from any other element remounts instead of patching, and so the element is never recycled through the shared primitive pools while it owns a live simulation host.
- ParticlesSettings
The particle effect a Particles element simulates and draws: the source effect (a prefab's ParticleSystem, or a VFX Graph VisualEffect when no ParticleSystem is given — the framework instantiates a hidden host from it and owns that instance), the play trigger, and the world-unit → element-pixel mapping. The constructor fail-fasts on a non-positive or NaN mapping so every construction path shares one guard; a
withexpression bypasses it like any record init.
- PortalNode
Node that renders children into a different VisualElement registered in FiberPortalRegistry, rather than at their position in the VNode tree. Used when a component's children are logically scoped to it but should be placed near the DOM root, such as modals or overlays.
- QueryClient
TanStack Query's
QueryClient: a cache of query results keyed by QueryKey, shared by every UseQuery<TQueryFnData, TData>(QueryOptions<TQueryFnData, TData>, QueryClient?) that reaches it. One entry holds one result and at most one request in flight, whichever component started it, and keeps the result after the components reading it unmount, until it is collected. A request in flight is kept too when its query function takes no token; one that does is cancelled when the last component reading the entry leaves, as QueryFn describes.
- QueryClientContext
Provides a QueryClient to the UseQuery<TQueryFnData, TData>(QueryOptions<TQueryFnData, TData>, QueryClient?) calls below it:
V.Provider(QueryClientContext.Ref, value: client, children: ...), TanStack Query'sQueryClientProvider. Read it withHooks.UseContext(QueryClientContext.Ref)to reach the client from a component, asuseQueryClient()does.
- QueryClientOptions
Defaults a QueryClient applies to every query that does not set its own, plus the clock it measures staleness and garbage collection against.
- QueryFilters
Selects the entries a QueryClient method works on, TanStack Query's query filters. Every property that is set must match: an entry is selected when its key matches, it is of the type asked for, its staleness and fetch status are those asked for, and the predicate accepts it.
- QueryKey
Identifies an entry in a QueryClient's cache: TanStack Query's
queryKeyarray. Two keys are equal when they hold the same number of parts and each pair of parts is equal under object.Equals(object, object), so a key rebuilt every render with equal parts names the same entry, and a string, a boxed number or a record or tuple of such values compares by content. A part that is itself a QueryKey compares the same way. A part that is a collection whose type keeps object's ownEqualscompares by what it holds: an array or a list element by element, in order, as v5's structural hash compares an array; a dictionary by key and value whatever order the entries were added in, as v5 sorts an object's keys before hashing it; a set by element, in any order. A collection type that defines its own equality keeps it.
- QueryOptions<T>
QueryOptions<TQueryFnData, TData> for a query whose result holds the data its query function returns.
- QueryOptions<TQueryFnData, TData>
Options passed to UseQuery<TQueryFnData, TData>(QueryOptions<TQueryFnData, TData>, QueryClient?): TanStack Query's
{ queryKey, queryFn }with itsenabled,select,placeholderData,staleTime,gcTime,refetchInterval,refetchIntervalInBackground,refetchOnWindowFocus,refetchOnReconnect,retry,retryDelay,structuralSharingandnotifyOnChangeProps. QueryOptions<T> is the form without a Select that changes the data's type.
- QueryPlaceholder
Ready-made PlaceholderData functions.
- QueryResult<T>
What UseQuery<TQueryFnData, TData>(QueryOptions<TQueryFnData, TData>, QueryClient?) returns: the entry's state as this render reads it, TanStack Query's
UseQueryResult. Reading a property marks it as one the component depends on, which is what NotifyOnChangeProps leaves to decide when the component re-renders.
- QueryState<T>
An entry's state as GetQueryState<T>(QueryKey) reads it, a snapshot that does not follow the entry: TanStack Query's
QueryState.
- Ref<T>
Reference holder for an element or imperative handle. Receives a VisualElement-derived type via
refCallback:, and can also hold any handle interface exposed byUseImperativeHandle.
- RefetchOptions
What RefetchQueries(QueryFilters?, RefetchOptions?), ResetQueries(QueryFilters?, RefetchOptions?) and the filter form of InvalidateQueries(QueryFilters?, RefetchOptions?) do with the requests they start: TanStack Query's
refetchQueriesoptions.
- ResolvedPath
The pathname, search and hash a target resolves to: React Router's
Path, asHooks.UseResolvedPathreturns it.
- RetryPolicy
Retries a failed async operation: TanStack Query's
retry/retryDelaypair as a value an operation opts into. Retry hands one to a mutation; RunAsync<T>(Func<CancellationToken, VelvetTask<T>>, CancellationToken) wraps another operation, such as a Use<T>(Func<CancellationToken, VelvetTask<T>>, object?) loader.
- RouteActionContext
What a route's action is called with: React Router's
ActionFunctionArgs.
- RouteBlockerManager
Coordinates the navigation Blockers registered with a Router.
- RouteBlockerState
Observable state for an individual navigation Blocker: React Router's
Blocker.
- RouteDefinition
A directly constructed route that combines RedirectTo and Guard throws System.InvalidOperationException when its redirect configuration is evaluated during navigation.
- RouteLoaderContext
Describes the route matched for a Guard or Loader.
- RouteMatch
One level in a parent-first route matching result.
- RouteTree
Ranks route branches by specificity before matching; declaration order breaks score ties only. Supports literal, dynamic (
:param), optional (:param?/segment?), and splat (*) segments.
- Router
Navigation controller: consults its blocker, matches paths against a route tree, runs guards and loaders, and maintains a history stack with Back/Forward.
V.RouterProviderpublishes one to the routing hooks beneath it.
- SceneViewElement
The element behind SceneView(Camera?, string?, string?, string?, float, StyleOverrides?, Func<VisualElement, Action>?, string?, string?, string?, IReadOnlyDictionary<string, string>?, IReadOnlyDictionary<string, string>?, FiberEventBinding[]?): displays a Camera's output over its content box, from a framework-owned RenderTexture sized to that box, above the element's own background. A dedicated subclass (rather than reusing another element type) so a type change to or from any other element remounts instead of patching, and so the element is never recycled through the shared primitive pools while it owns a live RenderTexture.
- SceneViewSettings
The camera a SceneView element displays, plus its render-resolution policy. The framework owns the RenderTexture: it is created at the element's laid-out pixel size (times ResolutionScale), follows geometry changes, and is released on unmount. The constructor fail-fasts on a non-positive or NaN scale so every construction path (the factory, wrapper hosts, direct construction) shares one guard; a
withexpression bypasses it like any record init.
- ScrollViewSettings
Controls ScrollView scroller visibility and touch-scroll behavior.
- SearchParams
Mutable ISearchParams implementation that retains key insertion order.
- SearchParamsSetter
Updates the current location's query. Navigation defaults to Push.
- SliderIntSettings
SliderInt.lowValue / highValue / direction / inverted, and the keyboard step: SliderSettings over whole numbers, with the same undeclared and default rules.
- SliderSettings
Slider.lowValue / highValue / direction / inverted, and the keyboard step. Record structural equality simplifies DiffProps. A null Direction or Inverted is undeclared: one no render has declared is not written, and one a render declared and a later render dropped is restored to what the slider carried when a render first declared it. A null bound is written as 0 or 10 whenever either bound's declaration changes. Step is Radix's
step, and null is its default of 1.
- SortableInfo
A sortable item's place in its
V.SortableContext, dnd-kit'sdata.sortable.
- Store<TState>
State container for immutable state, collocated actions, and synchronous change notifications.
- StyleBackgroundImageResolver
Parses utility-style arbitrary-value background-image className syntax and applies the result as an inline UnityEngine.UIElements.IStyle.backgroundImage.
- StyleClassNames
Central null/empty-safe join point for utility-first class composition, so call sites can pass raw conditional expressions (ternaries, When(bool, string)) as arguments without each one guarding against null or empty branches itself.
- StyleFontClass
Parses Velvet's font utility classes —
font-<name>(family),font-thin…font-black(weight),italic/not-italic/bold-italic(style), plus the arbitraryfont-[…]forms — into a single FontIntent. Mirrors Velvet.StyleGapClass's whole-array, last-wins extraction so it slots into the reconciler the same way. Resolution to actual assets/styles is done by StyleFontResolver.
- StyleFontResolver
Applies an element's font utility classes as inline style, resolving family + weight + italic together against the VelvetFonts registry. Setting
unityFontDefinitionandunityFontStyleAndWeightin one pass is what lets Velvet:- compose
font-bold italicintobold-and-italic(impossible from two separate USS classes that share the single-unity-font-styleproperty); - render the full
font-thin…font-blackscale when weight-specific Font Assets are registered, and gracefully fold to the binary bold/normal threshold when they are not.
Inline styles win over the USS fallback classes in
_typography.uss, so this resolver is the authoritative font layer for every Velvet element.- compose
- StyleOverrides
Limited set of inline styles applied directly to an element. Intentionally inconvenient to encourage class-based styling.
- StyleRecipe
Class-name builder utility with named variant axes. Specify a value for each variant axis (visual, size, etc.) and expand to the corresponding classes.
- StyleRecipe.CompoundVariant
Compound variant that applies an extra class when multiple axis conditions all match.
- StyleSlotRecipe
Companion to StyleRecipe for components whose variants must drive class names across several independently-styled parts (e.g. a trigger and its listbox) at once, keeping every slot's classes in sync under the same variant selection instead of duplicating a StyleRecipe per part.
- StyleSlotRecipe.SlotCompoundVariant
Adds classes to slots when a compound condition matches.
- StyleTransition
Predefined transition presets for
V.Motion. All presets animate only translate / scale / opacity, so they never trigger a layout recomputation. Override duration / easing per use via With(float?, EasingMode?, EasingMode?, float?), e.g.StyleTransition.Fade.With(durationSec: 0.5f).
- StyleTransitionConfig
CSS-transition-based animation configuration for
V.Motion. Drives a USS class swap (enter-from → enter-to / exit-from → exit-to); DurationSec / Easing are applied as inline styles. Use the presets on StyleTransition, optionally tuned via With(float?, EasingMode?, EasingMode?, float?).
- StyleVariantClass
Parses a state-variant utility token of the form
<variant>:<payload>(e.g.hover:bg-blue-500,focus:border-accent,active:w-[200px]).USS class selectors cannot contain
:, so these tokens are never added to the class list; the reconciler routes them to a Velvet.StyleVariantManipulator that toggles the payload when the matching pointer/focus state is active. The payload itself is an ordinary utility — a USS class (bg-blue-500) or an arbitrary value (w-[200px]).
- SubmitOptions
How SubmitFunction and SubmitAsync(object?, SubmitOptions?, CancellationToken) submit: React Router's
SubmitOptions.
- SuspenseNode
Boundary node that displays a fallback when a descendant Use<T> declares pending. Error handling is delegated to an Error Boundary.
- TextFieldSettings
TextField.isPasswordField, textEdition.placeholder, maxLength, isReadOnly, isDelayed, multiline, keyboardType and autoCorrection. A null member is undeclared: ApplyTextField(VisualElement, TextFieldSettings) leaves a member no render has declared untouched, and restores what the element was constructed with once a render that did declare one drops it. An empty Placeholder is a declared empty placeholder.
- TextNode
Text-only node. Converted to a Label.
- UiMatch
One entry of
Hooks.UseMatches: a matched route with the data it carries, as React Router'sUIMatch.
- V
VNode builder DSL. Declarative UI construction API for composing element trees in C#.
- VNode
Abstract base for virtual DOM nodes. The smallest unit of a declarative element tree.
- VelvetFilters
Registry for user-defined UI Toolkit custom filters consumed by the
filter-[name:args]utility. Register a UnityEngine.UIElements.FilterFunctionDefinition under a name, then reference it from any class string:VelvetFilters.Register("dissolve", dissolveDefinition); V.Div(className: "filter-[dissolve:0.4]");Arguments after the name are colon-separated and fill the definition's declared parameters in order, parsed by each slot's declared type — floats (
filter-[dissolve:0.4], sign allowed) for float slots and colors (filter-[glow:#ff0000:2]) for color slots; a missing tail is padded from the declaration's defaults, so a bare name (filter-[dissolve]) applies the declared defaults outright. Custom functions compose into the same inlinefilterlist as the built-inblur-/contrast-/… utilities: built-ins first (canonical CSS order), then customs in class order. Registration reaches mounted elements: registering, re-registering or unregistering a name re-resolves every element carrying it, and an element carrying a name nothing is registered under draws no filter, as CSS ignores a filter chain whoseurl()names no filter. Not thread-safe (main thread only).
- VelvetFontFamily
A named font family — the Velvet counterpart of a
font-familyentry. A family owns one or more VelvetFontWeightEntry slots keyed by VelvetFontWeight, and is selected through thefont-<name>utility class (e.g.font-sans→ the family named"sans").Multilingual (CJK / fallback) coverage is a property of the Font Assets themselves: configure the local fallback table on the Font Asset, or the global fallback list on the panel's UITK Text Settings, or name several families in a font-family list (
font-[Inter,Noto_Sans_JP]), which appends the later families' assets to the first one's table. TextCore performs the per-glyph fallback at render time.
- VelvetFontWeightEntry
One weight slot of a VelvetFontFamily: the upright and italic Font Assets for a single VelvetFontWeight. Each asset can be supplied either as a direct reference (upright / italic) or as an Addressables key (uprightAddress / italicAddress) that VelvetFonts loads and caches on first use. A direct reference always wins over an address.
- VelvetFonts
Application-wide font registry backing the
font-<name>/font-<weight>utilities. Mirrors VelvetTheme's "global state + change event" shape: register families once at startup and swap the active set at runtime (e.g. on a locale change) — FontsChanged lets the app trigger a re-render so mounted elements re-resolve.The registry is independent of how the master data is stored. It only consumes VelvetFontFamily values via Register(VelvetFontFamily?) / Register(IEnumerable<VelvetFontFamily>?, string?); producing those from CSV, MasterMemory, a ScriptableObject, or plain code is an adapter concern that lives outside this class.
Font Assets may be supplied directly or by Addressables key; keyed assets are loaded synchronously and cached on first use, the same mechanism StyleBackgroundImageResolver uses for
bg-[addr:…].
- VelvetKeyframes
The registry behind
animate-<name>andanimate-[<name><time><timing>_infinite]: keyframe animations, as CSS@keyframesdeclares them, which an element loops through the same driver asanimate-pulseand its siblings. Register before the first render that uses the name.
- VelvetResponsive
Public entry points for Velvet's responsive system, for consumers that need to reference its conventions from code rather than only as utility-class strings.
- VelvetRuntimeAssets
Holds the package assets a player needs and cannot look up by name.
- VelvetStyleUtilities
Resolves and attaches Velvet's bundled utility stylesheet from runtime code, in the editor and in a player alike. Every utility the sheet declares resolves to nothing on a panel that does not carry it, while arbitrary values and the many families Velvet resolves itself rather than declaring are unaffected — so Mount(VisualElement, VNode) and a portal into an element the app owns warn, once per run, when the sheet is missing at their target panel's next update, or at the next update after the target is added to a panel.
Documentation~/setup.mdowns when to call this, which utilities sit on which side of that split (with the command that answers it for any one class), and the alternative of referencing the asset from a scene instead.
- VelvetTheme
Global theme state backing the
dark:utility variant and the bundled stylesheet's dark token set. This models aclass-based dark-mode strategy as a single application-wide flag rather than scanning for an ancestor.darkclass (UI Toolkit has no class-change event to react to cheaply); BindThemeTo(VisualElement) projects the flag back onto that class for the roots the sheet is attached to, which is what selects the token set.Set IsDark from your app (e.g. on a settings toggle); every mounted element with a
dark:variant re-evaluates its payload when the value changes.
- VirtualListHandle
The imperative API of a mounted VirtualList<T>(IReadOnlyList<T>, Func<T, string>, float, Func<T, VNode>, bool, int, string?, string?, string?, Ref<VirtualListHandle>?, FiberEventBinding[]?), set on the list's
listRef— the counterpart of react-window'slistRef.
- VirtualListNode
List virtualization node for large item collections. Renders a ScrollView of items and keeps only the items in view present in the DOM to ensure performance.
- WorldSpaceNode
A portal into a framework-owned world-space panel positioned by a scene transform — UI that lives among 3D content (depth-tested), unlike the always-on-top screen-space layers. Children stay part of the logical tree (context crosses; events do not — the panel boundary is physical).
Structs
- AnimateAt
Where a segment of a sequence starts, as Framer Motion's
at: after the previous segment ends (the default), at a time on the sequence's timeline, with the previous segment ("<"), or an offset from the previous segment's end ("+0.5","-0.2").
- AnimateSegment
One entry of a sequence given to Animate(IReadOnlyList<AnimateSegment>).
- AnimateValues
The values Animate(VisualElement, AnimateValues, StyleTransitionConfig?) animates, each an array of keyframes as Framer Motion's
animatetakes them: two or more run through in turn over the transition, and one is a value to animate to from the element's current one. A property left null is left alone.
- AnimationSequenceControls
Imperative controls for a sequence started by UseAnimationSequence(IReadOnlyList<AnimationSequenceStep>, object?[]?, bool, bool), Framer Motion's sequence playback controls. They drive the sequence's own timeline — its step cursor and clock — and the
SpringandBezierplays its steps' labels start on aV.Motionhanded CurrentTransition: see the motion guide's Timelines section for what each reaches.
- AnimationSequenceState
Per-render snapshot of a sequence, returned by UseAnimationSequence(IReadOnlyList<AnimationSequenceStep>, object?[]?, bool, bool).
- AnimationSequenceStep
One step in an animation sequence played by UseAnimationSequence(IReadOnlyList<AnimationSequenceStep>, object?[]?, bool, bool). A step is exactly one of: a variant-label change (To(string, StyleTransitionConfig?, float?)), a pure timing gap (Wait(float)), a synchronous C# callback (Call(Action)), or a wait on a task (Await(Func<CancellationToken, VelvetTask>)).
- BezierCurve
A CSS
cubic-bezier(x1, y1, x2, y2)control-point pair; see BezierX1.
- DndCollision
One colliding droppable: its id, its Data, and the value the strategy ranked it by (DndCollisions says which per strategy).
- DndCollisionQuery
Everything a collision strategy may consider. Candidates are pre-filtered: in-scope, enabled, attached, on the source's panel or on another runtime panel of the tree (their rects mapped into the source's panel space), and the active draggable's own id excluded unless it is a
V.Sortableitem (any other element that is both draggable and droppable under one id never collides with itself).
- DndDroppableRect
One drop candidate's live rect, as handed to a collision strategy.
- DndKeyboardMove
What a DndKeyboardCoordinateGetter reads.
- DndModifierArgs
What a DndModifier reads. Every rect is panel space, the source's panel.
- DndSortingArgs
What a DndSortingStrategy reads, dnd-kit's sorting strategy arguments.
- DndSortingTransform
The translate and scale a sorting strategy gives one item.
- DraggableState
What
Hooks.UseDraggablereturns: dnd-kit'suseDraggablestate. Transform is the translate the drag applies to this draggable, null unless it is the one being dragged.
- DroppableState
What
Hooks.UseDroppablereturns: dnd-kit'suseDroppablestate.
- ErrorBoundaryApi
What UseErrorBoundary() returns — react-error-boundary's
useErrorBoundary()result.
- FocusRing
Focus state of the element carrying Ref, returned by
Hooks.UseFocusRing. Rides the same focus-visible heuristic as thefocus-visible:styling variant, so the two surfaces cannot drift.
- FontIntent
The combined font request extracted from an element's class list: a family, a weight, and an italic flag, each tracked with a "was it specified?" companion. Because all three facets are gathered together (rather than applied class-by-class),
font-bold italiccomposes into a singlebold-and-italicresult — something the raw-unity-font-styleproperty cannot express from two independent classes.
- KeyframeStop
One stop of a keyframe animation registered with VelvetKeyframes: the values the animation holds at Offset (0 to 1 through the loop). A property a stop leaves null takes no value there; a property no stop names is not animated, and one that is named between stops starts and ends on the element's own value where no stop at 0 or 1 names it.
- MotionVariant
One entry of a
V.Motion(variants:)map: the utility-class string naming a pose, plus an optional transition the swap into that pose plays on. Astringconverts implicitly, so a pose that takes the Motion's owntransition:is still written as the class string alone.
- NavigateTarget
The target of a NavigateFunction call: a path, or a number of history entries to move by (negative for back). A string or an int converts implicitly, so
navigate("/a")andnavigate(-1)both read as React Router's.
- NavigationState
The navigation in flight, as Navigation holds it and
Hooks.UseNavigationreturns it: React Router'snavigation.
- QueryInfo
What a function form of RefetchIntervalFn, RefetchOnWindowFocusFn or RefetchOnReconnectFn is handed: the entry its query reads, as it stands when the function is called. TanStack Query hands these functions its
Query; this holds the part of its state they read.
- QueryPlaceholder<T>
Data a query shows while it has none of its own, or nothing: what PlaceholderData returns, where TanStack Query's function returns the data or
undefined. A value converts to it implicitly, and a null value is no data.
- ResolvedFont
Outcome of resolving a (
family,weight,italic) request against the VelvetFonts registry. HasAsset tells the caller whether a Font Asset was found; ResidualBold / ResidualItalic are the parts of the request that the chosen asset does NOT already satisfy and therefore must be emulated through-unity-font-style(faux bold / faux italic).
- RetryDelayRule
TanStack's
retryDelayoption as a value: a constant wait, or a function of the failure. A System.TimeSpan converts implicitly, and By(Func<int, Exception, TimeSpan>) takes the function. The default value is the default schedule: one second doubled at each retry, capped at thirty seconds.
- RetryRule
TanStack's
retryoption as a value: a number of retries, every failure, no failure, or a function of the failure. A number or a bool converts implicitly, and When(Func<int, Exception, bool>) takes the function.
- SortableState
What
Hooks.UseSortablereturns, dnd-kit'suseSortablestate. An index is -1 where there is none: ActiveIndex and OverIndex while no item of this context is dragged or under the drag.
- SpringPhysics
A spring's stiffness, damping and mass; see Stiffness.
- StateUpdater<T>
The single state setter returned by UseState<T>(T). Accepts either a replacement value (
setValue(next)) or a functional updater (setValue(prev => next)). The functional form receives the state the updates written before it produce, so it is safe to invoke from a closure captured by an earlier render (no stale-closure pitfall).
- StylePropertyTransition
A single property's transition override inside PropertyOverrides. Any null field falls back to the enclosing config's corresponding top-level value — Easing falls back to the config's EFFECTIVE easing for the direction being played (
Easingfor an enter,ExitEasing ?? Easingfor an exit), matching how the top-level fields already resolve per direction.
- StyleSlotClasses
Read-only wrapper from slot name → class name.
- TransitionStarter
The
startTransitionfunction returned by UseTransition(). Accepts either a synchronous callback (startTransition(() => ...)) or an async one (startTransition(async () => ...)). The state updates the callback schedules before it first suspends are put on the Transition lane, whichever component owns the state they write; for the async form,isPendingstays true across awaits until the task completes, while the updates the action makes after anawaitthat suspended it fall outside the scope this call opened — wrap them in a furtherstartTransitionto put them back in it. Anawaitof a VelvetTask suspends even where the task had already completed, as JavaScript's does; anawaitof a completed System.Threading.Tasks.Task does not, so what follows it is still inside the scope — the migration guide'suseTransitionrow owns that rule. Nested calls join the outer transition. An error the callback throws, or the action faults with, is not rethrown to the caller: it is thrown from the declaring component's next Transition-lane render, or dropped once that component has unmounted.
- Unit
A type with a single value. Used in generic positions that stand in for "no value" (e.g. MutationResult<TVariables, TData> with no variables or no return value).
Interfaces
- IHookServiceResolver
Resolver abstraction that fetches services from the host DI container. Decouples DI-framework-specific implementations from the framework core.
- IRouteScope
DI container abstraction for a route scope. Resolves services on a per-route basis; the scope is destroyed by Dispose when navigation leaves the route.
- IRouteScopeFactory
Factory abstraction that builds route scopes. Decouples DI-framework-specific implementations (such as VContainer) from the framework core.
- ISearchParams
Read-only view over URL query parameters that preserves every value of a repeated key. Enumeration yields distinct keys in insertion order.
- IStoreWriter<TState>
Minimal write-side interface exposing a store's state-update API to collaborators. Store<TState> implements it explicitly.
Enums
- AnimatePresenceMode
How an AnimatePresenceNode sequences exit and enter when its keyed children change.
- DragMovement
How an active drag moves its source element. Translate (the default) writes the pointer delta as an inline
translateon the source every move; None leaves the source in place — theV.DragOverlayghost pattern, where only the portal-rendered preview follows the pointer.
- ErrorBoundaryResetReason
What reset an error boundary, as react-error-boundary's
onResetdetails name it.
- FiberUpdatePriority
Lane priority for a scheduled re-render. The lane is chosen from the scheduling context, not passed as an argument. A
UseDeferredValuederivation asks for the Transition lane directly, and aStartTransitioncall asks for the Urgent lane directly for the render that shows itsisPending. A hook-driven state update is classified from its context, tested in this order: the Transition lane while aStartTransitioncallback is running and has not yet suspended; failing that, the Urgent lane while a discrete event handler runs; failing that, the Normal lane. A starved Transition lane is promoted to Normal. Lower numeric values indicate higher priority; a fiber's lane queue drains lowest-value-first.
- FocusScopeOrientation
The axes an arrow/d-pad move may travel inside a
singleTabStopgroup.
- LoaderMode
Execution mode for a route loader.
- MutationStatus
Lifecycle status of a mutation.
- NavigationLifecycle
The phase of the navigation in flight: React Router's
navigation.state.
- NavigationMode
Controls how a successful navigation changes history.
- NavigationType
How a location was reached: React Router's
NavigationType.
- NetworkMode
TanStack's
networkModeoption: whether a lost connection pauses an operation.
- PanelFocusOrder
Where the elements of a host panel (
V.Portal(layer:)/V.WorldSpace) sit in sequential (Tab/Shift-Tab) focus order. Arrow/2D navigation stays within each panel in every mode.
- PlayTrigger
When a Particles element starts its effect.
- QueryFetchStatus
Whether an entry has a request in flight: TanStack Query's filter
fetchStatus.
- QueryProperties
The properties of a QueryResult<T>, for NotifyOnChangeProps: TanStack Query's list of result property names.
- QueryRefetchMode
Whether a query fetches again when the application becomes visible or the device comes back online: TanStack Query's
refetchOnWindowFocusandrefetchOnReconnectgiven asfalse,trueor'always'.
- QueryStatus
Whether a query has data, TanStack Query's
status. Whether a request is in flight is the separate IsFetching, so a query refetching over data it already holds stays Success.
- QueryTypeFilter
Which entries a QueryFilters selects by whether a mounted, enabled query reads them: TanStack Query's filter
type.
- RelativeRoutingType
How a relative
tois resolved: React Router'srelativeoption.
- StyleVariantKind
State-variant kinds for utility classes — the
hover:/focus:/active:/disabled:prefixes.
- TransitionRepeatType
How each pass after the first of a repeating play runs — Framer Motion's
repeatType. See Repeat.
- TransitionType
Selects the animation model a StyleTransitionConfig plays with — see Type.
- TransitionWhen
Sequences a Motion's own class swap against its inheriting descendants' swaps — see When and StaggerChildrenSec.
- UILayer
Framework-managed screen-space layer panels a Portal(UILayer, VNode?[]?, string?, PanelFocusOrder) can target, sorted around the app's main panel. Screen-space panels always composite over the 3D scene (the engine's compositor draws overlay panels after cameras) — UI that must sit among or behind scene geometry is WorldSpace(Vector3, Quaternion?, Vector2?, VNode?[]?, string?, PanelFocusOrder)'s depth-tested territory instead.
- VelvetFontWeight
The numeric font-weight scale (
font-thin…font-black). The underlying integer value is the CSS weight, so a class such asfont-semiboldresolves to(int)VelvetFontWeight.SemiBold == 600.UI Toolkit's
-unity-font-stylecan only express the binarynormal/boldaxis, so a weight only renders faithfully when a weight-specific Font Asset is registered for it in a VelvetFontFamily. When no such asset exists Velvet folds the weight to the nearest binary value (>= 600→ bold, otherwise normal); see VelvetFonts.
- VirtualListAlign
Where ScrollToItem(int, VirtualListAlign) places an item in the viewport: react-window's
scrollToRowalign.
- VirtualListScrollBehavior
How ScrollToItem(int, VirtualListAlign) moves the list to its target: react-window's
scrollToRowbehavior, which it hands to the DOM'sscrollTo.
Delegates
- DndCollisionDetection
Returns the colliding droppables ranked best first, as dnd-kit's
CollisionDetectiondoes; the first entry becomes the over target and an empty array means no collision. Must be pure over the query — it runs on every pointer move of an active drag.
- DndKeyboardCoordinateGetter
Where a key moves a keyboard drag to, as a new CurrentCoordinates; null leaves it where it is.
- DndModifier
Returns the translate a drag applies, given the one before it, dnd-kit's
Modifier.
- DndSortingStrategy
Where an item of a
V.SortableContextmoves while a drag sorts it, dnd-kit'sSortingStrategy; null leaves it in place.
- NavigateFunction
What
Hooks.UseNavigatereturns: React Router'snavigate. The options apply to a path target and are ignored for a delta, as React Router ignores them.
- SubmitFunction
The function
Hooks.UseSubmitreturns: React Router'sSubmitFunction.