mitiru::ui
UI layer used inside C++ tooling and HUD layouts. Layout presets, controls, theming, and the editor's docking system.
UI layer used inside C++ tooling and HUD layouts. Layout presets, controls, theming, and the editor's docking system.
Free functions and typedefs
using ColorBlindMode = vn::ColorBlindMode;using ColorTransform = vn::ColorTransform;[[nodiscard]] inline sgc::Rectf computeFocusIndicatorBounds( const UINode& node, const FocusIndicatorStyle& style = {}) noexcept[[nodiscard]] inline float computeFocusIndicatorOpacity( const FocusIndicatorStyle& style, float elapsedTime) noexcept[[nodiscard]] inline std::string roleToString(UIRole role) noexcept[[nodiscard]] inline UIElementDescription describeNode(const UINode& node)[[nodiscard]] inline std::vector<UIElementDescription> traverseForScreenReader( const UINode& root)[[nodiscard]] inline std::string generateScreenReaderText(const UINode& root)[[nodiscard]] inline sgc::Colorf applyColorBlindTransform( const sgc::Colorf& color, ColorBlindMode mode) noexcept[[nodiscard]] inline bool shouldReduceMotion( const UIAccessibilityConfig& config) noexcept[[nodiscard]] inline float adjustAnimationDuration( float baseDuration, const UIAccessibilityConfig& config) noexcept[[nodiscard]] inline float adjustFontSize( float baseFontSize, const UIAccessibilityConfig& config) noexceptstruct UIAccessibilityConfig 8
bool highContrast = falsebool reducedMotion = falsebool screenReaderEnabled = falsefloat textSizeMultiplier = 1.0ffloat letterSpacing = 1.0ffloat lineSpacing = 1.0fColorBlindMode colorBlindMode = ColorBlindMode::Nonevoid setTextSizeMultiplier(float multiplier) noexceptstruct FocusIndicatorStyle 5
float thickness = 2.0ffloat padding = 2.0ffloat cornerRadius = 4.0fbool pulsate = truefloat pulsateSpeed = 2.0fstruct UIElementDescription 5
UINodeId id = INVALID_UI_NODEstd::string rolestd::string namestd::string valuestd::string stateenum ConstraintType : uint8_t 13
LeftToLeftLeftToRightRightToRightRightToLeftTopToTopTopToBottomBottomToBottomBottomToTopCenterXCenterYWidthHeightAspectRatiostruct UIConstraint 4
ConstraintType type = ConstraintType::LeftToLeftstd::string targetfloat offset = 0.0ffloat multiplier = 1.0fstruct SolvedBounds 12
float left = 0.0ffloat top = 0.0ffloat width = 0.0ffloat height = 0.0f[[nodiscard]] float right() const noexcept[[nodiscard]] float bottom() const noexcept[[nodiscard]] float centerX() const noexcept[[nodiscard]] float centerY() const noexceptvoid setRight(float v) noexceptvoid setBottom(float v) noexceptvoid setCenterX(float v) noexceptvoid setCenterY(float v) noexceptclass ConstraintLayout 5
void addConstraint(const std::string& nodeId, UIConstraint constraint)void clearConstraints(const std::string& nodeId)void clearAll() noexceptvoid setDefaultSize(const std::string& nodeId, float w, float h)[[nodiscard]] std::map<std::string, sgc::Rectf> solve( const sgc::Rectf& parentBounds) conststruct DialogueLine 4
std::string speakerstd::string textstd::string portraitKeystd::optional<float> revealSpeedOverridestruct DialogueChoice 2
std::string labelint id = 0struct DialogueBoxStyle 5
std::string background = "#000000C8"std::string textColor = "#F0F0F0FF"std::string speakerColor = "#FFD95AFF"float padding = 16.0fstd::string fontFamilyclass DialogueBox 58
using json = ::nlohmann::json;DialogueBox() = defaultvoid setLines(std::vector<DialogueLine> lines)void setChoices(std::vector<DialogueChoice> choices)void setStyle(DialogueBoxStyle style) noexceptconst DialogueBoxStyle& style() const noexceptvoid setDefaultRevealSpeed(float charsPerSec) noexceptvoid setClickCooldown(float seconds) noexceptvoid update(float dt, bool primaryActionPressed)void advance()bool selectChoice(int id)void restart() noexceptconst DialogueLine* currentLine() const noexceptstd::string visibleText() const[[nodiscard]] bool isComplete() const noexcept[[nodiscard]] bool awaitingChoice() const noexcept[[nodiscard]] bool isRevealing() const noexcept[[nodiscard]] std::size_t lineIndex() const noexcept[[nodiscard]] float revealProgress() const noexcept[[nodiscard]] std::optional<int> selectedChoice() const noexcept[[nodiscard]] const std::vector<DialogueLine>& lines() const noexcept[[nodiscard]] const std::vector<DialogueChoice>& choices() const noexceptjson toJson() constusing EasingType = vn::EasingType;[[nodiscard]] constexpr float linear(float t) noexcept[[nodiscard]] constexpr float easeInQuad(float t) noexcept[[nodiscard]] constexpr float easeOutQuad(float t) noexcept[[nodiscard]] constexpr float easeInOutQuad(float t) noexcept[[nodiscard]] constexpr float easeInCubic(float t) noexcept[[nodiscard]] constexpr float easeOutCubic(float t) noexcept[[nodiscard]] constexpr float easeInOutCubic(float t) noexcept[[nodiscard]] constexpr float easeInQuart(float t) noexcept[[nodiscard]] constexpr float easeOutQuart(float t) noexcept[[nodiscard]] constexpr float easeInOutQuart(float t) noexcept[[nodiscard]] constexpr float easeInQuint(float t) noexcept[[nodiscard]] constexpr float easeOutQuint(float t) noexcept[[nodiscard]] constexpr float easeInOutQuint(float t) noexcept[[nodiscard]] inline float easeInSine(float t) noexcept[[nodiscard]] inline float easeOutSine(float t) noexcept[[nodiscard]] inline float easeInOutSine(float t) noexcept[[nodiscard]] inline float easeInExpo(float t) noexcept[[nodiscard]] inline float easeOutExpo(float t) noexcept[[nodiscard]] inline float easeInOutExpo(float t) noexcept[[nodiscard]] inline float easeInCirc(float t) noexcept[[nodiscard]] inline float easeOutCirc(float t) noexcept[[nodiscard]] inline float easeInOutCirc(float t) noexcept[[nodiscard]] inline float easeInElastic(float t) noexcept[[nodiscard]] inline float easeOutElastic(float t) noexcept[[nodiscard]] inline float easeInOutElastic(float t) noexcept[[nodiscard]] constexpr float easeInBack(float t) noexcept[[nodiscard]] constexpr float easeOutBack(float t) noexcept[[nodiscard]] constexpr float easeInOutBack(float t) noexcept[[nodiscard]] constexpr float easeInBounce(float t) noexcept[[nodiscard]] constexpr float easeOutBounce(float t) noexcept[[nodiscard]] constexpr float easeInOutBounce(float t) noexcept[[nodiscard]] inline float cubicBezier( float x1, float y1, float x2, float y2, float t) noexcept[[nodiscard]] inline float spring( float damping, float frequency, float t) noexcept[[nodiscard]] inline float apply(EasingType type, float t) noexceptenum FlexDirection : uint8_t 4
RowRowReverseColumnColumnReverseenum FlexWrap : uint8_t 3
NoWrapWrapWrapReverseenum FlexJustify : uint8_t 6
FlexStartFlexEndCenterSpaceBetweenSpaceAroundSpaceEvenlyenum FlexAlignItems : uint8_t 5
FlexStartFlexEndCenterStretchBaselineenum FlexAlignContent : uint8_t 7
FlexStartFlexEndCenterSpaceBetweenSpaceAroundSpaceEvenlyStretchenum FlexAlignSelf : uint8_t 6
AutoFlexStartFlexEndCenterStretchBaselinestruct FlexConfig 6
FlexDirection direction = FlexDirection::RowFlexWrap wrap = FlexWrap::NoWrapFlexJustify justifyContent = FlexJustify::FlexStartFlexAlignItems alignItems = FlexAlignItems::StretchFlexAlignContent alignContent = FlexAlignContent::Stretchfloat gap = 0.0fstruct FlexItemConfig 7
float flexGrow = 0.0ffloat flexShrink = 1.0ffloat flexBasis = -1.0fFlexAlignSelf alignSelf = FlexAlignSelf::Autoint order = 0float preferredWidth = 0.0ffloat preferredHeight = 0.0fclass FlexLayout 1
[[nodiscard]] std::vector<sgc::Rectf> compute( const sgc::Rectf& parentBounds, const FlexConfig& config, const std::vector<FlexItemConfig>& items) constenum GridAlign : uint8_t 5
StartCenterEndStretchusing GridTrackSize = std::variant<TrackFixed, TrackFraction, TrackAuto>;struct TrackFixed 1
float pixels = 0.0fstruct TrackFraction 1
float value = 1.0fstruct GridPlacement 4
int column = -1int row = -1int columnSpan = 1int rowSpan = 1struct GridLayoutConfig 6
std::vector<GridTrackSize> columnsstd::vector<GridTrackSize> rowsfloat columnGap = 0.0ffloat rowGap = 0.0fGridAlign justifyItems = GridAlign::StretchGridAlign alignItems = GridAlign::Stretchstruct GridArea 5
std::string nameint column = 0int row = 0int columnSpan = 1int rowSpan = 1class GridLayout 4
void defineArea(const std::string& name, int col, int row, int colSpan, int rowSpan)[[nodiscard]] GridPlacement placeInArea(const std::string& areaName) constvoid clearAreas() noexcept[[nodiscard]] std::vector<sgc::Rectf> compute( const sgc::Rectf& parentBounds, const GridLayoutConfig& config, std::vector<GridPlacement> placements, const std::vector<ChildHint>& hints) constenum Anchor : uint8_t 9
TopLeftTopCenterTopRightCenterLeftCenterCenterRightBottomLeftBottomCenterBottomRightenum LayoutDirection : uint8_t 2
HorizontalVerticalenum SizeMode : uint8_t 6
FixedFillWrapPercentinline float clampf(float value, float lo, float hi) noexceptinline float resolveDimension(SizeMode mode, float specified, float parentDim, float contentDim, float minDim, float maxDim) noexceptstruct Margin 6
float top = 0.0ffloat right = 0.0ffloat bottom = 0.0ffloat left = 0.0fstatic Margin all(float v) noexceptstatic Margin symmetric(float h, float v) noexceptstruct LayoutConstraints 12
SizeMode widthMode = SizeMode::WrapSizeMode heightMode = SizeMode::Wrapfloat width = 0.0ffloat height = 0.0ffloat minWidth = 0.0ffloat minHeight = 0.0ffloat maxWidth = 99999.0ffloat maxHeight = 99999.0fAnchor anchor = Anchor::TopLeftfloat spacing = 0.0fLayoutDirection direction = LayoutDirection::Verticalfloat flex = 0.0fstruct LayoutResult 2
sgc::Rectf boundsstd::string nodeIdclass LayoutEngine 7
LayoutEngine(float screenW, float screenH) noexceptvoid setScreenSize(float w, float h) noexceptfloat screenWidth() const noexceptfloat screenHeight() const noexceptsgc::Rectf computeAnchored(const LayoutConstraints& constraints, float contentW, float contentH) const noexceptstd::vector<sgc::Rectf> layoutChildren( const sgc::Rectf& parentBounds, const std::vector<LayoutConstraints>& childConstraints, LayoutDirection direction, float spacing = 0.0f) const noexceptvoid layoutTree(UINode& root, const std::map<UINodeId, LayoutConstraints>& constraints) constenum ModalButtonStyle : std::uint8_t 4
DefaultPrimaryDangerCancelenum ModalState : std::uint8_t 4
HiddenFadingInVisibleFadingOutstruct ModalButton 4
std::string labelstd::string resultIdModalButtonStyle style = ModalButtonStyle::Defaultbool focused = falsestruct ModalBackdrop 2
float opacity = 0.5fbool dismissOnClick = falsestruct ModalAnimation 4
float fadeInDuration = 0.2ffloat fadeOutDuration = 0.15fEasingType showEasing = EasingType::EaseOutBackEasingType hideEasing = EasingType::EaseInQuadstruct ModalConfig 9
std::string titlestd::string contentstd::vector<ModalButton> buttonsModalBackdrop backdropModalAnimation animationbool escapeToClose = truestd::string escapeResultId = "cancel"float width = 400.0ffloat minHeight = 0.0fclass Modal 26
Modal() noexcept = defaultexplicit Modal(const UITheme& theme) noexceptvoid show(ModalConfig config)void dismiss(const std::string& resultId)void hide() noexceptvoid onConfirmPressed()void onEscapePressed()void onBackdropClicked()void onFocusPrev() noexceptvoid onFocusNext() noexceptvoid onButtonClicked(int index)void update(float deltaTime) noexceptvoid setOnResult(std::function<void(const std::string&)> fn)void setTheme(const UITheme& theme) noexcept[[nodiscard]] const UITheme& theme() const noexcept[[nodiscard]] ModalState state() const noexcept[[nodiscard]] bool isVisible() const noexcept[[nodiscard]] bool isModal() const noexcept[[nodiscard]] const std::string& resultId() const noexcept[[nodiscard]] float animProgress() const noexcept[[nodiscard]] float displayScale() const noexcept[[nodiscard]] float displayAlpha() const noexcept[[nodiscard]] float backdropAlpha() const noexcept[[nodiscard]] const ModalConfig& config() const noexcept[[nodiscard]] const std::vector<ModalButton>& buttons() const noexcept[[nodiscard]] int focusIndex() const noexceptclass ModalManager 14
void push(ModalConfig config, std::function<void(const std::string&)> onResult = nullptr)[[nodiscard]] bool hasActiveModal() const noexcept[[nodiscard]] std::size_t count() const noexcept[[nodiscard]] const Modal* top() const noexcept[[nodiscard]] Modal* top() noexceptvoid onConfirmPressed()void onEscapePressed()void onFocusPrev()void onFocusNext()void onButtonClicked(int index)void onBackdropClicked()void update(float deltaTime)[[nodiscard]] std::size_t modalCount() const noexcept[[nodiscard]] const Modal& modalAt(std::size_t index) constenum ResponsiveProperty : uint8_t 7
VisibleFontSizeWidthHeightOpacityTextCustomenum ResponsiveStrategy : uint8_t 2
MobileFirstDesktopFirststruct Breakpoint 3
std::string namefloat minWidth = 0.0ffloat maxWidth = 99999.0fstruct ResponsiveRule 5
std::string breakpointstd::string nodeIdResponsiveProperty property = ResponsiveProperty::Customstd::string customKeystd::string valueclass ResponsiveLayout 14
void addBreakpoint(const std::string& name, float minWidth)void removeBreakpoint(const std::string& name)[[nodiscard]] const std::vector<Breakpoint>& breakpoints() const noexceptvoid setRule(const std::string& breakpoint, const std::string& nodeId, ResponsiveProperty property, const std::string& value)void setCustomRule(const std::string& breakpoint, const std::string& nodeId, const std::string& key, const std::string& value)void clearRulesForNode(const std::string& nodeId)void clearAllRules() noexceptvoid setStrategy(ResponsiveStrategy strategy) noexcept[[nodiscard]] ResponsiveStrategy strategy() const noexceptvoid mobileFirst()void desktopFirst()[[nodiscard]] std::string activeBreakpoint(float viewportWidth) constvoid apply(float viewportWidth, UINode& root) constvoid applyCustom( float viewportWidth, const std::function<void(const std::string& nodeId, ResponsiveProperty property, const std::string& customKey, const std::string& value)>& applicator) constenum Side : uint8_t 6
LeftRight[[nodiscard]] inline constexpr sgc::Rectf applyInsets( const sgc::Rectf& r, const Insets& ins) noexcept[[nodiscard]] inline SplitH splitHorizontal( const sgc::Rectf& r, float ratio, float gap = 0.0f) noexcept[[nodiscard]] inline SplitV splitVertical( const sgc::Rectf& r, float ratio, float gap = 0.0f) noexcept[[nodiscard]] inline ColumnLayout columnLayout( const sgc::Rectf& area, int count, float cellH, float gap) noexceptstruct Insets 6
float top = 0.0ffloat right = 0.0ffloat bottom = 0.0ffloat left = 0.0fstatic constexpr Insets uniform(float v) noexceptstatic constexpr Insets symmetric(float h, float v) noexceptstruct ColumnLayout 1
std::vector<sgc::Rectf> cellsstruct SplitH 2
sgc::Rectf leftsgc::Rectf rightstruct SplitV 2
sgc::Rectf topsgc::Rectf bottomstruct LayoutPanelStyle 1
float borderWidth = 1.0fstruct LayoutButtonStyle 2
float fontSize = 16.0ffloat borderWidth = 1.0fstruct TabDef 1
std::string labelstruct FormField 2
std::string labelstd::string valueclass ScreenLayout 21
explicit ScreenLayout(Screen& screen) noexcept[[nodiscard]] Screen& screen() noexcept[[nodiscard]] const Screen& screen() const noexceptvoid drawCenteredPanel(float w, float h, const LayoutPanelStyle& style)void drawHeader(std::string_view title, float height = 60.0f, const sgc::Colorf& bg = sgc::Colorf{0.1f, 0.1f, 0.15f, 1.0f}, const sgc::Colorf& textColor = sgc::Colorf{1.0f, 1.0f, 1.0f, 1.0f})void drawFooter(std::string_view text, float height = 40.0f, const sgc::Colorf& bg = sgc::Colorf{0.08f, 0.08f, 0.1f, 1.0f}, const sgc::Colorf& textColor = sgc::Colorf{0.7f, 0.7f, 0.7f, 1.0f})[[nodiscard]] sgc::Rectf drawSidebar( float width, Side side = Side::Left, const sgc::Colorf& bg = sgc::Colorf{0.12f, 0.12f, 0.15f, 1.0f})void drawButtonRow(const std::vector<std::string>& labels, float y, float height, const LayoutButtonStyle& style, const int* selectedIndex = nullptr)void drawPanelGrid(int rows, int cols, float gap, std::function<void(Screen&, sgc::Rectf, int, int)> drawCell)void drawScrollList(const std::vector<std::string>& items, float x, float y, float w, float h, int* scrollPos, int* selectedIndex)void drawLabeledField(float x, float y, float labelW, float fieldW, float height, std::string_view label, std::string_view value)void drawForm(const sgc::Rectf& area, const std::vector<FormField>& fields, float rowHeight = 30.0f)void drawStatusBar(const std::map<std::string, std::string>& items, float height = 24.0f)void drawProgressBar(const sgc::Rectf& rect, float progress, std::string_view label = "")[[nodiscard]] sgc::Rectf drawTabBar(const std::vector<TabDef>& tabs, int* activeTab, float y, float height = 32.0f)inline void drawProgressBar(Screen& screen, float x, float y, float w, float h, float progress, const sgc::Colorf& fillColor = {0.3f, 0.8f, 0.4f, 1}, const sgc::Colorf& bgColor = {0.2f, 0.2f, 0.2f, 0.8f})inline void drawButton(Screen& screen, float x, float y, float w, float h, const std::string& text, const sgc::Colorf& bg = {0.3f, 0.3f, 0.4f, 0.9f}, const sgc::Colorf& textColor = {1, 1, 1, 1})inline void drawLabelValue(Screen& screen, float x, float y, float w, float h, const std::string& label, const std::string& value, const sgc::Colorf& labelColor = {0.7f, 0.7f, 0.8f, 1}, const sgc::Colorf& valueColor = {1, 1, 1, 1})inline void drawStarRating(Screen& screen, float x, float y, float w, float h, int rating, int maxStars = 5, const sgc::Colorf& filledColor = {1, 0.85f, 0.2f, 1}, const sgc::Colorf& emptyColor = {0.4f, 0.4f, 0.4f, 1})inline void drawTooltip(Screen& screen, float x, float y, const std::string& text, const sgc::Colorf& bg = {0.1f, 0.1f, 0.15f, 0.95f})inline void drawNotification(Screen& screen, float screenW, const std::string& text, float progress = 1.0f, const sgc::Colorf& bg = {0.2f, 0.5f, 0.3f, 0.9f})struct ScrollBarStyle 6
float width = 6.0ffloat minThumbLength = 20.0ffloat cornerRadius = 3.0fbool autoHide = truefloat fadeDelaySec = 1.5ffloat opacity = 0.5fstruct ScrollViewConfig 14
float contentHeight = 0.0ffloat contentWidth = 0.0fbool verticalScroll = truebool horizontalScroll = falsebool bounceEffect = truebool snapToItem = falsefloat snapItemHeight = 0.0ffloat inertiaDamping = 0.92ffloat bounceDamping = 0.6ffloat wheelMultiplier = 40.0ffloat keyboardScrollAmount = 40.0fScrollBarStyle scrollBarbool virtualScrolling = falsefloat virtualItemHeight = 0.0fstruct VirtualScrollRange 3
std::size_t firstVisible = 0std::size_t lastVisible = 0float offsetY = 0.0fclass ScrollView 37
explicit ScrollView(ScrollViewConfig config = {}) noexcept[[nodiscard]] const sgc::Rectf& viewport() const noexceptvoid setViewport(const sgc::Rectf& vp) noexcept[[nodiscard]] float scrollY() const noexcept[[nodiscard]] float scrollX() const noexcept[[nodiscard]] float contentHeight() const noexcept[[nodiscard]] float contentWidth() const noexceptvoid setContentHeight(float h) noexceptvoid setContentWidth(float w) noexcept[[nodiscard]] const ScrollViewConfig& config() const noexceptvoid setConfig(const ScrollViewConfig& cfg) noexcept[[nodiscard]] float maxScrollY() const noexcept[[nodiscard]] float maxScrollX() const noexcept[[nodiscard]] bool canScrollVertically() const noexcept[[nodiscard]] bool canScrollHorizontally() const noexcept[[nodiscard]] float normalizedScrollY() const noexcept[[nodiscard]] float normalizedScrollX() const noexcept[[nodiscard]] bool containsPoint(float x, float y) const noexcept[[nodiscard]] bool isDragging() const noexcept[[nodiscard]] bool isScrolling() const noexceptvoid setScrollY(float y) noexceptvoid setScrollX(float x) noexceptvoid scrollToTop() noexceptvoid scrollToBottom() noexceptvoid ensureVisible(float itemTop, float itemHeight) noexceptvoid onMouseWheel(float delta)void onMouseWheelH(float delta)void onKeyboardScroll(float deltaX, float deltaY, bool pageScroll = false)void onDragBegin(float screenX, float screenY)void onDragMove(float screenX, float screenY)void onDragEnd(float velocityX = 0.0f, float velocityY = 0.0f)[[nodiscard]] VirtualScrollRange computeVisibleRange( std::size_t totalItems) const noexceptvoid applyToChildren(UINode& parent) constvoid update(float dt)[[nodiscard]] bool isScrollBarVisible() const noexcept[[nodiscard]] float scrollBarOpacity() const noexcept[[nodiscard]] sgc::Rectf scrollBarThumbRect() const noexceptenum AnchorPreset : std::uint8_t 12
TopLeftTopCenterTopRightCenterLeftCenterCenterRightBottomLeftBottomCenterBottomRightStretchHorizontalStretchVerticalStretchAllstruct UIAnchorConfig 10
AnchorPreset preset = AnchorPreset::TopLeftfloat marginLeft = 0.0ffloat marginRight = 0.0ffloat marginTop = 0.0ffloat marginBottom = 0.0ffloat pivotX = 0.0ffloat pivotY = 0.0fbool keepAspectRatio = false[[nodiscard]] static UIAnchorConfig uniform(AnchorPreset preset, float margin) noexcept[[nodiscard]] UIAnchorConfig withCenterPivot() const noexceptstruct UIResolvedBounds 3
UINodeId nodeId = 0sgc::Rectf boundsint zOrder = 0struct UIAnchorEntry 6
UINode* node = nullptrUIAnchorConfig configUINode* parentNode = nullptrfloat elementW = 0.0ffloat elementH = 0.0fint zOrder = 100class UIAnchorLayout 6
void setAnchor(UINode& node, const UIAnchorConfig& config, float elementW = 0.0f, float elementH = 0.0f, int zOrder = 100)void setAnchorRelative(UINode& node, UINode& parent, const UIAnchorConfig& config, float elementW = 0.0f, float elementH = 0.0f, int zOrder = 100)void removeAnchor(UINodeId nodeId)[[nodiscard]] std::vector<UIResolvedBounds> resolve(float screenW, float screenH)[[nodiscard]] std::size_t count() const noexceptvoid clear()enum UIAnimationType : std::uint8_t 10
FadeInFadeOutSlideLeftSlideRightSlideUpSlideDownScaleInScaleOutBouncePulsestruct UIAnimation 7
UIAnimationType type = UIAnimationType::FadeInfloat duration = 0.3ffloat delay = 0.0fvn::EasingType easing = vn::EasingType::EaseOutCubicbool loop = falsebool pingPong = falsefloat slideDistance = 100.0fstruct UIAnimationTransform 8
float offsetX = 0.0ffloat offsetY = 0.0ffloat scaleX = 1.0ffloat scaleY = 1.0ffloat alpha = 1.0ffloat rotation = 0.0f[[nodiscard]] UIAnimationTransform compose(const UIAnimationTransform& other) const noexcept[[nodiscard]] bool isIdentity() const noexceptstruct UIAnimationState 5
UIAnimation animationfloat elapsed = 0.0ffloat progress = 0.0fbool finished = falsebool forward = trueclass UIAnimator 8
void animate(UINodeId nodeId, const UIAnimation& animation)void update(float dt)[[nodiscard]] UIAnimationTransform getTransform(UINodeId nodeId) const[[nodiscard]] bool isAnimating(UINodeId nodeId) constvoid cancelAnimation(UINodeId nodeId)void cancelAll()[[nodiscard]] std::size_t activeCount() const noexcept[[nodiscard]] const std::vector<UIAnimationState>& getStates(UINodeId nodeId) constclass UIBuilder 32
UIBuilder(float screenW, float screenH) noexceptUIBuilder& padding(float p) noexceptUIBuilder& padding(float h, float v) noexceptUIBuilder& padding(float top, float right, float bottom, float left) noexceptUIBuilder& margin(float m) noexceptUIBuilder& area(const sgc::Rectf& rect) noexcept[[nodiscard]] sgc::Rectf workingArea() const noexcept[[nodiscard]] RowResult row(int count, float height = 40.0f, float gap = 8.0f) const[[nodiscard]] RowResult row(const std::vector<float>& widths, float height = 40.0f, float gap = 8.0f) const[[nodiscard]] ColResult column(int count, float itemHeight = 40.0f, float gap = 8.0f) const[[nodiscard]] GridResult grid(int rows, int cols, float gap = 8.0f) const[[nodiscard]] sgc::Rectf centered(float w, float h) const noexcept[[nodiscard]] sgc::Rectf centeredHorizontally(float w, float h, float y) const noexcept[[nodiscard]] sgc::Rectf centeredVertically(float w, float h, float x) const noexcept[[nodiscard]] sgc::Rectf topLeft(float w, float h) const noexcept[[nodiscard]] sgc::Rectf topCenter(float w, float h) const noexcept[[nodiscard]] sgc::Rectf topRight(float w, float h) const noexcept[[nodiscard]] sgc::Rectf bottomLeft(float w, float h) const noexcept[[nodiscard]] sgc::Rectf bottomCenter(float w, float h) const noexcept[[nodiscard]] sgc::Rectf bottomRight(float w, float h) const noexcept[[nodiscard]] sgc::Rectf left(float w, float h) const noexcept[[nodiscard]] sgc::Rectf right(float w, float h) const noexcept[[nodiscard]] SplitResult splitHorizontal(float ratio = 0.5f, float gap = 8.0f) const noexcept[[nodiscard]] VSplitResult splitVertical(float ratio = 0.5f, float gap = 8.0f) const noexceptUIBuilder& beginStack(float x, float y, float width) noexcept[[nodiscard]] sgc::Rectf stackItem(float height, float gap = 4.0f) noexcept[[nodiscard]] float stackY() const noexcept[[nodiscard]] bool isMobile() const noexcept[[nodiscard]] bool isTablet() const noexcept[[nodiscard]] bool isDesktop() const noexcept[[nodiscard]] float scale() const noexcept[[nodiscard]] int columns() const noexceptenum UIBindProperty : std::uint8_t 15
TextValueVisibleColorEnabledPositionXPositionYSizeWSizeHusing UIBindValue = std::variant<std::string, float, bool, int>;[[nodiscard]] inline std::string valueToString(const UIBindValue& v)[[nodiscard]] inline float valueToFloat(const UIBindValue& v)[[nodiscard]] inline bool valueToBool(const UIBindValue& v)inline void applyToNode(UINode& node, UIBindProperty prop, const UIBindValue& value)[[nodiscard]] inline UIBindValue readFromNode(const UINode& node, UIBindProperty prop)struct UIBindingEntry 3
std::string keyUINode* node = nullptrUIBindValue lastValuestruct UITwoWayBindingEntry 4
UINode* nodeA = nullptrUINode* nodeB = nullptrUIBindValue lastValueAUIBindValue lastValueBstruct UIExpressionBindingEntry 2
UINode* node = nullptrstd::string formatExprstruct UIListBindingEntry 4
UINode* listNode = nullptrstd::string dataKeystd::size_t lastCount = 0std::function<std::shared_ptr<UINode>(std::size_t)> factoryclass UIBindingContext 12
void set(const std::string& key, UIBindValue value)template <typename T> [[nodiscard]] T get(const std::string& key) constvoid setArray(const std::string& key, std::vector<UIBindValue> data)[[nodiscard]] const std::vector<UIBindValue>& getArray(const std::string& key) constvoid bind(const std::string& key, UINode& node, UIBindProperty property)void bindOneWay(UINode& source, UIBindProperty sourceProp, UINode& target, UIBindProperty targetProp)void bindTwoWay(UINode& nodeA, UIBindProperty propA, UINode& nodeB, UIBindProperty propB)void bindExpression(UINode& node, UIBindProperty property, const std::string& formatExpr)void bindList(UINode& listNode, const std::string& dataKey, std::function<std::shared_ptr<UINode>(std::size_t)> factory)void update()void clear()[[nodiscard]] std::size_t bindingCount() const noexceptenum DropResultType : std::uint8_t 4
AcceptedRejectedCancelledNoTargetenum DropZoneHighlight : std::uint8_t 4
NoneValidInvalidusing DropCallback = std::function<bool(const DragPayload&)>;struct DragPayload 4
std::string typestd::variant<int, float, std::string> dataUINodeId sourceNodeId = INVALID_UI_NODEstd::string iconstruct DropResult 2
DropResultType type = DropResultType::NoTargetUINodeId targetNodeId = INVALID_UI_NODEstruct DropTarget 4
UINodeId nodeId = INVALID_UI_NODEstd::vector<std::string> acceptedTypesDropCallback onDropsgc::Rectf boundsstruct DragRenderInfo 4
bool active = falsefloat mouseX = 0.0f, mouseY = 0.0fstd::string icon, payloadTypeUINodeId sourceNodeId = INVALID_UI_NODEstruct DropZoneRenderInfo 3
UINodeId nodeId = INVALID_UI_NODEsgc::Rectf boundsDropZoneHighlight highlight = DropZoneHighlight::Noneclass UIDragDropManager 18
void beginDrag(const DragPayload& payload, float mx, float my)void updateDrag(float mx, float my)[[nodiscard]] DropResult endDrag(float mx, float my)[[nodiscard]] DropResult cancelDrag()[[nodiscard]] bool isDragging() const noexcept[[nodiscard]] const DragPayload& currentPayload() const noexcept[[nodiscard]] float mouseX() const noexcept[[nodiscard]] float mouseY() const noexcept[[nodiscard]] float startX() const noexcept[[nodiscard]] float startY() const noexcept[[nodiscard]] UINodeId hoveredTarget() const noexcept[[nodiscard]] std::size_t targetCount() const noexceptvoid registerDropTarget(UINodeId nodeId, std::vector<std::string> types, DropCallback onDrop, const sgc::Rectf& bounds)void unregisterDropTarget(UINodeId nodeId)void updateTargetBounds(UINodeId nodeId, const sgc::Rectf& bounds)void clearTargets()[[nodiscard]] DragRenderInfo dragRenderInfo() const[[nodiscard]] std::vector<DropZoneRenderInfo> dropZoneRenderInfo() constenum UIEventType : std::uint8_t 20
ClickDoubleClickPressReleaseHoverHoverEnterHoverLeaveFocusBlurValueChangedTextChangedDragStartDragDragEndScrollKeyDownKeyUpTextInputusing UIEventHandler = std::function<void(UIEvent&)>;using UIEventHandlerId = std::uint64_t;struct UIEvent 10
UINodeId targetId = INVALID_UI_NODEfloat mouseX = 0.0ffloat mouseY = 0.0fint button = 0int keyCode = 0std::string textfloat deltaX = 0.0ffloat deltaY = 0.0fdouble timestamp = 0.0bool consumed = falseclass UIEventDispatcher 5
[[nodiscard]] UIEventHandlerId addEventListener( UINodeId nodeId, UIEventType eventType, UIEventHandler handler) noexcept[[nodiscard]] UIEventHandlerId addCaptureListener( UINodeId nodeId, UIEventType eventType, UIEventHandler handler) noexceptvoid removeEventListener(UIEventHandlerId handlerId) noexceptvoid dispatch(UINode& root, UIEvent& event) const[[nodiscard]] std::size_t handlerCount() const noexceptenum UIEventType : std::uint8_t 7
ValueChangedTextChangedVisibilityChangedCreatedDestroyedPressedBoundsChangedstruct UIEvent 8
UIEventType typeUINodeId nodeIdstd::string nodeNameUIRole nodeRolestd::uint64_t framestd::string oldValuestd::string newValue[[nodiscard]] std::string toJson() constclass UIEventLog 10
void setMaxEvents(std::size_t max)void record(UIEvent event)void clear()[[nodiscard]] const std::vector<UIEvent>& events() const noexcept[[nodiscard]] std::vector<UIEvent> eventsForNode(UINodeId id) const[[nodiscard]] std::vector<UIEvent> eventsSinceFrame(std::uint64_t frame) const[[nodiscard]] std::vector<UIEvent> eventsByType(UIEventType type) const[[nodiscard]] std::size_t eventCount() const noexcept[[nodiscard]] std::string toJson() const[[nodiscard]] std::string toJson(const std::vector<UIEvent>& events) constenum UIEventPhase : std::uint8_t 4
NoneCaptureTargetBubbleenum MouseEventType : std::uint8_t 4
PressReleaseMoveScrollenum KeyEventType : std::uint8_t 6
KeyDownKeyUpusing MouseEventHandler = std::function<void(UIMouseEvent&)>;using KeyEventHandler = std::function<void(UIKeyEvent&)>;using FocusEventHandler = std::function<void(UIFocusEvent&)>;using ListenerId = std::uint64_t;struct UIMouseEvent 11
float x = 0.0ffloat y = 0.0fint button = 0int clickCount = 1UINodeId targetId = INVALID_UI_NODEUIEventPhase phase = UIEventPhase::Nonebool propagationStopped = falsebool defaultPrevented = falsedouble timestamp = 0.0void stopPropagation() noexceptvoid preventDefault() noexceptstruct UIKeyEvent 9
int key = 0int modifiers = 0UINodeId targetId = INVALID_UI_NODEUIEventPhase phase = UIEventPhase::Nonebool propagationStopped = falsebool defaultPrevented = falsedouble timestamp = 0.0void stopPropagation() noexceptvoid preventDefault() noexceptstruct UIFocusEvent 6
UINodeId targetId = INVALID_UI_NODEUINodeId relatedTargetId = INVALID_UI_NODEUIEventPhase phase = UIEventPhase::Nonebool propagationStopped = falsedouble timestamp = 0.0void stopPropagation() noexceptclass UIEventProcessor 10
[[nodiscard]] ListenerId addMouseListener(UINodeId nodeId, MouseEventType type, MouseEventHandler handler, bool useCapture = false)[[nodiscard]] ListenerId addKeyListener(UINodeId nodeId, KeyEventType type, KeyEventHandler handler, bool useCapture = false)[[nodiscard]] ListenerId addFocusListener(UINodeId nodeId, bool isFocusIn, FocusEventHandler handler)void removeEventListener(ListenerId lid)bool processMouseEvent(UINode& root, float x, float y, MouseEventType type, int button = 0, double timestamp = 0.0)bool processKeyEvent(UINode& focusedNode, int key, KeyEventType type, int modifiers = 0, double timestamp = 0.0)void processFocusChange(UINode* oldNode, UINode* newNode, double timestamp = 0.0)[[nodiscard]] std::size_t listenerCount() const noexcept[[nodiscard]] inline bool isRoleFocusable(UIRole role) noexceptinline void buildFocusOrderImpl(UINode& node, std::vector<UINode*>& order)class UIFocusManager 15
void setFocusedNode(UINode* node) noexcept[[nodiscard]] UINode* getFocusedNode() const noexceptvoid clearFocus() noexcept[[nodiscard]] bool isFocused(UINodeId nodeId) const noexcept[[nodiscard]] std::vector<UINode*> buildFocusOrder(UINode& root) constvoid focusNext(UINode& root)void focusPrevious(UINode& root)[[nodiscard]] inline bool isPointInBounds(const UINode& node, float x, float y) noexceptinline void hitTestAllImpl(UINode& node, float x, float y, std::vector<UINode*>& results)[[nodiscard]] inline UINode* hitTest(UINode& root, float x, float y)[[nodiscard]] inline std::vector<UINode*> hitTestAll(UINode& root, float x, float y)[[nodiscard]] inline NineSliceRegions computeNineSliceRegions( const UINineSliceConfig& config, const sgc::Rectf& dest) noexceptinline void drawNineSliceToBatch( render::SpriteBatch& batch, const UINineSliceConfig& config, const sgc::Rectf& dest, const sgc::Colorf& tint)inline void drawNineSlice( render::SpriteBatch& batch, const render::Texture& texture, const UINineSliceConfig& config, const sgc::Rectf& dest, float alpha = 1.0f)[[nodiscard]] inline sgc::Rectf nineSliceMinimumSize(const UINineSliceConfig& config) noexceptstruct NineSliceRegions 2
sgc::Rectf destRects[9]sgc::Rectf uvRects[9]enum UIRole : std::uint8_t 22
ContainerLabelButtonProgressBarImageHealthBarScoreLabelMiniMapInventoryDialogBoxMenuItemTooltipPanelSliderToggleTextInputDropdownListViewTabBarCustomusing UINodeId = std::uint32_t;inline constexpr UINodeId INVALID_UI_NODE = 0struct UINodeData 8
UINodeId id = INVALID_UI_NODEstd::string nameUIRole role = UIRole::Containerstd::string textfloat value = 0.0ffloat maxValue = 1.0fbool visible = truestd::map<std::string, std::string> propertiesclass UINode 34
explicit UINode(UINodeData data)[[nodiscard]] UINodeId id() const noexcept[[nodiscard]] const std::string& name() const noexcept[[nodiscard]] UIRole role() const noexcept[[nodiscard]] const sgc::Rectf& bounds() const noexcept[[nodiscard]] const std::string& text() const noexcept[[nodiscard]] float value() const noexcept[[nodiscard]] float maxValue() const noexcept[[nodiscard]] const sgc::Colorf& color() const noexcept[[nodiscard]] bool visible() const noexcept[[nodiscard]] const UINodeData& data() const noexcept[[nodiscard]] bool focusable() const noexcept[[nodiscard]] bool hitTestEnabled() const noexcept[[nodiscard]] int zIndex() const noexcept[[nodiscard]] bool interactable() const noexceptvoid setBounds(const sgc::Rectf& bounds)void setText(const std::string& text)void setValue(float value)void setVisible(bool visible)void setFocusable(bool focusable) noexceptvoid setHitTestEnabled(bool enabled) noexceptvoid setZIndex(int zIndex) noexceptvoid setInteractable(bool interactable) noexceptvoid setProperty(const std::string& key, const std::string& value)[[nodiscard]] std::string getProperty(std::string_view key) constvoid addChild(std::shared_ptr<UINode> child)void removeChild(UINodeId childId)[[nodiscard]] const std::vector<std::shared_ptr<UINode>>& children() const noexcept[[nodiscard]] std::size_t childCount() const noexcept[[nodiscard]] UINode* parent() const noexcept[[nodiscard]] UINode* findById(UINodeId id)[[nodiscard]] UINode* findByName(std::string_view name)[[nodiscard]] std::vector<const UINode*> findByRole(UIRole role) const[[nodiscard]] std::string toJson() constenum NotificationType : std::uint8_t 5
InfoSuccessWarningErrorAchievementenum NotificationPosition : std::uint8_t 6
TopRightTopLeftBottomRightBottomLeftTopCenterBottomCenterstruct NotificationAction 2
std::string labelstd::function<void()> onClickstruct UINotification 6
NotificationType type = NotificationType::Infostd::string title, message, iconfloat duration = 5.0fstd::vector<NotificationAction> actionsstd::function<void()> onClickstd::function<float()> getProgressstruct NotificationQueueConfig 6
NotificationPosition position = NotificationPosition::TopRightint maxVisible = 5float width = 350.0f, minHeight = 60.0f, spacing = 8.0ffloat marginX = 16.0f, marginY = 16.0ffloat slideInDuration = 0.25f, slideOutDuration = 0.2ffloat screenWidth = 1920.0f, screenHeight = 1080.0fstruct NotificationRenderInfo 6
std::uint32_t id = 0NotificationType type = NotificationType::Infostd::string title, message, iconsgc::Rectf boundsfloat opacity = 1.0f, slideOffset = 0.0f, progress = -1.0fstd::vector<std::string> actionLabelsclass UINotificationQueue 23
explicit UINotificationQueue(const NotificationQueueConfig& cfg = {})void setScreenBounds(float w, float h) noexceptvoid setOnDismissed(std::function<void(std::uint32_t)> cb)[[nodiscard]] const NotificationQueueConfig& config() const noexceptstd::uint32_t push(const UINotification& n)std::uint32_t pushInfo(const std::string& t, const std::string& m)std::uint32_t pushSuccess(const std::string& t, const std::string& m)std::uint32_t pushWarning(const std::string& t, const std::string& m)std::uint32_t pushError(const std::string& t, const std::string& m)std::uint32_t pushWithProgress(const std::string& title, std::function<float()> gp)void dismiss(std::uint32_t id)void dismissAll()void setNotificationHeight(std::uint32_t id, float h)[[nodiscard]] std::size_t visibleCount() const noexcept[[nodiscard]] std::size_t pendingCount() const noexcept[[nodiscard]] std::size_t totalCount() const noexcept[[nodiscard]] std::vector<NotificationRenderInfo> getVisible() constvoid update(float dt)inline void skipWS(const std::string& s, std::size_t& p) noexcept[[nodiscard]] inline std::string readStr(const std::string& s, std::size_t& p)[[nodiscard]] inline float readNum(const std::string& s, std::size_t& p)inline void skipVal(const std::string& s, std::size_t& p)[[nodiscard]] inline sgc::Colorf parseHexColor(const std::string& hex)struct UIPrefabNodeDef 10
std::string typestd::string namestd::string textfloat value = 0.0f, maxValue = 1.0ffloat width = 0.0f, height = 0.0fstd::string onClickstd::string backgroundColorfloat cornerRadius = 0.0fstd::unordered_map<std::string, std::string> bindDefsstd::vector<UIPrefabNodeDef> childrenclass UIPrefab 5
[[nodiscard]] static UIPrefab loadFromJson(const std::string& jsonStr)explicit UIPrefab(UIPrefabNodeDef root)[[nodiscard]] std::shared_ptr<UINode> instantiate() const[[nodiscard]] std::shared_ptr<UINode> instantiateWithBindings(UIBindingContext& ctx) const[[nodiscard]] const UIPrefabNodeDef& rootDef() const noexceptclass UIStateManager 4
void setState(UINodeId nodeId, UIVisualState state)[[nodiscard]] UIVisualState getState(UINodeId nodeId) constvoid clearState(UINodeId nodeId)void clearAll()class UIRenderer 4
void setTextureCache(const std::map<std::string, render::Texture>& cache)void addTexture(const std::string& key, const render::Texture& texture)void render(Screen& screen, const UINode& root, const UIStyleSheet& sheet, const UIStateManager& stateManager, const UIAnimator* animator = nullptr) constvoid renderNode(Screen& screen, const UINode& node, const UIBoxStyle& boxStyle, const UITextStyle& textStyle, UIVisualState state, const UIAnimationTransform* animTransform = nullptr, const UIWidgetMetrics* metrics = nullptr) conststruct RichTextSegment 6
std::string textbool bold = falsebool italic = falsefloat fontSize = 16.0fstd::string linkstd::string emojistruct RichTextMeasurement 3
float width = 0.0ffloat height = 0.0fint lineCount = 0class UIRichText 7
void setDefaultFontSize(float s) noexceptvoid setDefaultColor(const sgc::Colorf& c) noexcept[[nodiscard]] float defaultFontSize() const noexcept[[nodiscard]] const sgc::Colorf& defaultColor() const noexcept[[nodiscard]] std::vector<RichTextSegment> parse(std::string_view markup) const[[nodiscard]] RichTextMeasurement measure(const std::vector<RichTextSegment>& segs, float maxW) const noexcepttemplate <typename ScreenT> void render(ScreenT& screen, const std::vector<RichTextSegment>& segs, const sgc::Rectf& rect) constenum SmartTooltipPosition : std::uint8_t 5
AutoAboveBelowLeftRightenum TooltipContentType : std::uint8_t 4
PlainTextRichTextCustomusing TooltipDrawCallback = std::function<void(const sgc::Rectf&, float)>;struct SmartTooltipConfig 7
float showDelay = 0.4f, hideDelay = 0.15ffloat maxWidth = 320.0f, padding = 10.0f, arrowSize = 8.0fSmartTooltipPosition position = SmartTooltipPosition::Autobool arrowEnabled = true, followMouse = false, pinnable = falsefloat fadeInDuration = 0.12f, fadeOutDuration = 0.08ffloat screenMargin = 6.0f, screenWidth = 1920.0f, screenHeight = 1080.0fUIBoxStyle panelStyleclass SmartTooltip 22
explicit SmartTooltip(const SmartTooltipConfig& cfg = {})[[nodiscard]] bool isVisible() const noexcept[[nodiscard]] float opacity() const noexcept[[nodiscard]] bool isPinned() const noexcept[[nodiscard]] const sgc::Rectf& bounds() const noexcept[[nodiscard]] SmartTooltipPosition resolvedPosition() const noexcept[[nodiscard]] const std::string& text() const noexcept[[nodiscard]] TooltipContentType contentType() const noexcept[[nodiscard]] const SmartTooltipConfig& config() const noexcept[[nodiscard]] bool arrowEnabled() const noexcept[[nodiscard]] const TooltipDrawCallback& drawCallback() const noexceptvoid setScreenBounds(float w, float h) noexceptvoid setConfig(const SmartTooltipConfig& c)void setContentSize(float w, float h) noexceptvoid show(const std::string& text, const sgc::Rectf& anchor)void showRich(const std::string& richText, const sgc::Rectf& anchor)void showCustom(TooltipDrawCallback cb, const sgc::Rectf& anchor)void hide()void hideImmediate()void togglePin()void updateMousePosition(float x, float y) noexceptvoid update(float dt)class SmartTooltipGroup 7
void add(const std::string& key, const SmartTooltipConfig& cfg = {})void show(const std::string& key, const std::string& text, const sgc::Rectf& anchor)void hideActive()void update(float dt)[[nodiscard]] SmartTooltip* get(const std::string& key)[[nodiscard]] const std::string& activeKey() const noexcept[[nodiscard]] std::size_t size() const noexceptstruct UIElementInfo 9
UINodeId id = INVALID_UI_NODEstd::string nameUIRole role = UIRole::Containerstd::string textfloat value = 0.0ffloat maxValue = 1.0fbool visible = truestd::vector<UIElementInfo> children[[nodiscard]] std::string toJson() constclass UISnapshot 4
[[nodiscard]] static UIElementInfo capture(const UINode& root)[[nodiscard]] static std::vector<UIElementInfo> flatten(const UINode& root)[[nodiscard]] static std::string toJson(const UINode& root)[[nodiscard]] static std::string toSummaryJson(const UINode& root)enum UIVisualState : std::uint8_t 6
NormalHoveredPressedFocusedDisabledActivestruct UIDragState 5
bool dragging = falsefloat startX = 0.0ffloat startY = 0.0ffloat currentX = 0.0ffloat currentY = 0.0fstruct UIInteractiveState 9
UIVisualState visualState = UIVisualState::Normalbool hovered = falsebool pressed = falsebool focused = falsebool disabled = falseUIDragState dragStatefloat value = 0.0fbool checked = falsestd::string textclass UIStateManager 6
void processInput(UINode& root, const InputState& input, UIEventDispatcher& dispatcher)[[nodiscard]] UIInteractiveState getState(UINodeId nodeId) constvoid setState(UINodeId nodeId, const UIInteractiveState& state)void setDisabled(UINodeId nodeId, bool disabled)[[nodiscard]] UIFocusManager& focusManager() noexcept[[nodiscard]] const UIFocusManager& focusManager() const noexceptenum UIVisualState : std::uint8_t 5
NormalHoveredPressedFocusedDisabledenum UIFontWeight : std::uint8_t 2
NormalBoldenum UITextAlign : std::uint8_t 3
LeftCenterRightenum UIVerticalAlign : std::uint8_t 3
TopMiddleBottomenum UITextOverflow : std::uint8_t 3
VisibleHiddenEllipsisstruct UIEdgeInsets 6
float top = 0.0ffloat right = 0.0ffloat bottom = 0.0ffloat left = 0.0f[[nodiscard]] static constexpr UIEdgeInsets uniform(float value) noexcept[[nodiscard]] static constexpr UIEdgeInsets symmetric(float horizontal, float vertical) noexceptstruct UIOffset 2
float x = 0.0ffloat y = 0.0fstruct UINineSliceConfig 10
std::uint32_t textureId = 0float cornerW = 16.0ffloat cornerH = 16.0ffloat edgeInsetLeft = 16.0ffloat edgeInsetRight = 16.0ffloat edgeInsetTop = 16.0ffloat edgeInsetBottom = 16.0ffloat textureW = 64.0ffloat textureH = 64.0f[[nodiscard]] static UINineSliceConfig uniform( std::uint32_t texId, float corner, float texW, float texH) noexceptstruct UIWidgetMetrics 19
float sliderTrackHeightRatio = 0.3ffloat sliderTrackMinHeight = 4.0ffloat sliderHandleRadiusRatio = 0.4ffloat toggleBoxSize = 20.0ffloat toggleInnerMargin = 3.0ffloat toggleLabelGap = 8.0ffloat dropdownArrowSize = 8.0ffloat dropdownArrowSpace = 20.0ffloat textInputCursorWidth = 2.0ffloat textInputCursorMarginX = 2.0ffloat textInputCursorMarginY = 2.0ffloat textInputTextOffsetX = 4.0fstd::string sliderHandleImageKeystd::string sliderFillImageKeystd::string toggleOnImageKeystd::string toggleOffImageKeystd::string progressFillImageKeystd::string dropdownArrowImageKeystd::string textInputCursorImageKeystruct UIBoxStyle 7
std::optional<std::string> backgroundImageKeystd::optional<UINineSliceConfig> backgroundNineSlicefloat borderRadius = 0.0ffloat shadowBlur = 0.0ffloat opacity = 1.0f[[nodiscard]] sgc::Rectf contentRect(const sgc::Rectf& bounds) const noexcept[[nodiscard]] sgc::Rectf marginRect(const sgc::Rectf& bounds) const noexceptstruct UITextStyle 7
float fontSize = 16.0fUIFontWeight fontWeight = UIFontWeight::NormalUITextAlign textAlign = UITextAlign::LeftUIVerticalAlign verticalAlign = UIVerticalAlign::Topfloat lineHeight = 1.2ffloat letterSpacing = 0.0fUITextOverflow overflow = UITextOverflow::Visiblestruct UIBoxStyleOverride 8
std::optional<sgc::Colorf> backgroundColorstd::optional<sgc::Colorf> borderColorstd::optional<UIEdgeInsets> borderWidthstd::optional<float> borderRadiusstd::optional<sgc::Colorf> shadowColorstd::optional<UIOffset> shadowOffsetstd::optional<float> shadowBlurstd::optional<float> opacitystruct UITextStyleOverride 3
std::optional<sgc::Colorf> colorstd::optional<float> fontSizestd::optional<UIFontWeight> fontWeightstruct UIStateStyles 12
UIBoxStyle boxStyleUITextStyle textStyleUIWidgetMetrics widgetMetricsstd::optional<UIBoxStyleOverride> hoveredstd::optional<UIBoxStyleOverride> pressedstd::optional<UIBoxStyleOverride> focusedstd::optional<UIBoxStyleOverride> disabledstd::optional<UITextStyleOverride> hoveredTextstd::optional<UITextStyleOverride> pressedTextstd::optional<UITextStyleOverride> focusedTextstd::optional<UITextStyleOverride> disabledText[[nodiscard]] Resolved resolve(UIVisualState state) constclass UIStyleSheet 9
void buildDefaults(const UITheme& theme)void setStyle(UIRole role, const UIStateStyles& styles)[[nodiscard]] const UIStateStyles& getStyle(UIRole role) constvoid setClassStyle(const std::string& className, const UIStateStyles& styles)[[nodiscard]] const UIStateStyles* getClassStyle(const std::string& className) const[[nodiscard]] const UIStateStyles& resolveForNode(const UINode& node) const[[nodiscard]] const std::map<UIRole, UIStateStyles>& roleStyles() const noexcept[[nodiscard]] const std::map<std::string, UIStateStyles>& classStyles() const noexcept[[nodiscard]] std::string toJson() constclass UITemplate 7
static std::shared_ptr<UINode> fromJson(const std::string& jsonTemplate)static std::string toJson(const UINode& root)static std::shared_ptr<UINode> createHUD(float screenW, float screenH)static std::shared_ptr<UINode> createElement(const std::string& typeName, const std::string& name)static UIRole roleFromString(const std::string& typeName)static std::string roleToString(UIRole role)static Anchor anchorFromString(const std::string& anchorName)struct ThemeMetrics 8
float fontSize = 16.0ffloat titleFontSize = 24.0ffloat padding = 8.0ffloat margin = 4.0ffloat borderWidth = 1.0ffloat barHeight = 20.0ffloat buttonHeight = 32.0ffloat cornerRadius = 4.0fstruct UIThemeStyle 5
sgc::Colorf backgroundsgc::Colorf foregroundsgc::Colorf borderfloat fontSizefloat paddingclass UITheme 13
UITheme() = defaultexplicit UITheme(ThemeColors colors, ThemeMetrics metrics = {})const ThemeColors& colors() const noexceptconst ThemeMetrics& metrics() const noexceptvoid setColors(const ThemeColors& colors)void setMetrics(const ThemeMetrics& metrics)UIThemeStyle styleFor(UIRole role) constvoid setStyleFor(UIRole role, const UIThemeStyle& style)static UITheme dark()static UITheme light()static UITheme cyberpunk()static UITheme retro()std::string toJson() conststruct UINodeProperties 9
float posX = 0.0ffloat posY = 0.0ffloat sizeW = 0.0ffloat sizeH = 0.0ffloat opacity = 1.0ffloat scaleX = 1.0ffloat scaleY = 1.0fbool visible = true[[nodiscard]] static UINodeProperties lerp( const UINodeProperties& a, const UINodeProperties& b, float t) noexceptstruct UIState 2
std::string namestd::unordered_map<UINodeId, UINodeProperties> nodePropertiesstruct UITransitionDef 5
std::string fromStatestd::string toStatefloat duration = 0.3fvn::EasingType easing = vn::EasingType::EaseOutCubicfloat perNodeDelay = 0.0fstruct UINodeTransitionState 6
UINodeId nodeId = 0UINodeProperties fromUINodeProperties tofloat delay = 0.0ffloat elapsed = 0.0fbool finished = falsestruct UIActiveTransition 4
UITransitionDef defstd::vector<UINodeTransitionState> nodesfloat totalElapsed = 0.0fbool finished = falseclass UIStateManager 10
void defineState(const std::string& name, std::unordered_map<UINodeId, UINodeProperties> nodeProperties)void registerNode(UINode& node)void registerNodes(const std::vector<UINode*>& nodes)void transitionTo(const std::string& stateName, float duration = 0.3f, vn::EasingType easing = vn::EasingType::EaseOutCubic, float perNodeDelay = 0.0f)void update(float dt)[[nodiscard]] const std::string& getCurrentState() const noexcept[[nodiscard]] bool isTransitioning() const noexcept[[nodiscard]] std::size_t activeTransitionCount() const noexcept[[nodiscard]] std::size_t stateCount() const noexceptvoid applyStateImmediate(const std::string& stateName)struct UIAccordionSection 5
std::string titlebool expanded = falsestd::string headerImageKeyfloat contentHeight = 100.0fstd::string iconImageKeystruct UIAccordionConfig 17
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<UIAccordionSection> sectionsbool allowMultipleOpen = falsefloat headerHeight = 40.0fstd::string headerBackgroundImageKeystd::string headerHoverImageKeystd::string headerActiveImageKeystd::string expandIconImageKeystd::string collapseIconImageKeystd::string contentBackgroundImageKeyfloat animationDuration = 0.25ffloat spacing = 0.0ffloat padding = 8.0ffloat fontSize = 14.0ffloat headerFontSize = 16.0ffloat width = 300.0fclass UIAccordion 10
explicit UIAccordion(const UIAccordionConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::size_t sectionCount() const noexcept[[nodiscard]] bool isExpanded(std::size_t index) const noexcept[[nodiscard]] float animProgress(std::size_t index) const noexceptvoid setOnSectionToggled(std::function<void(std::size_t, bool)> callback)void toggle(std::size_t index)void expandAll()void collapseAll()void update(float dt)enum AvatarStatus : std::uint8_t 5
NoneOnlineOfflineAwayBusystruct UIAvatarConfig 16
UINodeId id = INVALID_UI_NODEstd::string namefloat size = 48.0fstd::string imageKeystd::string fallbackTextfloat borderWidth = 2.0fstd::string borderColor = "cccccc"std::string borderImageKeyAvatarStatus statusIndicator = AvatarStatus::Nonestd::string statusColor = "00ff00"float statusSize = 12.0fstd::string statusPosition = "bottom_right"std::string backgroundImageKeybool clickable = falsefloat fallbackFontSize = 18.0fstd::string fallbackBackgroundColor = "888888"class UIAvatar 14
explicit UIAvatar(const UIAvatarConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] const std::string& imageKey() const noexcept[[nodiscard]] const std::string& fallbackText() const noexcept[[nodiscard]] AvatarStatus status() const noexcept[[nodiscard]] bool hasImage() const noexcept[[nodiscard]] bool isClickable() const noexceptvoid setOnClick(std::function<void()> callback)void setImage(const std::string& key)void setStatus(AvatarStatus newStatus)void setFallbackText(const std::string& text)void onPointerEnter()void onPointerLeave()void onPointerUp()enum BadgePosition : std::uint8_t 4
TopRightTopLeftBottomRightBottomLeftstruct UIBadgeConfig 16
UINodeId id = INVALID_UI_NODEstd::string nameint maxCount = 99float fontSize = 11.0ffloat minSize = 20.0ffloat padding = 4.0fstd::string backgroundImageKeystd::string textColor = "ffffff"std::string backgroundColor = "ff0000"BadgePosition position = BadgePosition::TopRightfloat offsetX = 0.0ffloat offsetY = 0.0fbool pulseAnimation = truebool hideWhenZero = truefloat pulseDuration = 0.4ffloat pulseScale = 1.3fclass UIBadge 10
explicit UIBadge(const UIBadgeConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] int getCount() const noexcept[[nodiscard]] bool isVisible() const noexcept[[nodiscard]] bool isPulsing() const noexcept[[nodiscard]] std::string displayText() constvoid setCount(int count)void show()void hide()void update(float dt)enum ButtonState : std::uint8_t 4
NormalHoveredPressedDisabledstruct UIButtonConfig 7
UINodeId id = INVALID_UI_NODEstd::string namestd::string textfloat width = 120.0ffloat height = 32.0fbool enabled = truebool toggleable = falseclass UIButton 13
explicit UIButton(const UIButtonConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] ButtonState state() const noexcept[[nodiscard]] bool isEnabled() const noexcept[[nodiscard]] bool isToggled() const noexcept[[nodiscard]] const std::string& text() const noexceptvoid setOnClick(std::function<void()> callback)void setEnabled(bool enabled)void setText(const std::string& text)void onPointerEnter()void onPointerLeave()void onPointerDown()void onPointerUp()struct UICardContent 5
std::string titlestd::string descriptionstd::string imageKeystd::vector<std::string> tagsstd::vector<std::string> actionLabelsstruct UICardConfig 22
UINodeId id = INVALID_UI_NODEstd::string namefloat width = 280.0ffloat imageHeight = 160.0ffloat padding = 12.0ffloat titleFontSize = 18.0ffloat descFontSize = 13.0fstd::string backgroundImageKeystd::string imageKeystd::string hoverImageKeyfloat borderRadius = 8.0ffloat shadowOffsetX = 0.0ffloat shadowOffsetY = 2.0ffloat shadowBlur = 8.0fstd::string shadowColor = "00000040"float elevation = 1.0ffloat hoverElevation = 3.0ffloat actionBarHeight = 36.0fstd::string actionBarImageKeyfloat tagFontSize = 11.0ffloat tagHeight = 20.0ffloat tagSpacing = 4.0fclass UICard 12
explicit UICard(const UICardConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] const UICardContent& content() const noexcept[[nodiscard]] bool isHovered() const noexceptvoid setOnClicked(std::function<void()> callback)void setOnActionClicked(std::function<void(std::size_t)> callback)void setContent(const UICardContent& newContent)void update(bool pointerInside, bool pointerPressed)void onActionClick(std::size_t actionIndex)void onPointerEnter()void onPointerLeave()void onPointerUp()struct UICarouselItem 3
std::string imageKeystd::string titlestd::string descriptionstruct UICarouselConfig 22
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<UICarouselItem> itemsint visibleItems = 3float itemWidth = 200.0ffloat itemHeight = 250.0ffloat spacing = 16.0ffloat centerScale = 1.2ffloat sideScale = 0.8ffloat sideAlpha = 0.6fbool autoPlay = falsefloat autoPlayInterval = 3.0fbool showDots = truebool showArrows = truestd::string arrowLeftImageKeystd::string arrowRightImageKeystd::string dotImageKeystd::string dotActiveImageKeystd::string backgroundImageKeyfloat animationDuration = 0.3ffloat swipeThreshold = 50.0fbool loopEnabled = trueclass UICarousel 14
explicit UICarousel(const UICarouselConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] int currentIndex() const noexcept[[nodiscard]] std::size_t itemCount() const noexcept[[nodiscard]] bool isAnimating() const noexceptvoid setOnItemChanged(std::function<void(int)> callback)void setAutoPlay(bool enabled)void next()void previous()void goTo(int index)void onSwipeBegin()void onSwipeUpdate(float deltaX)void onSwipeEnd()void update(float dt)struct UIChatMessage 5
std::string senderstd::string textdouble timestamp = 0.0std::string channelstd::string iconImageKeystruct UIChatChannel 3
std::string namestd::string iconImageKeybool enabled = truestruct UIChatScrollBarStyle 4
float width = 8.0ffloat minThumbHeight = 20.0fstd::string trackImageKeystd::string thumbImageKeystruct UIChatWindowConfig 16
float width = 400.0ffloat height = 300.0fstd::size_t maxMessages = 200float inputHeight = 28.0fstd::string backgroundImageKeystd::string inputBackgroundImageKeyfloat channelTabHeight = 24.0fstd::string channelTabImageKeyUIChatScrollBarStyle scrollBarStylefloat messagePadding = 4.0ffloat messageFontSize = 14.0ffloat senderFontSize = 14.0ffloat timestampFontSize = 11.0fbool showTimestamps = truebool showSenderIcon = truestd::size_t inputHistorySize = 32class UIChatWindow 26
explicit UIChatWindow(const UIChatWindowConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] const UIChatWindowConfig& config() const noexceptvoid addMessage(UIChatMessage msg)[[nodiscard]] const std::deque<UIChatMessage>& messages() const noexcept[[nodiscard]] std::vector<const UIChatMessage*> filteredMessages() const[[nodiscard]] std::size_t messageCount() const noexceptvoid clearMessages()void setInput(const std::string& text)[[nodiscard]] const std::string& getInput() const noexceptvoid clearInput()void submitInput()void inputHistoryUp()void inputHistoryDown()void addChannel(UIChatChannel channel)void setActiveChannel(const std::string& name)[[nodiscard]] const std::string& activeChannel() const noexcept[[nodiscard]] const std::vector<UIChatChannel>& channels() const noexceptvoid setChannelEnabled(const std::string& name, bool enabled)void scroll(float delta)void scrollToBottom()[[nodiscard]] bool isAutoScrolling() const noexcept[[nodiscard]] float scrollOffset() const noexceptvoid setMaxScrollOffset(float maxOffset)void setOnMessageSent(std::function<void(const std::string&, const std::string&)> callback)void setOnChannelChanged(std::function<void(const std::string&)> callback)enum ColorPickerInteraction : std::uint8_t 5
NoneSaturationValueHueBarAlphaBarEyedropperstruct UIColorRGBA 4
float r = 1.0ffloat g = 1.0ffloat b = 1.0ffloat a = 1.0fstruct UIColorHSV 3
float h = 0.0ffloat s = 1.0ffloat v = 1.0fstruct UIColorPreset 4
float r = 0.0ffloat g = 0.0ffloat b = 0.0ffloat a = 1.0fstruct UIColorPickerConfig 17
UINodeId id = INVALID_UI_NODEstd::string namefloat width = 260.0ffloat height = 300.0fbool showAlpha = truebool showHex = truebool showRGB = truebool showHSV = falsestd::vector<UIColorPreset> presetColorsfloat hueBarWidth = 20.0ffloat alphaBarHeight = 16.0ffloat previewSize = 40.0fstd::string backgroundImageKeystd::string hueBarImageKeyfloat alphaCheckerSize = 8.0ffloat fontSize = 12.0ffloat labelWidth = 20.0fclass UIColorPicker 19
explicit UIColorPicker(const UIColorPickerConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] UIColorRGBA getColor() const noexcept[[nodiscard]] UIColorHSV getHSV() const noexcept[[nodiscard]] float getAlpha() const noexcept[[nodiscard]] std::string getHex() const[[nodiscard]] bool isEyedropperActive() const noexceptvoid setOnColorChanged(std::function<void(const UIColorRGBA&)> callback)void setColor(float r, float g, float b, float a = 1.0f)void setHSV(float h, float s, float v)void setAlpha(float a)void selectPreset(std::size_t index)void onInteractionBegin(ColorPickerInteraction component)void onSaturationValueUpdate(float normX, float normY)void onHueBarUpdate(float normY)void onAlphaBarUpdate(float normX)void onInteractionEnd()void toggleEyedropper()void onEyedropperPick(float r, float g, float b)enum WindowResizeEdge : std::uint8_t 9
NoneLeftRightTopBottomTopLeftTopRightBottomLeftBottomRightstruct UIDraggableWindowConfig 24
UINodeId id = INVALID_UI_NODEstd::string namestd::string titlefloat width = 400.0ffloat height = 300.0ffloat minWidth = 150.0ffloat minHeight = 100.0ffloat maxWidth = 2000.0ffloat maxHeight = 2000.0fbool resizable = truebool closeable = truebool minimizable = truebool draggable = truefloat titleBarHeight = 28.0fstd::string titleBarImageKeystd::string backgroundImageKeystd::string closeButtonImageKeystd::string minimizeButtonImageKeystd::string resizeHandleImageKeyfloat borderWidth = 1.0ffloat padding = 4.0ffloat titleFontSize = 14.0ffloat initialX = 100.0ffloat initialY = 100.0fclass UIDraggableWindow 30
explicit UIDraggableWindow(const UIDraggableWindowConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] bool isOpen() const noexcept[[nodiscard]] bool isMinimized() const noexcept[[nodiscard]] bool isDragging() const noexcept[[nodiscard]] bool isResizing() const noexcept[[nodiscard]] float posX() const noexcept[[nodiscard]] float posY() const noexcept[[nodiscard]] float width() const noexcept[[nodiscard]] float height() const noexcept[[nodiscard]] std::uint32_t zOrder() const noexcept[[nodiscard]] const std::string& title() const noexcept[[nodiscard]] sgc::Rectf contentBounds() const noexcept[[nodiscard]] sgc::Rectf titleBarBounds() const noexceptvoid addChild(std::shared_ptr<UINode> child)[[nodiscard]] const std::vector<std::shared_ptr<UINode>>& children() const noexceptvoid open()void close()void minimize()void restore()void setTitle(const std::string& title)void setZOrder(std::uint32_t z)void bringToFront()void setOnClose(std::function<void()> callback)void setOnMinimize(std::function<void()> callback)void setOnRestore(std::function<void()> callback)void setOnBringToFront(std::function<void(std::uint32_t)> callback)void onPointerDown(float px, float py)void onPointerMove(float px, float py)void onPointerUp()struct UIDropdownConfig 7
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<std::string> optionsint selectedIndex = -1float width = 180.0ffloat itemHeight = 24.0fint maxVisibleItems = 6class UIDropdown 20
explicit UIDropdown(const UIDropdownConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] bool isOpen() const noexcept[[nodiscard]] int selectedIndex() const noexcept[[nodiscard]] std::string selectedText() const[[nodiscard]] const std::vector<std::string>& options() const noexcept[[nodiscard]] int scrollOffset() const noexcept[[nodiscard]] int highlightedIndex() const noexceptvoid setOnSelectionChanged(std::function<void(int)> callback)void setOptions(std::vector<std::string> options)void setSelectedIndex(int index)void toggle()void open()void close()void selectItem(int index)void highlightItem(int index)void highlightPrevious()void highlightNext()void confirmHighlighted()void scroll(int delta)enum FloatingTextFontWeight : std::uint8_t 8
NormalBoldExtraBold[[nodiscard]] inline UIFloatingTextStyle damageStyle() noexcept[[nodiscard]] inline UIFloatingTextStyle healStyle() noexcept[[nodiscard]] inline UIFloatingTextStyle criticalStyle() noexcept[[nodiscard]] inline UIFloatingTextStyle itemPickupStyle() noexcept[[nodiscard]] inline UIFloatingTextStyle expGainStyle() noexceptstruct UIFloatingTextStyle 6
float fontSize = 24.0ffloat outlineWidth = 0.0ffloat shadowOffsetX = 0.0ffloat shadowOffsetY = 0.0fFloatingTextFontWeight fontWeight = FloatingTextFontWeight::Normalstd::string backgroundImageKeystruct UIFloatingTextConfig 6
float defaultDuration = 1.0ffloat defaultRiseSpeed = 80.0ffloat defaultFadeStart = 0.6fstd::size_t maxActive = 32bool stackSamePosition = truefloat stackOffset = 20.0fstruct UIFloatingTextEntry 18
std::string textfloat x = 0.0ffloat y = 0.0fUIFloatingTextStyle stylefloat duration = 1.0ffloat riseSpeed = 80.0ffloat fadeStart = 0.6ffloat scaleStart = 1.0ffloat scaleEnd = 1.0fEasingType easing = EasingType::EaseOutQuadbool shakeEnabled = falsefloat shakeAmount = 3.0ffloat shakeFrequency = 20.0ffloat elapsed = 0.0ffloat currentX = 0.0ffloat currentY = 0.0ffloat currentAlpha = 1.0ffloat currentScale = 1.0fclass UIFloatingTextManager 10
UIFloatingTextManager() = defaultexplicit UIFloatingTextManager(const UIFloatingTextConfig& config)[[nodiscard]] const UIFloatingTextConfig& config() const noexceptvoid setConfig(const UIFloatingTextConfig& config)UIFloatingTextEntry* spawn(const std::string& text, float x, float y, const UIFloatingTextStyle& style)UIFloatingTextEntry* spawnCustom(UIFloatingTextEntry entry)void update(float dt)[[nodiscard]] const std::vector<UIFloatingTextEntry>& activeEntries() const noexcept[[nodiscard]] std::size_t activeCount() const noexceptvoid clearAll()enum UIFormFieldType : std::uint8_t 7
TextNumberPasswordToggleSliderDropdownRadioGroupenum LabelAlign : std::uint8_t 3
LeftRightusing FormValidationFn = std::function<std::string(const std::string&)>;struct UIFormError 2
std::string keystd::string messagestruct UIFormField 12
std::string labelUIFormFieldType fieldType = UIFormFieldType::Textstd::string keybool required = falsestd::string placeholderstd::string validationRegexFormValidationFn validationCallbackstd::string errorMessagestd::string defaultValuestd::vector<std::string> optionsfloat sliderMin = 0.0ffloat sliderMax = 1.0fstruct UIFormConfig 11
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<UIFormField> fieldsfloat labelWidth = 120.0ffloat fieldWidth = 200.0ffloat rowSpacing = 8.0fLabelAlign labelAlign = LabelAlign::Leftstd::string submitLabel = "Submit"std::string cancelLabel = "Cancel"std::string backgroundImageKeystd::string requiredMarker = "*"class UIForm 23
explicit UIForm(const UIFormConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] float totalWidth() const noexcept[[nodiscard]] float totalHeight() const noexcept[[nodiscard]] const std::vector<UIFormField>& fields() const noexcept[[nodiscard]] std::int32_t focusedFieldIndex() const noexcept[[nodiscard]] std::string fieldError(const std::string& key) const[[nodiscard]] const std::map<std::string, std::string>& values() const noexceptvoid setValue(const std::string& key, const std::string& value)[[nodiscard]] std::string getValue(const std::string& key) const[[nodiscard]] std::vector<UIFormError> validate()[[nodiscard]] bool isValid()void reset()bool submit()void cancel()void setOnSubmit(std::function<void(const std::map<std::string, std::string>&)> callback)void setOnCancel(std::function<void()> callback)void setOnValueChanged(std::function<void(const std::string&, const std::string&)> callback)void focusField(std::int32_t index)void focusNext()void focusPrevious()void onEnterPressed()void onTabPressed(bool shiftHeld)enum HotbarOrientation : std::uint8_t 2
HorizontalVerticalstruct UIHotbarConfig 13
UINodeId id = INVALID_UI_NODEstd::string namestd::uint32_t slotCount = 10float slotSize = 48.0ffloat spacing = 4.0fHotbarOrientation orientation = HotbarOrientation::Horizontalstd::string backgroundImageKeystd::string slotImageKeystd::string slotHoverImageKeystd::string slotActiveImageKeyfloat keybindFontSize = 10.0ffloat labelFontSize = 10.0ffloat padding = 4.0fstruct UIHotbarSlot 7
std::string iconImageKeystd::string labelstd::string keybindfloat cooldownPercent = 0.0fstd::uint32_t quantity = 0bool enabled = truebool active = falseclass UIHotbar 19
explicit UIHotbar(const UIHotbarConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::uint32_t slotCount() const noexcept[[nodiscard]] const UIHotbarSlot& slot(std::uint32_t index) const noexcept[[nodiscard]] std::int32_t hoveredSlot() const noexcept[[nodiscard]] float totalWidth() const noexcept[[nodiscard]] float totalHeight() const noexcept[[nodiscard]] sgc::Rectf slotBounds(std::uint32_t index) const noexceptvoid setSlot(std::uint32_t index, const UIHotbarSlot& slotData)void clearSlot(std::uint32_t index)void triggerSlot(std::uint32_t index)void update([[maybe_unused]] float dt)void setOnSlotTriggered(std::function<void(std::uint32_t)> callback)void setOnSlotRightClicked(std::function<void(std::uint32_t)> callback)void onPointerMove(float localX, float localY)void onPointerLeave()void onPointerDown(float localX, float localY)void onRightClick(float localX, float localY)void onKeyDown(const std::string& key)enum ItemRarity : std::uint8_t 5
CommonUncommonRareEpicLegendarystruct GridPos 4
std::uint32_t col = 0std::uint32_t row = 0[[nodiscard]] bool operator==(const GridPos& other) const noexcept[[nodiscard]] bool operator!=(const GridPos& other) const noexceptstruct UIInventoryItem 7
std::uint32_t id = 0std::string iconImageKeystd::string namestd::string descriptionstd::uint32_t stackCount = 1std::uint32_t maxStack = 1ItemRarity rarity = ItemRarity::Commonstruct UIInventoryGridConfig 13
UINodeId id = INVALID_UI_NODEstd::string namestd::uint32_t columns = 8std::uint32_t rows = 4float cellSize = 48.0ffloat cellSpacing = 2.0ffloat padding = 4.0fstd::string backgroundImageKeystd::string cellImageKeystd::string cellHoverImageKeystd::string cellSelectedImageKeyfloat dragGhostAlpha = 0.6ffloat stackCountFontSize = 10.0fclass UIInventoryGrid 29
explicit UIInventoryGrid(const UIInventoryGridConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::uint32_t columns() const noexcept[[nodiscard]] std::uint32_t rows() const noexcept[[nodiscard]] float totalWidth() const noexcept[[nodiscard]] float totalHeight() const noexcept[[nodiscard]] sgc::Rectf cellBounds(std::uint32_t col, std::uint32_t row) const noexcept[[nodiscard]] bool isValidPos(std::uint32_t col, std::uint32_t row) const noexcept[[nodiscard]] bool isDragging() const noexcept[[nodiscard]] GridPos dragOrigin() const noexcept[[nodiscard]] float dragGhostX() const noexcept[[nodiscard]] float dragGhostY() const noexcept[[nodiscard]] std::optional<UIInventoryItem> getItem(std::uint32_t col, std::uint32_t row) constvoid setItem(std::uint32_t col, std::uint32_t row, const UIInventoryItem& item)std::optional<UIInventoryItem> removeItem(std::uint32_t col, std::uint32_t row)void swapItems(GridPos from, GridPos to)bool moveItem(GridPos from, GridPos to)bool acceptExternalDrop(const UIInventoryItem& item, std::uint32_t col, std::uint32_t row)void setOnItemMoved(std::function<void(GridPos, GridPos)> callback)void setOnItemDropped(std::function<void(const UIInventoryItem&, GridPos)> callback)void setOnItemRightClicked(std::function<void(const UIInventoryItem&)> callback)void setOnItemHovered(std::function<void(const UIInventoryItem&, GridPos)> callback)void onPointerMove(float localX, float localY)void onPointerLeave()void onPointerDown(float localX, float localY)void onPointerUp(float localX, float localY)void onRightClick(float localX, float localY)void cancelDrag()std::optional<UIInventoryItem> extractDraggedItem()struct UIListItem 3
std::string textstd::string iconstd::any userDatastruct UIListViewConfig 7
UINodeId id = INVALID_UI_NODEstd::string namefloat itemHeight = 28.0fint visibleItems = 8bool selectable = truebool multiSelect = falsefloat width = 250.0fclass UIListView 23
explicit UIListView(const UIListViewConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::size_t itemCount() const noexcept[[nodiscard]] const std::vector<UIListItem>& items() const noexcept[[nodiscard]] const std::set<int>& selectedIndices() const noexcept[[nodiscard]] int selectedIndex() const noexcept[[nodiscard]] int focusedIndex() const noexcept[[nodiscard]] int scrollOffset() const noexcept[[nodiscard]] std::pair<int, int> visibleRange() const noexceptvoid addItem(UIListItem item)void insertItem(std::size_t index, UIListItem item)void removeItem(std::size_t index)void clearItems()void setItems(std::vector<UIListItem> items)void setOnItemSelected(std::function<void(int)> callback)void selectItem(int index, bool addToSelection = false)void deselectItem(int index)void clearSelection()[[nodiscard]] bool isSelected(int index) constvoid focusPrevious()void focusNext()void confirmFocused()void scroll(int delta)struct UINumberSpinnerConfig 17
UINodeId id = INVALID_UI_NODEstd::string namefloat value = 0.0ffloat min = 0.0ffloat max = 100.0ffloat step = 1.0fint decimalPlaces = 0float width = 160.0ffloat height = 32.0ffloat buttonWidth = 32.0ffloat inputWidth = 96.0fstd::string incrementImageKeystd::string decrementImageKeystd::string inputBackgroundImageKeyfloat fontSize = 14.0ffloat holdRepeatDelay = 0.5ffloat holdRepeatRate = 0.1fclass UINumberSpinner 21
explicit UINumberSpinner(const UINumberSpinnerConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] float getValue() const noexcept[[nodiscard]] float getMin() const noexcept[[nodiscard]] float getMax() const noexcept[[nodiscard]] bool isEditing() const noexceptvoid setOnValueChanged(std::function<void(float)> callback)void setValue(float val)void setRange(float minVal, float maxVal)void setStep(float step)void increment()void decrement()void beginHoldIncrement()void beginHoldDecrement()void endHold()void update(float dt)void beginEditing()void editAppendChar(char ch)void editBackspace()void confirmEditing()void cancelEditing()enum ProgressLabelFormat : std::uint8_t 3
NoneValueSlashMaxPercentstruct UIProgressBarConfig 11
UINodeId id = INVALID_UI_NODEstd::string namefloat min = 0.0ffloat max = 100.0ffloat value = 0.0fbool showLabel = trueProgressLabelFormat labelFormat = ProgressLabelFormat::Percentbool animated = truebool indeterminate = falsefloat width = 200.0ffloat height = 20.0fclass UIProgressBar 13
explicit UIProgressBar(const UIProgressBarConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] float value() const noexcept[[nodiscard]] float displayValue() const noexcept[[nodiscard]] float normalizedValue() const noexcept[[nodiscard]] bool isIndeterminate() const noexcept[[nodiscard]] std::string labelText() constvoid setValue(float val)void setRange(float minVal, float maxVal)void setAnimationSpeed(float unitsPerSecond)void setIndeterminate(bool indeterminate)void setLabelFormat(ProgressLabelFormat format)void update(float deltaTime)struct UIRadialSectorInfo 11
int index = -1float startAngle = 0.0ffloat endAngle = 0.0ffloat midAngle = 0.0ffloat iconX = 0.0ffloat iconY = 0.0ffloat labelX = 0.0ffloat labelY = 0.0fbool hovered = falsebool enabled = truebool hasSubItems = falseenum RadioOrientation : std::uint8_t 2
VerticalHorizontalstruct UIRadioOption 4
std::string labelstd::string valuebool enabled = truestd::string iconImageKeystruct UIRadioGroupConfig 12
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<UIRadioOption> optionsint selectedIndex = 0RadioOrientation orientation = RadioOrientation::Verticalfloat spacing = 8.0ffloat radioSize = 16.0ffloat labelGap = 6.0fstd::string radioImageKeystd::string radioCheckedImageKeystd::string radioDisabledImageKeyfloat fontSize = 14.0fclass UIRadioGroup 13
explicit UIRadioGroup(const UIRadioGroupConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] int selectedIndex() const noexcept[[nodiscard]] const std::string& selectedValue() const[[nodiscard]] int focusedIndex() const noexcept[[nodiscard]] std::size_t optionCount() const noexcept[[nodiscard]] const std::vector<UIRadioOption>& options() const noexceptvoid setOnSelectionChanged(std::function<void(int, const std::string&)> callback)void setOptions(std::vector<UIRadioOption> options)void select(int index)void focusPrevious()void focusNext()void confirmFocused()enum Orientation : std::uint8_t 2
HorizontalVerticalstruct UISliderConfig 10
UINodeId id = INVALID_UI_NODEstd::string namefloat min = 0.0ffloat max = 1.0ffloat value = 0.0ffloat step = 0.0fOrientation orientation = Orientation::Horizontalfloat trackLength = 200.0ffloat trackThickness = 8.0ffloat handleSize = 16.0fclass UISlider 16
explicit UISlider(const UISliderConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] float value() const noexcept[[nodiscard]] float min() const noexcept[[nodiscard]] float max() const noexcept[[nodiscard]] float normalizedValue() const noexcept[[nodiscard]] bool isDragging() const noexceptvoid setOnValueChanged(std::function<void(float)> callback)void setValue(float val)void setRange(float minVal, float maxVal)void setEnabled(bool enabled)void onDragBegin()void onDragUpdate(float normalizedPos)void onDragEnd()void increment()void decrement()enum SplitterOrientation : std::uint8_t 2
HorizontalVerticalstruct UISplitterConfig 14
UINodeId id = INVALID_UI_NODEstd::string nameSplitterOrientation orientation = SplitterOrientation::Horizontalfloat initialRatio = 0.5ffloat minRatio = 0.1ffloat maxRatio = 0.9ffloat handleSize = 6.0ffloat totalWidth = 800.0ffloat totalHeight = 600.0fstd::string handleImageKeystd::string handleHoverImageKeystd::string handleDragImageKeystd::string panelABackgroundImageKeystd::string panelBBackgroundImageKeyclass UISplitter 17
explicit UISplitter(const UISplitterConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] float getRatio() const noexcept[[nodiscard]] bool isDragging() const noexcept[[nodiscard]] bool isHovered() const noexcept[[nodiscard]] PanelBounds panelABounds() const noexcept[[nodiscard]] PanelBounds panelBBounds() const noexcept[[nodiscard]] PanelBounds handleBounds() const noexceptvoid setOnRatioChanged(std::function<void(float)> callback)void setRatio(float ratio)void setSize(float width, float height)void onHandleHoverEnter()void onHandleHoverLeave()void beginDrag(float pointerPos)void updateDrag(float pointerPos)void endDrag()void resetToCenter()enum TabBarOrientation : std::uint8_t 4
TopBottomLeftRightstruct UITabBarConfig 8
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<std::string> tabsint selectedIndex = 0TabBarOrientation orientation = TabBarOrientation::Topfloat tabWidth = 0.0ffloat tabHeight = 32.0ffloat totalWidth = 400.0fclass UITabBar 11
explicit UITabBar(const UITabBarConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] int selectedIndex() const noexcept[[nodiscard]] const std::string& selectedTabText() const[[nodiscard]] const std::vector<std::string>& tabs() const noexcept[[nodiscard]] std::size_t tabCount() const noexceptvoid setOnTabChanged(std::function<void(int)> callback)void setTabs(std::vector<std::string> tabs)void selectTab(int index)void selectNext()void selectPrevious()enum TableAlign : std::uint8_t 3
LeftCenterRightstruct UITableColumn 8
std::string headerstd::string keyfloat width = 100.0ffloat minWidth = 40.0fbool sortable = truebool resizable = trueTableAlign align = TableAlign::Leftstd::string headerImageKeystruct UITableRow 4
std::vector<std::string> cellsstd::any databool selected = falsebool enabled = truestruct UITableConfig 17
UINodeId id = INVALID_UI_NODEstd::string namestd::vector<UITableColumn> columnsfloat rowHeight = 28.0ffloat headerHeight = 32.0fstd::string headerBackgroundImageKeystd::string rowBackgroundImageKeystd::string rowAlternateImageKeystd::string rowHoverImageKeystd::string rowSelectedImageKeystd::string separatorColorstd::string sortIndicatorImageKeyfloat resizeHandleWidth = 4.0ffloat fontSize = 13.0ffloat headerFontSize = 14.0fint maxVisibleRows = 10bool scrollable = trueclass UITable 26
explicit UITable(const UITableConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::size_t rowCount() const noexcept[[nodiscard]] const std::vector<UITableColumn>& columns() const noexcept[[nodiscard]] const std::vector<UITableRow>& rows() const noexcept[[nodiscard]] std::vector<int> getSelectedRows() const[[nodiscard]] int sortColumn() const noexcept[[nodiscard]] bool isSortAscending() const noexcept[[nodiscard]] std::pair<int, int> visibleRange() const noexceptvoid setOnRowSelected(std::function<void(int)> callback)void setOnColumnSorted(std::function<void(int, bool)> callback)void setOnCellClicked(std::function<void(int, int)> callback)void setData(std::vector<UITableRow> rows)void addRow(UITableRow row)void removeRow(int index)void clearData()void sortBy(int column, bool ascending)void selectRow(int index)void clearSelection()void clickCell(int row, int col)void clickHeader(int column)void setHoveredRow(int index)void beginColumnResize(int column, float startX)void updateColumnResize(float currentX)void endColumnResize()void scroll(int delta)struct UITextInputConfig 9
UINodeId id = INVALID_UI_NODEstd::string namestd::string placeholderstd::string initialTextstd::size_t maxLength = 256bool password = falsebool multiline = falsefloat width = 200.0ffloat height = 28.0fclass UITextInput 23
explicit UITextInput(const UITextInputConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] const std::string& text() const noexcept[[nodiscard]] std::string displayText() const[[nodiscard]] std::size_t cursorPos() const noexcept[[nodiscard]] std::size_t selectionStart() const noexcept[[nodiscard]] std::size_t selectionEnd() const noexcept[[nodiscard]] bool hasSelection() const noexcept[[nodiscard]] bool isFocused() const noexceptvoid setOnTextChanged(std::function<void(const std::string&)> callback)void setOnSubmit(std::function<void(const std::string&)> callback)void setText(const std::string& text)void onFocus()void onBlur()void insertText(const std::string& str)void deleteBackward()void deleteForward()void moveCursor(int offset, bool extendSelection = false)void moveToStart(bool extendSelection = false)void moveToEnd(bool extendSelection = false)void selectAll()void onSubmitKey()[[nodiscard]] std::string selectedText() constenum ToastPosition : std::uint8_t 6
TopLeftTopRightBottomLeftBottomRightTopCenterBottomCenterenum ToastStackDirection : std::uint8_t 2
UpDownenum ToastType : std::uint8_t 4
InfoSuccessWarningErrorenum ToastSlideDirection : std::uint8_t 4
LeftRightUpDownstruct UIToastTypeStyle 2
std::string backgroundImageKeystd::string iconImageKeystruct UIToastConfig 27
UINodeId id = INVALID_UI_NODEstd::string nameToastPosition position = ToastPosition::TopRightToastStackDirection stackDirection = ToastStackDirection::Downint maxVisible = 5float spacing = 8.0ffloat width = 320.0ffloat minHeight = 48.0ffloat padding = 12.0ffloat iconSize = 24.0ffloat marginX = 16.0ffloat marginY = 16.0ffloat defaultDuration = 4.0ffloat slideInDuration = 0.25ffloat slideOutDuration = 0.2fToastSlideDirection slideInDirection = ToastSlideDirection::RightToastSlideDirection slideOutDirection = ToastSlideDirection::Rightfloat slideDistance = 0.0ffloat screenWidth = 1920.0ffloat screenHeight = 1080.0fstd::string backgroundImageKeystd::string closeButtonImageKeystd::string iconImageKeyUIToastTypeStyle infoStyleUIToastTypeStyle successStyleUIToastTypeStyle warningStyleUIToastTypeStyle errorStylestruct UIToastEntry 6
std::uint32_t id = 0std::string textstd::string iconImageKeyfloat duration = 4.0fToastType type = ToastType::Infofloat timestamp = 0.0fclass UIToastManager 18
explicit UIToastManager(const UIToastConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] std::size_t activeCount() const noexcept[[nodiscard]] std::size_t visibleCount() const noexcept[[nodiscard]] bool hasToasts() const noexcept[[nodiscard]] const std::string& backgroundImageKey() const noexcept[[nodiscard]] const std::string& closeButtonImageKey() const noexcept[[nodiscard]] std::vector<ToastRenderInfo> renderInfo() constvoid setOnDismissed(std::function<void(std::uint32_t)> callback)void setOnClicked(std::function<void(std::uint32_t)> callback)void setToastHeight(std::uint32_t toastId, float height)void setScreenBounds(float width, float height) noexceptstd::uint32_t show(const std::string& text, ToastType type = ToastType::Info, float duration = 0.0f)std::uint32_t show(const std::string& text, const std::string& iconImageKey, ToastType type = ToastType::Info, float duration = 0.0f)void dismiss(std::uint32_t toastId)void dismissAll()void onMouseClick(float mouseX, float mouseY)void update(float dt)enum ToggleStyle : std::uint8_t 2
CheckboxSwitchstruct UIToggleConfig 8
UINodeId id = INVALID_UI_NODEstd::string namestd::string labelbool checked = falsebool enabled = trueToggleStyle style = ToggleStyle::Checkboxfloat width = 0.0ffloat height = 24.0fclass UIToggle 10
explicit UIToggle(const UIToggleConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] bool isChecked() const noexcept[[nodiscard]] bool isEnabled() const noexcept[[nodiscard]] const std::string& label() const noexceptvoid setOnChanged(std::function<void(bool)> callback)void setChecked(bool checked)void setLabel(const std::string& label)void setEnabled(bool enabled)void onClick()enum TooltipPosition : std::uint8_t 5
AboveBelowLeftRightAutostruct UITooltipConfig 20
UINodeId id = INVALID_UI_NODEstd::string namestd::string textfloat maxWidth = 300.0ffloat padding = 8.0ffloat arrowSize = 6.0ffloat anchorOffsetX = 0.0ffloat anchorOffsetY = 0.0fTooltipPosition position = TooltipPosition::Autofloat showDelay = 0.5ffloat hideDelay = 0.1ffloat fadeInDuration = 0.15ffloat fadeOutDuration = 0.1fbool followMouse = falsefloat screenMargin = 4.0ffloat screenWidth = 1920.0ffloat screenHeight = 1080.0fstd::string backgroundImageKeystd::string borderImageKeystd::string arrowImageKeyclass UITooltip 21
explicit UITooltip(const UITooltipConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] bool isVisible() const noexcept[[nodiscard]] float opacity() const noexcept[[nodiscard]] sgc::Rectf currentBounds() const noexcept[[nodiscard]] TooltipPosition resolvedPosition() const noexcept[[nodiscard]] const std::string& text() const noexcept[[nodiscard]] const std::string& backgroundImageKey() const noexcept[[nodiscard]] const std::string& borderImageKey() const noexcept[[nodiscard]] const std::string& arrowImageKey() const noexceptvoid show(const std::string& text, float x, float y)void show(float x, float y)void hide()void hideImmediate()void attachTo(std::shared_ptr<UINode> target)void detach()void updateCursorPosition(float x, float y) noexceptvoid setContentSize(float width, float height) noexceptvoid setScreenBounds(float width, float height) noexceptvoid update(float dt)using TreeNodePath = std::vector<int>;struct UITreeNode 8
std::string labelstd::string iconImageKeystd::string expandedIconImageKeystd::vector<UITreeNode> childrenbool expanded = falsebool selected = falsebool enabled = truestd::any datastruct UITreeViewConfig 13
UINodeId id = INVALID_UI_NODEstd::string namefloat indentWidth = 20.0ffloat nodeHeight = 24.0fstd::string expandIconImageKeystd::string collapseIconImageKeystd::string nodeBackgroundImageKeystd::string nodeHoverImageKeystd::string nodeSelectedImageKeystd::string connectionLineColorfloat connectionLineWidth = 1.0ffloat fontSize = 13.0fbool multiSelect = falseclass UITreeView 22
explicit UITreeView(const UITreeViewConfig& config)[[nodiscard]] std::shared_ptr<UINode> node() const noexcept[[nodiscard]] const std::vector<UITreeNode>& roots() const noexcept[[nodiscard]] const std::vector<FlatEntry>& flatList() const noexcept[[nodiscard]] const std::vector<TreeNodePath>& getSelectedNodes() const noexcept[[nodiscard]] const TreeNodePath& focusedPath() const noexceptvoid setOnNodeSelected(std::function<void(const TreeNodePath&)> callback)void setOnNodeExpanded(std::function<void(const TreeNodePath&)> callback)void setOnNodeCollapsed(std::function<void(const TreeNodePath&)> callback)void setRoot(std::vector<UITreeNode> roots)void expand(const TreeNodePath& path)void collapse(const TreeNodePath& path)void expandAll()void collapseAll()void toggle(const TreeNodePath& path)void selectNode(const TreeNodePath& path)void clearSelection()void focusPrevious()void focusNext()void focusLeft()void focusRight()void confirmFocused()Sourced from docs/API_CATALOG.md, auto-generated by tools/generate_api_catalog.py.