Package su.onno.ui
package su.onno.ui
-
ClassDescriptionRuns a custom
ActionSpecserver handler for an entity.Fluent description of successful action feedback that requires acknowledgement in a dialog.Structured, semantic feedback from a server-side action.Per-action placement builder for a document's detail-header actions (post/unpost/edit/delete): show it as a primary button, tuck it into the overflow (⋯) menu, or hide it entirely.Where the client presents action feedback.An expected business-rule rejection from an action handler.Maps expected action business-rule rejections to the typed HTTP 422 wire contract.Typed feedback and refresh intent returned by anActionSpecserver handler.A read-only view of one record's resolved data — a list row, or the record a detail surface loaded — handed to the per-record functions of anaction(.icon(...),.label(...),.visibleWhen(...),.enabledWhen(...)) and to a list'sconditional row formatting, so a single control can vary by that record's state — apause"Suspend" on a running record flipping to aplay"Resume" when it's stopped, or a button shown only on the rows it applies to.Where a customactionbutton appears.Semantic tone of feedback returned by a server-side action.Declares custom action buttons for an entity, fromEntityView.actions(ActionSpec).A resolved action button.Fluent builder for one action; setters may be called in any order.Values an action form opens with, computed server-side at open time by theformDefaultshook:valuesseed the scalar inputs (keyed by input key),rowsseed the row groups (keyed by group key, each row acolumn → valuemap — the same wire shape the form submits back).Fluent description of structured action feedback shown in the application's toast stack.Runs a bulk row action over a set of ids and reports{ok, failed, total}.Declarative back-office branding for aLayout's shell: an explicit app name, a logo (with an optional dark-mode variant), a favicon, and brand color overrides for the light and darkBrandPalettes.A consumer's brand color overrides for one mode (light or dark).Write-side commands for catalogs — create, update, delete.Read-side queries for catalogs, shared by the REST API and the DivKit emitters so the SQL and ref-resolution live in one place.Receive side of cross-node live-UI sync: subscribes to theClusterEventBusand pushes events that originated on other nodes to this node's SSE clients viaUiEventPublisher.publish(String, String, String, Object, String).Resolves the authenticated principal to a domain catalog record via the configuredUiIdentityLink(e.g.Calendar bucket used when a list opens grouped by a temporal column.Dev-mode reload signal: watches a trigger file and broadcasts areloadSSE event — a full browser refresh on every connected client — whenever the file is touched.Width preset for an action form or feedback dialog.Emits the server-rendered DivKit app, split so the client can render instantly and load data lazily:/shellreturns the chrome (top bar + nav, no data — fast), and each content endpoint returns just that surface's card.Write-side commands for documents — create, update, delete, post, unpost — plus the document reconstruction needed for posting.Read-side queries for documents (list with optional date range; detail with tabular sections), shared by the REST API and the DivKit emitters.Per-entity configuration scope passed to lambdas onSectionBuilder.catalog/document/register.EntityView<E>Per-entity UI definition, authored in code and discovered as a Spring bean — the "view" layer of the framework.UI hints for a single field, configured viaUiLayoutBuilder.FieldHintBuilder<O,T> Per-field hint builder.Per-entity field hints, authored on eachEntityView.fields(su.onno.ui.EntityConfigBuilder<E>)and resolved by class.One message returned by aFormValidator.Visual and semantic severity of advisory live form feedback.Resolved metadata for one live form validator.Fluent configuration returned byEntityConfigBuilder.validation(java.lang.String, java.lang.Class<? extends su.onno.ui.FormValidator>).Live values supplied to an application-defined asynchronous form validator.Supported endpoint for dependency-aware, advisory generated-form validation.Resolves application-providedFormValidatorSpring beans by their configured type.Application-provided advisory validation for a generated form.Read-side queries for information registers, used to drive related-list panels backed by a register junction (seeRelatedList,Junctions).Declares custom input fields for an entity's list toolbar, fromEntityView.inputs(InputSpec), and the fields of an action-form modal (ActionSpec.ActionBuilder.form).Presentation metadata for an action-form dialog.Fluent builder for a repeatablerow group.Fluent builder for one input; setters may be called in any order.A resolved toolbar (or action-form) input field.A resolved action-form row group: a repeatable row ofcolumns.The kind of toolbar input field rendered alongside the custom action buttons.One keyset-paginated window: the decorated rows plus thenextCursora client echoes back to fetch the following window, and whether any rows remain.An authored layout — the structural peer ofPageandEntityView.The builder aLayoutconfigures: navigation sections (with per-field hints) and — for persona layouts — the target roles and match priority.Serves pages of list data to the list grid.Compiles theonno-listgrid's declarative filter values (sent by the React island aseq/in/like/prefix/ge/lequery params) into a safe SQL fragment with bound parameters.A compiled predicate: aWHERE-ready fragment (no leading AND) and its bindings.Shared helpers for the list grouping query (seeCatalogQueryService#groups/DocumentQueryService#groups).One aggregate to compute per group: an aggregatefnover a numericcolumn.The result of a grouping query: the group headers, and whether the cap truncated them.ListSpec<E>Builder for an entity's list/table surface, used insideEntityView.list(su.onno.ui.ListSpec<E>).A per-group subtotal function (row count is always present and needs no declaration).A declared per-group subtotal: the aggregatefnover a numericfield.A custom list-body renderer: the widget-registryListSpec.CustomSpec.typethe client resolves the component from, an optional toolbar-toggleListSpec.CustomSpec.label(else the UI'slist.customViewmessage), and whether the list opens on the custom view.A resolved list filter: the bound field, its label, the control type and — for theListSpec.FilterType.OPTIONS/ListSpec.FilterType.MULTI_OPTIONScontrols — itschoices(each a value→label pair).Fluent builder for one filter;ListSpec.FilterBuilder.options/ListSpec.FilterBuilder.multiple()/ListSpec.FilterBuilder.multiOptions(java.lang.String...)/ListSpec.FilterBuilder.contains()/ListSpec.FilterBuilder.startsWith()/ListSpec.FilterBuilder.dateRange()pick the control type.How a filter narrows the list query (and which control the grid renders).Where a list's map geometry comes from, and how it reads.One choice of aListSpec.FilterType.OPTIONS/ListSpec.FilterType.MULTI_OPTIONSfilter: thevaluematched against the field by the query, and thelabelthe UI renders for it.A conditional row tint (seeListSpec.rowStyle(java.util.function.Function<su.onno.ui.ActionRow, su.onno.ui.ListSpec.RowStyle>)): a semantic tone the client maps to its theme (a translucent background wash over the row), not a raw color — so the same view reads correctly in light and dark themes.Serves the server-driven (DivKit) login screen atGET /api/divkit/login.How the app's navigation chrome presents.The onno-framework version this build was produced from, baked intoMETA-INF/onno-build.propertiesby theprocessResourcesstep.Maps the framework'sValidationException(a missing required attribute, an out-of-range / malformed value, or a failed business rule) to HTTP 400 with a small JSON body, so a client-input error reads as a Bad Request instead of a 500 (issue #32).An authored page — a route whose content you compose in code, the page-level peer ofEntityView.Composes aPage's content: an optional header, a grid of dashboard widgets, and freeformPageComponentblocks.Preset view for an embeddedPageBuilder.list(Class, Consumer)— initial filter selections, a base feed constraint, a group-by column and date granularity, and a sort.Builds onePageRow: a sequence ofPageBuilder.RowBuilder.col(java.lang.String, java.util.function.Consumer<su.onno.ui.PageBuilder>)calls.One column of aPageRow: awidthand aPageBuilderregion holding the column's content (any block — widget, list, text, custom — plus further nested rows).A freeform block aPagecomposes beyond the widget grid: a text block, adiv-customextension, a full interactive entity list, or a section of action buttons.A horizontal band of a page — one or morePageColumns laid out side by side.Authenticated HTTP boundary for the durable typed process runtime.One candidate record supplied to aRefOptionDecorator.Live generated-form context supplied when decorating reference-picker options.Contextual reference-picker search.Context-dependent presentation and selection state for one reference-picker option.Application-provided batch resolver for contextual reference-picker option state.Resolves and applies application-provided contextual option decorators.Semantic colour for a contextual reference-option badge.Resolves Ref UUID columns and Enum UUID columns to human-readable display values.Serves pages of register data to the virtualizedonno-listisland — the register counterpart toListDataController.Read-side queries for accumulation registers (movements, balance, turnover), shared by the REST API and the DivKit emitters.A declarative related-list (inline child rows) panel for a catalog or document view, backed by a junction — a catalog or an information register — rather than an owned tabular section.RelatedListBuilder<E,J> Builds oneRelatedListpanel for a catalog editor.Resolves and reads the rows of a related-list panel for any owning entity — catalog or document — over any junction — join catalog or information register.Renderer-agnostic resolved list surface: a title and ordered columns.One per-group subtotal: the numericcolumnNameto aggregate, thefn(sum/avg/min/max), its headerlabel, and the displayformatcarried from the column (so a money subtotal renders as money).cellMenu: a row-action submenu label the cell opens directly on right-click (ListSpec.cellMenu); blank = the cell has no menu of its own.A custom list-body renderer (seeListSpec.custom): the widget-registrytypethe client resolves the component from, the toolbar-togglelabel(blank = the UI'slist.customViewmessage), and whether the list opens on the custom view.A resolved list filter: a stablekey(the field name, the client's state key), thelabel, the datacolumnNamethe query filters on (resolved + validated against the entity's columns), the controltype("options","multiOptions","contains","startsWith"or"dateRange") and, for the (multi-)options controls, itsoptions(each a value→label pair).One groupable column: the datacolumnNametheGROUP BYruns on, its pickerlabel, and whether it is a date/time column (date) — a date column offers a day/month/year granularity and buckets rows by period instead of exact value.The list's grouping capability: the columns a user may group by (the "Group by ▾" picker), the per-group subtotals to show, and thedefaultColumnthe list opens grouped by (blank = opens flat).A resolved map view: the datacolumnNames the geometry reads — a marker point from alatField/lngFieldpair and/or ageoJsonField(GeoJSON points/paths/areas) — an optionallabelFieldfor the popup, and whether the list opens on the map.One choice of a (multi-)options filter: thevaluethe query matches against the column, and thelabelthe control renders.Resolves descriptor metadata into a JSON-shaped attribute view, merging field hints over descriptor defaults.App settings backed by the framework'sConstants.App-shell presentation config: theNavStylethis layout's navigation uses, plus the consumer'sBrandingConfig(app name, logo, favicon, brand palette).Null-safe JDBI parameter binding shared by the generic catalog/document write paths and the framework-ownedonno_commentswriter.Resolves task assignees from the identity catalog configured byUiLayout.identity().Collects the customactionsand toolbarinputsdeclared by everyEntityView, indexed by entity class.A DETAIL action's per-record resolution (issue #255): the samevisibleWhen/enabledWhen/label(fn)/icon(fn)functions a ROW action evaluates per list row, evaluated once against the loaded detail record.Pushes entity-change notifications to browserSseEmitters for live UI updates.Links an authenticated account to a domain catalog record (e.g.A sidebar link to an authoredPageat an arbitrary route — the nav peer of an entity reference.A named persona bundle: its own navigation (sections), home (widgets), branding (title/theme) and therolesthat resolve into it.Typed brand color overrides for one mode; unset slots staynull(renderer default).Configures a named persona profile.Builds theShellConfig— this layout's navigation presentation andBrandingConfig(app name, logo, favicon, brand palette).Loads a built-in chrome message bundle foronno.ui.locale— the base layer between the EnglishUiMessages.DEFAULTSand a deployment's explicitonno.ui.messagesoverrides.The framework's own chrome strings — action buttons, confirmation dialogs, the login screen, empty/loading states, and client-side validation messages — as a single label map with sensible Englishdefaultsa deployment can override per key.Resolves whichUiLayout.Profilea user sees, by matching their roles against each named profile's target roles.Bulk-action tuning.Dashboard rendering tuning.A single one-tap demo login: a buttonlabelplus theusername/passwordit submits.List/table grid defaults, applied unless anEntityViewoverrides the window size.Login-screen options.Custom widget plugins.Resolves a per-entityEntityView(authored in code) over the auto-generated metadata defaults into a renderer-agnosticResolvedListView.Periodically asks onno-cloud for the latest published framework version and, when it is newer than the running one, flipsUpdateChecker.status()to "update available" — which the web client reads off/api/configand renders as a dismissible banner.Configures the "update available" check: the running app periodically asks onno-cloud what the latest published framework version is and surfaces a notice when it is newer than its own.The last-known result of the update check, exposed to the web client via/api/config.The device class a client reports for itself, so the framework can serve a layout and page composition tailored to it.Builds the SQL aggregate expression for a count/metric card.Builds the grouped-aggregate SQL behind the chart/stat/sparkline/gauge widgets (#199): aGROUP BY groupBy[, seriesBy]computing one (or, for a dual-axis combo, two) aggregate values per bucket, so a chart ships O(buckets) rows instead of the whole table.The rendered statement plus its bound parameters (the widget filter's bindings included).The widget's aggregate request, straight from the query string.Parses an authored count/metric-cardfilterpredicate into a safe SQL fragment with bound parameters.A compiled predicate: aWHERE-ready fragment (no leading AND) and its bindings.Discovers consumer widget-plugin modules on the classpath at startup.