Normative baseline for standardized numeric control and numeric indicator widget classes
FROG — Free Open Graphical Language
- Widgets index
- Expression widget instances
- Expression widget interaction
- Expression widget realization
- Widget package publication
- Executable UI primitives
- Default numeric realization
- Example 05 numeric compatibility note
- 1. Overview
- 2. Classes Defined Here
- 3. Numeric Class versus Realization
- 4. Label, Caption, and Value Text Posture
- 5. Common Family Posture
- 6. Numeric Representation Model
- 7. Public Visual Part Model
- 8. Standard Property Surface
- 9.
frog.widgets.numeric_control - 10.
frog.widgets.numeric_indicator - 11. Default SVG Realization Posture
- 12. Diagram Interaction Posture
- 13. Behavior Expectations
- 14. Compatibility with Example 05 Flat Surface
- 15. Validation Expectations
- 16. Summary
This document defines the intrinsic standardized baseline for numeric widgets in FROG.
The numeric family provides the standard widget surfaces used for numeric entry and numeric display. It is richer than the boolean and string families because a numeric widget naturally combines scalar value semantics, representation selection, data-entry limits, formatting, radix presentation, optional unit labels, and optional increment/decrement interaction.
The standard numeric family is defined as a real object surface with:
- a primary numeric value posture,
- a portable representation model,
- a portable data-entry model,
- a portable display-format model,
- a minimal but real method surface,
- a minimal but real event surface,
- a stable public part model for realization targeting.
The design is intentionally analogous to mature graphical environments such as LabVIEW, while modernizing the public contract and preserving strict separation between class law, realization assets, runtime interpretation, and IDE tooling.
frog.widgets.numeric_controlfrog.widgets.numeric_indicator
Both classes share one numeric family posture. The control is user-editable in the portable baseline. The indicator is display-oriented and receives its value from diagram/runtime publication.
A numeric class is not the same thing as a host numeric text box, a spinbox, a fixed-point editor, a runtime-private field, or a SVG picture containing a number.
The class owns:
- the numeric value surface,
- the control-versus-indicator distinction,
- the representation model,
- the data-entry model,
- the display-format model,
- the public property inventory,
- the public method inventory,
- the public event inventory,
- the public part model.
The realization owns:
- the visible text box or numeric face geometry,
- increment/decrement button embodiment,
- radix badge placement,
- unit-label placement,
- SVG assets or host-native drawing resources,
- state maps,
- style application,
- skin and variant selection.
A spinbox-like realization, a compact numeric indicator, or a radix-badge style does not automatically create a new numeric class. A distinct standardized class should be introduced only when the public contract itself changes.
The numeric family follows the shared FROG label/caption convention and adds a numeric-specific value-text surface.
label.*
- structural / logical widget name surface
caption.*
- front-panel presentation caption shown near the numeric widget
value / text_value
- semantic numeric value and its rendered text surface
label.textnames the object for tooling, references, diagram readability, accessibility, and debugging.caption.textis the external front-panel caption shown near the numeric widget.valueis the semantic numeric value.text_valueis the rendered value text part owned by realization but fed by the class-ownedvalue.
- family: scalar numeric widget family
- primary value: present
- value kind: numeric scalar
- primary value mirror property:
value - natural value participation: yes
- object-style access surface: yes
- structural label surface:
label.* - front-panel caption surface:
caption.* - representation surface:
representation.* - data-entry surface:
data_entry.* - display-format surface:
display.* - unit-label surface:
unit_label.* - interaction surface:
interaction.* - portable style surface:
style.* - portable realization-selection surface:
realization.*
The canonical property is:
representation.kindThe standard representation kinds are:
int8,int16,int32,int64uint8,uint16,uint32,uint64float32,float64decimal64,decimal128fixed_point_signed,fixed_point_unsignedcomplex64,complex128
IDEs may expose aliases such as I32, DBL, SGL, or FXP.
Those aliases are ergonomic presentation names.
The canonical class law should preserve explicit representation identifiers.
When the active representation is fixed-point, the following additional members are relevant:
representation.encoding—signedorunsignedrepresentation.word_length_bitsrepresentation.integer_word_length_bitsrepresentation.include_overflow_status
rootlabelcaptionframevalue_facetext_valuespinnerwhen presentincrement_upwhen presentincrement_downwhen presentradix_badgewhen presentunit_labelwhen presentfocus_ringwhen present
value : numericrepresentation.kind : enumrepresentation.encoding : enumwhen applicablerepresentation.word_length_bits : u32when applicablerepresentation.integer_word_length_bits : u32when applicablerepresentation.include_overflow_status : boolwhen applicable
label.visible : boollabel.text : stringlabel.style.*caption.visible : boolcaption.text : stringcaption.placement : enumcaption.padding : lengthcaption.style.*unit_label.visible : boolunit_label.text : stringunit_label.style.*
interaction.visible : boolinteraction.enabled : boolinteraction.read_only : boolinteraction.focusable : boolinteraction.focused : bool
data_entry.minimum : numericdata_entry.maximum : numericdata_entry.increment_step : numericdata_entry.coerce_on_commit : booldata_entry.response_to_out_of_range : enum—reject,coerce,warn, orallow_with_status
display.format_kind : enum—default,decimal,scientific,engineering,hex,binary,octal, orcustomdisplay.format_string : stringdisplay.precision_digits : u32display.radix_visible : booldisplay.increment_buttons_visible : booldisplay.text_width_chars : u32
key_binding.focus : stringwhen exposedkey_binding.increment : stringwhen exposedkey_binding.decrement : stringwhen exposed
style.frame.*style.value_face.*style.text_value.*style.spinner.*style.focus_ring.*style.disabled.opacity : numberrealization.family : stringrealization.variant : stringrealization.skin_id : string
- class_id:
frog.widgets.numeric_control - family:
numeric_widget - compatible role:
control
focus()select_text()set_value(number)increment()decrement()clamp_to_limits()format_value()parse_and_commit(text)reset_to_default()
value_changedvalue_committededit_startededit_committedout_of_rangeincrement_presseddecrement_pressedfocus_gainedfocus_lost
- class_id:
frog.widgets.numeric_indicator - family:
numeric_widget - compatible role:
indicator
focus()when supported by the hostformat_value()reset_to_default_style()
value_renderedfocus_gainedfocus_lost
The default numeric realization SHOULD support a rectangular SVG template with:
- a value face,
- dynamic value text,
- optional increment/decrement buttons,
- optional radix badge,
- optional unit label,
- label and caption surfaces,
- focus-ring posture.
The numeric family supports natural value participation through widget_value, property access through frog.ui.property_read and frog.ui.property_write, method invocation through frog.ui.method_invoke, and event observation where legal.
- numeric controls accept user-originated editing only when enabled and not read-only,
- increment and decrement use
data_entry.increment_step, - commits respect
data_entry.response_to_out_of_range, - formatting follows
display.*, - representation changes must preserve or explicitly convert numeric meaning according to the active validation posture.
Example 05 was intentionally frozen as an executable corridor and uses a bounded flat numeric surface for its acceptance path. That frozen surface should not be silently rewritten by the general numeric baseline.
The compatibility mapping is:
labelmaps tocaption.textorlabel.textdepending on the host compatibility mode.visiblemaps tointeraction.visible.enabledmaps tointeraction.enabled.foreground_colormaps to a compatible text or foreground style surface in the runtime-family corridor.
New numeric work should use the canonical hierarchical surface defined here. The frozen Example 05 runtime-family acceptance path may continue to preserve its existing compatibility surface.
Validators SHOULD diagnose at least:
- non-numeric values on numeric widgets,
- unknown representation kinds,
- fixed-point members used without a fixed-point representation kind,
- minimum greater than maximum,
- non-positive increment steps for increment/decrement posture,
- out-of-range values where the configured response forbids them,
- unsupported public members,
- attempts to treat realization-only spinner internals as public class members.
The numeric widget family defines the intrinsic standardized numeric baseline of FROG:
frog.widgets.numeric_controlfrog.widgets.numeric_indicator
It standardizes numeric value, representation, data-entry limits, display format, optional unit and radix surfaces, optional increment/decrement interaction, and a realization-ready public part model while preserving the class-versus-realization boundary.