|
1 | 1 | { |
2 | | - "artifact_kind": "frog_backend_contract", |
| 2 | + "artifact_kind": "frog_ui_object_realization", |
3 | 3 | "artifact_governance_ref": { |
4 | 4 | "path": "Versioning/Readme.md" |
5 | 5 | }, |
6 | | - "backend_family": "reference_host_runtime_ui_binding", |
7 | | - "producer": { |
8 | | - "implementation": "FROG Reference ContractEmitter", |
9 | | - "implementation_kind": "non_normative_reference_emitter", |
10 | | - "version_governance_ref": "Versioning/Readme.md" |
11 | | - }, |
12 | | - "compatibility": "family_specific", |
13 | | - "source_ref": { |
| 6 | + "example_ref": { |
14 | 7 | "example_id": "05_bounded_ui_accumulator", |
15 | | - "path": "Examples/05_bounded_ui_accumulator/main.frog", |
16 | | - "entry_unit": "main" |
17 | | - }, |
18 | | - "derived_from": { |
19 | | - "fir_path": "Examples/05_bounded_ui_accumulator/main.fir.json", |
20 | | - "lowering_path": "Examples/05_bounded_ui_accumulator/main.lowering.json", |
| 8 | + "source_path": "Examples/05_bounded_ui_accumulator/main.frog", |
21 | 9 | "ui_package_path": "Examples/05_bounded_ui_accumulator/ui/accumulator_panel.wfrog" |
22 | 10 | }, |
23 | | - "assumptions": { |
24 | | - "runtime_family": { |
25 | | - "name": "reference_host_runtime_ui_binding", |
26 | | - "host_model": "single_process_host_runtime", |
27 | | - "ui_binding": { |
28 | | - "widget_value_binding": true, |
29 | | - "widget_reference_binding": true |
30 | | - } |
31 | | - }, |
32 | | - "scheduling": { |
33 | | - "family_rule": "deterministic_step_execution", |
34 | | - "parallelism_claim": "none" |
35 | | - }, |
36 | | - "execution_start": { |
37 | | - "input_binding_complete": true, |
38 | | - "ui_host_available": true, |
39 | | - "initial_state_materialized": true |
40 | | - }, |
41 | | - "numeric_behavior": { |
42 | | - "value_domain": "u16", |
43 | | - "overflow_behavior": "family_private_reject_or_fail_if_unhandled" |
44 | | - } |
| 11 | + "ownership_boundary": { |
| 12 | + "semantic_authority": "canonical_source_and_published_widget_contracts", |
| 13 | + "object_contract_authority": "published_widget_contracts", |
| 14 | + "host_realization_authority": "this_file", |
| 15 | + "notes": [ |
| 16 | + "This file is downstream from canonical source-owned meaning.", |
| 17 | + "This file must not redefine executable semantics.", |
| 18 | + "This file may define concrete host widgets, layout, styling, and host-private realization metadata.", |
| 19 | + "Widget class names in this file must stay aligned with published widget contracts." |
| 20 | + ] |
| 21 | + }, |
| 22 | + "host_family": { |
| 23 | + "name": "reference_host_runtime_ui_binding", |
| 24 | + "ui_host_kind": "reference_windowed_host", |
| 25 | + "rendering_model": "immediate_value_and_property_application" |
45 | 26 | }, |
46 | | - "units": [ |
| 27 | + "window": { |
| 28 | + "id": "main_window", |
| 29 | + "title": "Bounded UI Accumulator", |
| 30 | + "width": 460, |
| 31 | + "height": 170, |
| 32 | + "resizable": false, |
| 33 | + "background": "#F5F7FA" |
| 34 | + }, |
| 35 | + "objects": [ |
47 | 36 | { |
48 | | - "unit_id": "main", |
49 | | - "kind": "bounded_executable_ui_unit", |
50 | | - "public_interface": { |
51 | | - "inputs": [ |
52 | | - { |
53 | | - "id": "input_value", |
54 | | - "type": "u16", |
55 | | - "binding_origin": "widget.ctrl_input.value" |
56 | | - } |
57 | | - ], |
58 | | - "outputs": [ |
59 | | - { |
60 | | - "id": "result", |
61 | | - "type": "u16", |
62 | | - "binding_target": "interface.result" |
63 | | - } |
64 | | - ] |
| 37 | + "object_id": "ctrl_input", |
| 38 | + "widget_id": "ctrl_input", |
| 39 | + "widget_class": "frog.widgets.numeric_control", |
| 40 | + "role": "control", |
| 41 | + "layout": { |
| 42 | + "x": 20, |
| 43 | + "y": 24, |
| 44 | + "width": 140, |
| 45 | + "height": 32 |
65 | 46 | }, |
66 | | - "ui_binding": { |
67 | | - "package_refs": [ |
68 | | - "Examples/05_bounded_ui_accumulator/ui/accumulator_panel.wfrog" |
69 | | - ], |
70 | | - "widgets": [ |
71 | | - { |
72 | | - "widget_id": "ctrl_input", |
73 | | - "widget_class": "frog.widgets.numeric_control", |
74 | | - "value_type": "u16", |
75 | | - "role": "control", |
76 | | - "binding": { |
77 | | - "mode": "widget_value", |
78 | | - "public_input_id": "input_value" |
79 | | - } |
80 | | - }, |
81 | | - { |
82 | | - "widget_id": "ind_result", |
83 | | - "widget_class": "frog.widgets.numeric_indicator", |
84 | | - "value_type": "u16", |
85 | | - "role": "indicator", |
86 | | - "binding": { |
87 | | - "mode": "widget_value", |
88 | | - "public_output_id": "result" |
89 | | - } |
90 | | - } |
91 | | - ], |
92 | | - "widget_reference_support": [ |
93 | | - { |
94 | | - "widget_id": "ctrl_input", |
95 | | - "supported_members": [ |
96 | | - "foreground_color" |
97 | | - ] |
98 | | - }, |
99 | | - { |
100 | | - "widget_id": "ind_result", |
101 | | - "supported_members": [ |
102 | | - "foreground_color" |
103 | | - ] |
104 | | - } |
105 | | - ] |
| 47 | + "semantic_surface": { |
| 48 | + "value_type": "u16", |
| 49 | + "value_binding_mode": "widget_value", |
| 50 | + "reference_binding": true, |
| 51 | + "label.text": "Input", |
| 52 | + "interaction.visible": true, |
| 53 | + "default_value": 3 |
106 | 54 | }, |
107 | | - "state_model": { |
108 | | - "explicit_state": true, |
109 | | - "carrier": { |
110 | | - "primitive": "frog.core.delay", |
111 | | - "state_id": "accumulator_state", |
112 | | - "type": "u16", |
113 | | - "initial_value": 0 |
| 55 | + "host_realization": { |
| 56 | + "host_class": "reference.numeric_spinbox", |
| 57 | + "visual": { |
| 58 | + "caption_text": "Input", |
| 59 | + "foreground_color": "#5B9BD5", |
| 60 | + "text_color": "#1F2937", |
| 61 | + "font_family": "default_sans", |
| 62 | + "font_size": 12, |
| 63 | + "border_radius": 4 |
114 | 64 | }, |
115 | | - "commit_rule": "state_next becomes state_current at the loop iteration commit point" |
| 65 | + "constraints": { |
| 66 | + "minimum": 0, |
| 67 | + "maximum": 65535, |
| 68 | + "step": 1 |
| 69 | + } |
116 | 70 | }, |
117 | | - "execution_model": { |
118 | | - "structure": "for_loop", |
119 | | - "iteration_count": 5, |
120 | | - "iteration_variable": "i", |
121 | | - "body_rule": { |
122 | | - "kind": "accumulate_with_explicit_state", |
123 | | - "expression": "state_next = state_current + input_value" |
124 | | - }, |
125 | | - "final_result_rule": "final_state is published to public output result and to indicator ind_result" |
| 71 | + "runtime_binding": { |
| 72 | + "widget_value_binding": true, |
| 73 | + "widget_reference_binding": true, |
| 74 | + "supported_members": [ |
| 75 | + "foreground_color" |
| 76 | + ] |
| 77 | + } |
| 78 | + }, |
| 79 | + { |
| 80 | + "object_id": "ind_result", |
| 81 | + "widget_id": "ind_result", |
| 82 | + "widget_class": "frog.widgets.numeric_indicator", |
| 83 | + "role": "indicator", |
| 84 | + "layout": { |
| 85 | + "x": 240, |
| 86 | + "y": 24, |
| 87 | + "width": 160, |
| 88 | + "height": 32 |
126 | 89 | }, |
127 | | - "property_writes": [ |
128 | | - { |
129 | | - "operation": "frog.ui.property_write", |
130 | | - "widget_id": "ctrl_input", |
131 | | - "member": "foreground_color", |
132 | | - "value": { |
133 | | - "type": "frog.color.rgba8", |
134 | | - "value": "#5B9BD5" |
135 | | - } |
136 | | - }, |
137 | | - { |
138 | | - "operation": "frog.ui.property_write", |
139 | | - "widget_id": "ind_result", |
140 | | - "member": "foreground_color", |
141 | | - "value": { |
142 | | - "type": "frog.color.rgba8", |
143 | | - "value": "#70AD47" |
144 | | - } |
| 90 | + "semantic_surface": { |
| 91 | + "value_type": "u16", |
| 92 | + "value_binding_mode": "widget_value", |
| 93 | + "reference_binding": true, |
| 94 | + "label.text": "Accumulated result", |
| 95 | + "interaction.visible": true, |
| 96 | + "default_value": 0 |
| 97 | + }, |
| 98 | + "host_realization": { |
| 99 | + "host_class": "reference.numeric_display", |
| 100 | + "visual": { |
| 101 | + "caption_text": "Accumulated result", |
| 102 | + "foreground_color": "#70AD47", |
| 103 | + "text_color": "#1F2937", |
| 104 | + "font_family": "default_sans", |
| 105 | + "font_size": 12, |
| 106 | + "border_radius": 4 |
145 | 107 | } |
146 | | - ], |
147 | | - "public_output_publication": { |
148 | | - "output_id": "result", |
149 | | - "source": "final_state" |
| 108 | + }, |
| 109 | + "runtime_binding": { |
| 110 | + "widget_value_binding": true, |
| 111 | + "widget_reference_binding": true, |
| 112 | + "supported_members": [ |
| 113 | + "foreground_color" |
| 114 | + ] |
150 | 115 | } |
151 | 116 | } |
152 | | - ], |
153 | | - "unsupported": [], |
154 | | - "diagnostics": [] |
| 117 | + ] |
155 | 118 | } |
0 commit comments