jui-tools-mcp-server 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/test.yml +35 -0
- package/README.md +148 -0
- package/data/attribute_definitions.json +4248 -0
- package/data/attribute_semantics.json +137 -0
- package/data/binding_semantics.json +115 -0
- package/data/component_metadata.json +769 -0
- package/data/coverage.json +114 -0
- package/data/screen_identity.json +350 -0
- package/dist/cli_runner.d.ts +10 -0
- package/dist/cli_runner.js +33 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +67 -0
- package/dist/data/component_metadata.d.ts +30 -0
- package/dist/data/component_metadata.js +498 -0
- package/dist/data/derived.d.ts +198 -0
- package/dist/data/derived.js +293 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +130 -0
- package/dist/spec_loader.d.ts +110 -0
- package/dist/spec_loader.js +445 -0
- package/dist/tools/api/list_api_models.d.ts +10 -0
- package/dist/tools/api/list_api_models.js +37 -0
- package/dist/tools/api/list_api_specs.d.ts +19 -0
- package/dist/tools/api/list_api_specs.js +42 -0
- package/dist/tools/api/preview_api_model_sync.d.ts +11 -0
- package/dist/tools/api/preview_api_model_sync.js +34 -0
- package/dist/tools/context/get_project_config.d.ts +3 -0
- package/dist/tools/context/get_project_config.js +20 -0
- package/dist/tools/context/list_component_specs.d.ts +3 -0
- package/dist/tools/context/list_component_specs.js +35 -0
- package/dist/tools/context/list_layouts.d.ts +3 -0
- package/dist/tools/context/list_layouts.js +118 -0
- package/dist/tools/context/list_screen_specs.d.ts +3 -0
- package/dist/tools/context/list_screen_specs.js +37 -0
- package/dist/tools/context/read_layout_file.d.ts +3 -0
- package/dist/tools/context/read_layout_file.js +25 -0
- package/dist/tools/context/read_spec_file.d.ts +3 -0
- package/dist/tools/context/read_spec_file.js +27 -0
- package/dist/tools/doc/doc_generate_component.d.ts +3 -0
- package/dist/tools/doc/doc_generate_component.js +38 -0
- package/dist/tools/doc/doc_generate_html.d.ts +3 -0
- package/dist/tools/doc/doc_generate_html.js +46 -0
- package/dist/tools/doc/doc_generate_spec.d.ts +3 -0
- package/dist/tools/doc/doc_generate_spec.js +38 -0
- package/dist/tools/doc/doc_init_component.d.ts +3 -0
- package/dist/tools/doc/doc_init_component.js +30 -0
- package/dist/tools/doc/doc_init_spec.d.ts +3 -0
- package/dist/tools/doc/doc_init_spec.js +33 -0
- package/dist/tools/doc/doc_rules_init.d.ts +3 -0
- package/dist/tools/doc/doc_rules_init.js +25 -0
- package/dist/tools/doc/doc_rules_show.d.ts +3 -0
- package/dist/tools/doc/doc_rules_show.js +21 -0
- package/dist/tools/doc/doc_validate_component.d.ts +3 -0
- package/dist/tools/doc/doc_validate_component.js +39 -0
- package/dist/tools/doc/doc_validate_spec.d.ts +3 -0
- package/dist/tools/doc/doc_validate_spec.js +40 -0
- package/dist/tools/jui/jui_build.d.ts +3 -0
- package/dist/tools/jui/jui_build.js +31 -0
- package/dist/tools/jui/jui_generate_converter.d.ts +3 -0
- package/dist/tools/jui/jui_generate_converter.js +43 -0
- package/dist/tools/jui/jui_generate_project.d.ts +3 -0
- package/dist/tools/jui/jui_generate_project.js +43 -0
- package/dist/tools/jui/jui_generate_screen.d.ts +3 -0
- package/dist/tools/jui/jui_generate_screen.js +22 -0
- package/dist/tools/jui/jui_init.d.ts +3 -0
- package/dist/tools/jui/jui_init.js +42 -0
- package/dist/tools/jui/jui_migrate_layouts.d.ts +3 -0
- package/dist/tools/jui/jui_migrate_layouts.js +25 -0
- package/dist/tools/jui/jui_sync_tool.d.ts +3 -0
- package/dist/tools/jui/jui_sync_tool.js +33 -0
- package/dist/tools/jui/jui_verify.d.ts +3 -0
- package/dist/tools/jui/jui_verify.js +43 -0
- package/dist/tools/spec/get_binding_rules.d.ts +3 -0
- package/dist/tools/spec/get_binding_rules.js +8 -0
- package/dist/tools/spec/get_data_source.d.ts +3 -0
- package/dist/tools/spec/get_data_source.js +41 -0
- package/dist/tools/spec/get_modifier_order.d.ts +3 -0
- package/dist/tools/spec/get_modifier_order.js +14 -0
- package/dist/tools/spec/get_platform_mapping.d.ts +3 -0
- package/dist/tools/spec/get_platform_mapping.js +20 -0
- package/dist/tools/spec/get_screen_identity.d.ts +3 -0
- package/dist/tools/spec/get_screen_identity.js +22 -0
- package/dist/tools/spec/lookup_attribute.d.ts +3 -0
- package/dist/tools/spec/lookup_attribute.js +14 -0
- package/dist/tools/spec/lookup_component.d.ts +3 -0
- package/dist/tools/spec/lookup_component.js +15 -0
- package/dist/tools/spec/search_components.d.ts +3 -0
- package/dist/tools/spec/search_components.js +14 -0
- package/dist/tools/test/test_artifacts_pull.d.ts +3 -0
- package/dist/tools/test/test_artifacts_pull.js +48 -0
- package/dist/tools/test/test_artifacts_status.d.ts +3 -0
- package/dist/tools/test/test_artifacts_status.js +28 -0
- package/dist/tools/test/test_generate_description.d.ts +3 -0
- package/dist/tools/test/test_generate_description.js +27 -0
- package/dist/tools/test/test_generate_flow.d.ts +3 -0
- package/dist/tools/test/test_generate_flow.js +29 -0
- package/dist/tools/test/test_generate_screen.d.ts +3 -0
- package/dist/tools/test/test_generate_screen.js +29 -0
- package/dist/tools/test/test_mock_generate.d.ts +3 -0
- package/dist/tools/test/test_mock_generate.js +64 -0
- package/dist/tools/test/test_report.d.ts +3 -0
- package/dist/tools/test/test_report.js +26 -0
- package/dist/tools/test/test_validate.d.ts +3 -0
- package/dist/tools/test/test_validate.js +43 -0
- package/docs/design.md +227 -0
- package/install.sh +90 -0
- package/package.json +24 -0
- package/scripts/fetch-definitions.js +101 -0
- package/scripts/fetch-manifest.js +60 -0
- package/src/cli_runner.ts +55 -0
- package/src/config.ts +88 -0
- package/src/data/derived.ts +305 -0
- package/src/index.ts +157 -0
- package/src/spec_loader.ts +591 -0
- package/src/tools/api/list_api_models.ts +44 -0
- package/src/tools/api/list_api_specs.ts +53 -0
- package/src/tools/api/preview_api_model_sync.ts +41 -0
- package/src/tools/context/get_project_config.ts +27 -0
- package/src/tools/context/list_component_specs.ts +44 -0
- package/src/tools/context/list_layouts.ts +131 -0
- package/src/tools/context/list_screen_specs.ts +46 -0
- package/src/tools/context/read_layout_file.ts +35 -0
- package/src/tools/context/read_spec_file.ts +38 -0
- package/src/tools/doc/doc_generate_component.ts +43 -0
- package/src/tools/doc/doc_generate_html.ts +40 -0
- package/src/tools/doc/doc_generate_spec.ts +43 -0
- package/src/tools/doc/doc_init_component.ts +32 -0
- package/src/tools/doc/doc_init_spec.ts +37 -0
- package/src/tools/doc/doc_rules_init.ts +29 -0
- package/src/tools/doc/doc_rules_show.ts +27 -0
- package/src/tools/doc/doc_validate_component.ts +47 -0
- package/src/tools/doc/doc_validate_spec.ts +48 -0
- package/src/tools/jui/jui_build.ts +31 -0
- package/src/tools/jui/jui_generate_converter.ts +41 -0
- package/src/tools/jui/jui_generate_project.ts +37 -0
- package/src/tools/jui/jui_generate_screen.ts +28 -0
- package/src/tools/jui/jui_init.ts +38 -0
- package/src/tools/jui/jui_migrate_layouts.ts +29 -0
- package/src/tools/jui/jui_sync_tool.ts +33 -0
- package/src/tools/jui/jui_verify.ts +43 -0
- package/src/tools/spec/get_binding_rules.ts +16 -0
- package/src/tools/spec/get_data_source.ts +53 -0
- package/src/tools/spec/get_modifier_order.ts +22 -0
- package/src/tools/spec/get_platform_mapping.ts +28 -0
- package/src/tools/spec/get_screen_identity.ts +31 -0
- package/src/tools/spec/lookup_attribute.ts +22 -0
- package/src/tools/spec/lookup_component.ts +23 -0
- package/src/tools/spec/search_components.ts +22 -0
- package/src/tools/test/test_artifacts_pull.ts +47 -0
- package/src/tools/test/test_artifacts_status.ts +34 -0
- package/src/tools/test/test_generate_description.ts +33 -0
- package/src/tools/test/test_generate_flow.ts +33 -0
- package/src/tools/test/test_generate_screen.ts +33 -0
- package/src/tools/test/test_mock_generate.ts +58 -0
- package/src/tools/test/test_report.ts +32 -0
- package/src/tools/test/test_validate.ts +43 -0
- package/tests/__snapshots__/derived.test.ts.snap +279 -0
- package/tests/bundled_snapshot.test.ts +155 -0
- package/tests/cli_runner.test.ts +120 -0
- package/tests/config.test.ts +212 -0
- package/tests/derived.test.ts +114 -0
- package/tests/helpers.ts +272 -0
- package/tests/setup.ts +27 -0
- package/tests/snapshot_completeness.test.ts +152 -0
- package/tests/spec_loader.test.ts +488 -0
- package/tests/tools_cli.test.ts +687 -0
- package/tests/tools_context.test.ts +274 -0
- package/tests/tools_spec.test.ts +225 -0
- package/tests/tools_test.test.ts +284 -0
- package/tsconfig.json +15 -0
- package/uninstall.sh +46 -0
- package/vitest.config.ts +15 -0
|
@@ -0,0 +1,4248 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Unified attribute definitions for JsonUI (Swift/Kotlin/React). Binding format: @{propertyName}. When `type` includes \"binding\", an optional `binding_direction` field declares how the MCP should label the binding: \"two-way\" means the component writes back to the binding (e.g. TextField.text); omit the field (or set \"read-only\") for values that only flow view ← model. Optional extended fields per attribute: `aliases` (array of alternate names treated as synonyms for this canonical attribute; validator expands these at load time), `deprecated` (boolean; validator emits a warning when the attribute is used), `deprecation_note` (string appended to the warning to explain the replacement or limitation).",
|
|
3
|
+
"common": {
|
|
4
|
+
"_comment": "Common attributes shared across all components",
|
|
5
|
+
"$jui": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "Normalization marker injected by `jui build` when build.normalizeLayouts is enabled (experimental). Metadata only, not rendered. Shape: {\"normalized\": \"L1\"|\"L2\", \"schemaVersion\": 1, \"platform\"?: string}"
|
|
8
|
+
},
|
|
9
|
+
"id": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Unique identifier for the component"
|
|
12
|
+
},
|
|
13
|
+
"generatedBy": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "AI generation command that created this component (metadata only, not rendered)"
|
|
16
|
+
},
|
|
17
|
+
"partial": {
|
|
18
|
+
"type": "boolean",
|
|
19
|
+
"description": "Marks this file as a partial/include template. Partials are not standalone views and will not generate Data models."
|
|
20
|
+
},
|
|
21
|
+
"platform": {
|
|
22
|
+
"type": [
|
|
23
|
+
"string",
|
|
24
|
+
"object"
|
|
25
|
+
],
|
|
26
|
+
"description": "Build directive consumed at distribution time (never present in distributed output). String form ('ios', 'android', 'web', comma-separated; language tokens like 'swift'/'kotlin'/'compose'/'react' also accepted) removes the whole node on non-matching platforms. Object form ({\"ios\": {...}, \"web\": {...}}) merges the matching platform's map into the node (override wins). Distinct from the layout-root 'platforms' array, which whitelists the distribution targets of the entire file."
|
|
27
|
+
},
|
|
28
|
+
"role": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"enum": [
|
|
31
|
+
"screen",
|
|
32
|
+
"cell",
|
|
33
|
+
"partial"
|
|
34
|
+
],
|
|
35
|
+
"description": "Layout-root screen classification (canonical: shared/core/screen_identity.json). Metadata only, never rendered. It is the explicit declaration that wins over derivation, so a non-screen role suppresses the screen marker on that layout. Declare it when derivation gets a layout wrong — most often a cell instantiated from host-language code, which no layout JSON references and which therefore defaults to being a screen."
|
|
36
|
+
},
|
|
37
|
+
"type": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"required": true,
|
|
40
|
+
"description": "Component type"
|
|
41
|
+
},
|
|
42
|
+
"width": {
|
|
43
|
+
"type": [
|
|
44
|
+
"number",
|
|
45
|
+
{
|
|
46
|
+
"enum": [
|
|
47
|
+
"matchParent",
|
|
48
|
+
"wrapContent"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"binding"
|
|
52
|
+
],
|
|
53
|
+
"required": true,
|
|
54
|
+
"description": "Width (number, 'matchParent', 'wrapContent') - binding supported. Not required if weight is specified."
|
|
55
|
+
},
|
|
56
|
+
"height": {
|
|
57
|
+
"type": [
|
|
58
|
+
"number",
|
|
59
|
+
{
|
|
60
|
+
"enum": [
|
|
61
|
+
"matchParent",
|
|
62
|
+
"wrapContent"
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
"binding"
|
|
66
|
+
],
|
|
67
|
+
"required": true,
|
|
68
|
+
"description": "Height (number, 'matchParent', 'wrapContent') - binding supported. Not required if weight is specified."
|
|
69
|
+
},
|
|
70
|
+
"minWidth": {
|
|
71
|
+
"type": [
|
|
72
|
+
"number",
|
|
73
|
+
"binding"
|
|
74
|
+
],
|
|
75
|
+
"description": "Minimum width (binding supported)"
|
|
76
|
+
},
|
|
77
|
+
"maxWidth": {
|
|
78
|
+
"type": [
|
|
79
|
+
"number",
|
|
80
|
+
"binding"
|
|
81
|
+
],
|
|
82
|
+
"description": "Maximum width (binding supported)"
|
|
83
|
+
},
|
|
84
|
+
"minHeight": {
|
|
85
|
+
"type": [
|
|
86
|
+
"number",
|
|
87
|
+
"binding"
|
|
88
|
+
],
|
|
89
|
+
"description": "Minimum height (binding supported)"
|
|
90
|
+
},
|
|
91
|
+
"maxHeight": {
|
|
92
|
+
"type": [
|
|
93
|
+
"number",
|
|
94
|
+
"binding"
|
|
95
|
+
],
|
|
96
|
+
"description": "Maximum height (binding supported)"
|
|
97
|
+
},
|
|
98
|
+
"widthWeight": {
|
|
99
|
+
"type": [
|
|
100
|
+
"number",
|
|
101
|
+
"binding"
|
|
102
|
+
],
|
|
103
|
+
"description": "Width weight for flexible layouts (binding supported)",
|
|
104
|
+
"platform": "swift",
|
|
105
|
+
"mode": "uikit"
|
|
106
|
+
},
|
|
107
|
+
"heightWeight": {
|
|
108
|
+
"type": [
|
|
109
|
+
"number",
|
|
110
|
+
"binding"
|
|
111
|
+
],
|
|
112
|
+
"description": "Height weight for flexible layouts (binding supported)",
|
|
113
|
+
"platform": "swift",
|
|
114
|
+
"mode": "uikit"
|
|
115
|
+
},
|
|
116
|
+
"maxWidthWeight": {
|
|
117
|
+
"type": [
|
|
118
|
+
"number",
|
|
119
|
+
"binding"
|
|
120
|
+
],
|
|
121
|
+
"description": "Maximum width weight (binding supported)",
|
|
122
|
+
"platform": "swift",
|
|
123
|
+
"mode": "uikit"
|
|
124
|
+
},
|
|
125
|
+
"maxHeightWeight": {
|
|
126
|
+
"type": [
|
|
127
|
+
"number",
|
|
128
|
+
"binding"
|
|
129
|
+
],
|
|
130
|
+
"description": "Maximum height weight (binding supported)",
|
|
131
|
+
"platform": "swift",
|
|
132
|
+
"mode": "uikit"
|
|
133
|
+
},
|
|
134
|
+
"minWidthWeight": {
|
|
135
|
+
"type": [
|
|
136
|
+
"number",
|
|
137
|
+
"binding"
|
|
138
|
+
],
|
|
139
|
+
"description": "Minimum width weight (binding supported)",
|
|
140
|
+
"platform": "swift",
|
|
141
|
+
"mode": "uikit"
|
|
142
|
+
},
|
|
143
|
+
"minHeightWeight": {
|
|
144
|
+
"type": [
|
|
145
|
+
"number",
|
|
146
|
+
"binding"
|
|
147
|
+
],
|
|
148
|
+
"description": "Minimum height weight (binding supported)",
|
|
149
|
+
"platform": "swift",
|
|
150
|
+
"mode": "uikit"
|
|
151
|
+
},
|
|
152
|
+
"aspectWidth": {
|
|
153
|
+
"type": [
|
|
154
|
+
"number",
|
|
155
|
+
"binding"
|
|
156
|
+
],
|
|
157
|
+
"description": "Aspect ratio width (binding supported)",
|
|
158
|
+
"platform": "swift",
|
|
159
|
+
"mode": "uikit"
|
|
160
|
+
},
|
|
161
|
+
"aspectHeight": {
|
|
162
|
+
"type": [
|
|
163
|
+
"number",
|
|
164
|
+
"binding"
|
|
165
|
+
],
|
|
166
|
+
"description": "Aspect ratio height (binding supported)",
|
|
167
|
+
"platform": "swift",
|
|
168
|
+
"mode": "uikit"
|
|
169
|
+
},
|
|
170
|
+
"weight": {
|
|
171
|
+
"type": [
|
|
172
|
+
"number",
|
|
173
|
+
"string",
|
|
174
|
+
"binding"
|
|
175
|
+
],
|
|
176
|
+
"description": "Shorthand for widthWeight (binding supported)"
|
|
177
|
+
},
|
|
178
|
+
"background": {
|
|
179
|
+
"type": [
|
|
180
|
+
"string",
|
|
181
|
+
"binding"
|
|
182
|
+
],
|
|
183
|
+
"description": "Background color - hex string (#RRGGBB or #RRGGBBAA) or color name from colors.json (can be data binding)"
|
|
184
|
+
},
|
|
185
|
+
"tapBackground": {
|
|
186
|
+
"type": [
|
|
187
|
+
"string",
|
|
188
|
+
"binding"
|
|
189
|
+
],
|
|
190
|
+
"description": "Background color when tapped - hex string or color name from colors.json (binding supported)"
|
|
191
|
+
},
|
|
192
|
+
"highlightBackground": {
|
|
193
|
+
"type": [
|
|
194
|
+
"string",
|
|
195
|
+
"binding"
|
|
196
|
+
],
|
|
197
|
+
"description": "Background color when highlighted - hex string or color name from colors.json (binding supported)"
|
|
198
|
+
},
|
|
199
|
+
"disabledBackground": {
|
|
200
|
+
"type": [
|
|
201
|
+
"string",
|
|
202
|
+
"binding"
|
|
203
|
+
],
|
|
204
|
+
"description": "Background when disabled - hex string or color name from colors.json (binding supported)"
|
|
205
|
+
},
|
|
206
|
+
"defaultBackground": {
|
|
207
|
+
"type": [
|
|
208
|
+
"string",
|
|
209
|
+
"binding"
|
|
210
|
+
],
|
|
211
|
+
"description": "Default background color - hex string or color name from colors.json (binding supported)",
|
|
212
|
+
"platform": "swift",
|
|
213
|
+
"mode": "uikit"
|
|
214
|
+
},
|
|
215
|
+
"cornerRadius": {
|
|
216
|
+
"type": [
|
|
217
|
+
"number",
|
|
218
|
+
"binding"
|
|
219
|
+
],
|
|
220
|
+
"description": "Corner radius (can be data binding)"
|
|
221
|
+
},
|
|
222
|
+
"borderWidth": {
|
|
223
|
+
"type": [
|
|
224
|
+
"number",
|
|
225
|
+
"binding"
|
|
226
|
+
],
|
|
227
|
+
"description": "Border width (binding supported)"
|
|
228
|
+
},
|
|
229
|
+
"borderColor": {
|
|
230
|
+
"type": [
|
|
231
|
+
"string",
|
|
232
|
+
"binding"
|
|
233
|
+
],
|
|
234
|
+
"description": "Border color - hex string or color name from colors.json (binding supported)"
|
|
235
|
+
},
|
|
236
|
+
"borderStyle": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"enum": [
|
|
239
|
+
"solid",
|
|
240
|
+
"dashed",
|
|
241
|
+
"dotted"
|
|
242
|
+
],
|
|
243
|
+
"default": "solid",
|
|
244
|
+
"description": "Border line style - solid (default), dashed, or dotted"
|
|
245
|
+
},
|
|
246
|
+
"alpha": {
|
|
247
|
+
"type": [
|
|
248
|
+
"number",
|
|
249
|
+
"binding"
|
|
250
|
+
],
|
|
251
|
+
"min": 0,
|
|
252
|
+
"max": 1,
|
|
253
|
+
"description": "Opacity (0-1) - can be data binding"
|
|
254
|
+
},
|
|
255
|
+
"opacity": {
|
|
256
|
+
"type": [
|
|
257
|
+
"number",
|
|
258
|
+
"binding"
|
|
259
|
+
],
|
|
260
|
+
"min": 0,
|
|
261
|
+
"max": 1,
|
|
262
|
+
"description": "Opacity (0-1), alias for alpha - can be data binding",
|
|
263
|
+
"aliases": [
|
|
264
|
+
"alpha"
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
"responsive": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"description": "Size class overrides. Keys: compact, medium, regular, landscape, or hyphenated combos (e.g. regular-landscape). Values: object of attribute overrides for that size class."
|
|
270
|
+
},
|
|
271
|
+
"visibility": {
|
|
272
|
+
"type": [
|
|
273
|
+
"string",
|
|
274
|
+
"binding"
|
|
275
|
+
],
|
|
276
|
+
"enum": [
|
|
277
|
+
"visible",
|
|
278
|
+
"invisible",
|
|
279
|
+
"gone"
|
|
280
|
+
],
|
|
281
|
+
"description": "View visibility state (can be data binding)"
|
|
282
|
+
},
|
|
283
|
+
"hidden": {
|
|
284
|
+
"type": [
|
|
285
|
+
"boolean",
|
|
286
|
+
"binding"
|
|
287
|
+
],
|
|
288
|
+
"description": "Whether the component is hidden: keeps its layout space but is not drawn and is hidden from accessibility (boolean shorthand for visibility:'invisible'; can be a data binding)"
|
|
289
|
+
},
|
|
290
|
+
"padding": {
|
|
291
|
+
"type": [
|
|
292
|
+
"number",
|
|
293
|
+
"binding"
|
|
294
|
+
],
|
|
295
|
+
"description": "Uniform padding value (binding supported)"
|
|
296
|
+
},
|
|
297
|
+
"paddings": {
|
|
298
|
+
"type": [
|
|
299
|
+
"number",
|
|
300
|
+
"array"
|
|
301
|
+
],
|
|
302
|
+
"description": "Padding as single value or [top, right, bottom, left]"
|
|
303
|
+
},
|
|
304
|
+
"paddingTop": {
|
|
305
|
+
"type": [
|
|
306
|
+
"number",
|
|
307
|
+
"binding"
|
|
308
|
+
],
|
|
309
|
+
"description": "Top padding (binding supported)"
|
|
310
|
+
},
|
|
311
|
+
"paddingBottom": {
|
|
312
|
+
"type": [
|
|
313
|
+
"number",
|
|
314
|
+
"binding"
|
|
315
|
+
],
|
|
316
|
+
"description": "Bottom padding (binding supported)"
|
|
317
|
+
},
|
|
318
|
+
"paddingLeft": {
|
|
319
|
+
"type": [
|
|
320
|
+
"number",
|
|
321
|
+
"binding"
|
|
322
|
+
],
|
|
323
|
+
"description": "Left padding (binding supported)"
|
|
324
|
+
},
|
|
325
|
+
"paddingRight": {
|
|
326
|
+
"type": [
|
|
327
|
+
"number",
|
|
328
|
+
"binding"
|
|
329
|
+
],
|
|
330
|
+
"description": "Right padding (binding supported)"
|
|
331
|
+
},
|
|
332
|
+
"paddingStart": {
|
|
333
|
+
"type": [
|
|
334
|
+
"number",
|
|
335
|
+
"binding"
|
|
336
|
+
],
|
|
337
|
+
"description": "Start padding (RTL aware) (binding supported)"
|
|
338
|
+
},
|
|
339
|
+
"paddingEnd": {
|
|
340
|
+
"type": [
|
|
341
|
+
"number",
|
|
342
|
+
"binding"
|
|
343
|
+
],
|
|
344
|
+
"description": "End padding (RTL aware) (binding supported)"
|
|
345
|
+
},
|
|
346
|
+
"rightPadding": {
|
|
347
|
+
"type": [
|
|
348
|
+
"number",
|
|
349
|
+
"binding"
|
|
350
|
+
],
|
|
351
|
+
"description": "Right padding (alias for paddingRight, binding supported)"
|
|
352
|
+
},
|
|
353
|
+
"leftPadding": {
|
|
354
|
+
"type": [
|
|
355
|
+
"number",
|
|
356
|
+
"binding"
|
|
357
|
+
],
|
|
358
|
+
"description": "Left padding (alias for paddingLeft, binding supported)"
|
|
359
|
+
},
|
|
360
|
+
"topPadding": {
|
|
361
|
+
"type": [
|
|
362
|
+
"number",
|
|
363
|
+
"binding"
|
|
364
|
+
],
|
|
365
|
+
"description": "Top padding (alias for paddingTop, binding supported)"
|
|
366
|
+
},
|
|
367
|
+
"bottomPadding": {
|
|
368
|
+
"type": [
|
|
369
|
+
"number",
|
|
370
|
+
"binding"
|
|
371
|
+
],
|
|
372
|
+
"description": "Bottom padding (alias for paddingBottom, binding supported)"
|
|
373
|
+
},
|
|
374
|
+
"minTopPadding": {
|
|
375
|
+
"type": "number",
|
|
376
|
+
"description": "Minimum top padding",
|
|
377
|
+
"platform": "swift",
|
|
378
|
+
"mode": "uikit"
|
|
379
|
+
},
|
|
380
|
+
"minBottomPadding": {
|
|
381
|
+
"type": "number",
|
|
382
|
+
"description": "Minimum bottom padding",
|
|
383
|
+
"platform": "swift",
|
|
384
|
+
"mode": "uikit"
|
|
385
|
+
},
|
|
386
|
+
"minLeftPadding": {
|
|
387
|
+
"type": "number",
|
|
388
|
+
"description": "Minimum left padding",
|
|
389
|
+
"platform": "swift",
|
|
390
|
+
"mode": "uikit"
|
|
391
|
+
},
|
|
392
|
+
"minRightPadding": {
|
|
393
|
+
"type": "number",
|
|
394
|
+
"description": "Minimum right padding",
|
|
395
|
+
"platform": "swift",
|
|
396
|
+
"mode": "uikit"
|
|
397
|
+
},
|
|
398
|
+
"maxTopPadding": {
|
|
399
|
+
"type": "number",
|
|
400
|
+
"description": "Maximum top padding",
|
|
401
|
+
"platform": "swift",
|
|
402
|
+
"mode": "uikit"
|
|
403
|
+
},
|
|
404
|
+
"maxBottomPadding": {
|
|
405
|
+
"type": "number",
|
|
406
|
+
"description": "Maximum bottom padding",
|
|
407
|
+
"platform": "swift",
|
|
408
|
+
"mode": "uikit"
|
|
409
|
+
},
|
|
410
|
+
"maxLeftPadding": {
|
|
411
|
+
"type": "number",
|
|
412
|
+
"description": "Maximum left padding",
|
|
413
|
+
"platform": "swift",
|
|
414
|
+
"mode": "uikit"
|
|
415
|
+
},
|
|
416
|
+
"maxRightPadding": {
|
|
417
|
+
"type": "number",
|
|
418
|
+
"description": "Maximum right padding",
|
|
419
|
+
"platform": "swift",
|
|
420
|
+
"mode": "uikit"
|
|
421
|
+
},
|
|
422
|
+
"margins": {
|
|
423
|
+
"type": [
|
|
424
|
+
"number",
|
|
425
|
+
"array"
|
|
426
|
+
],
|
|
427
|
+
"description": "Margin as single value or [top, right, bottom, left]"
|
|
428
|
+
},
|
|
429
|
+
"topMargin": {
|
|
430
|
+
"type": [
|
|
431
|
+
"number",
|
|
432
|
+
"binding"
|
|
433
|
+
],
|
|
434
|
+
"description": "Top margin (binding supported)"
|
|
435
|
+
},
|
|
436
|
+
"bottomMargin": {
|
|
437
|
+
"type": [
|
|
438
|
+
"number",
|
|
439
|
+
"binding"
|
|
440
|
+
],
|
|
441
|
+
"description": "Bottom margin (binding supported)"
|
|
442
|
+
},
|
|
443
|
+
"leftMargin": {
|
|
444
|
+
"type": [
|
|
445
|
+
"number",
|
|
446
|
+
"binding"
|
|
447
|
+
],
|
|
448
|
+
"description": "Left margin (binding supported)"
|
|
449
|
+
},
|
|
450
|
+
"rightMargin": {
|
|
451
|
+
"type": [
|
|
452
|
+
"number",
|
|
453
|
+
"binding"
|
|
454
|
+
],
|
|
455
|
+
"description": "Right margin (binding supported)"
|
|
456
|
+
},
|
|
457
|
+
"startMargin": {
|
|
458
|
+
"type": [
|
|
459
|
+
"number",
|
|
460
|
+
"binding"
|
|
461
|
+
],
|
|
462
|
+
"description": "Start margin (RTL aware) (binding supported)"
|
|
463
|
+
},
|
|
464
|
+
"endMargin": {
|
|
465
|
+
"type": [
|
|
466
|
+
"number",
|
|
467
|
+
"binding"
|
|
468
|
+
],
|
|
469
|
+
"description": "End margin (RTL aware) (binding supported)"
|
|
470
|
+
},
|
|
471
|
+
"minTopMargin": {
|
|
472
|
+
"type": [
|
|
473
|
+
"number",
|
|
474
|
+
"binding"
|
|
475
|
+
],
|
|
476
|
+
"description": "Minimum top margin (binding supported)",
|
|
477
|
+
"platform": "swift",
|
|
478
|
+
"mode": "uikit"
|
|
479
|
+
},
|
|
480
|
+
"minBottomMargin": {
|
|
481
|
+
"type": [
|
|
482
|
+
"number",
|
|
483
|
+
"binding"
|
|
484
|
+
],
|
|
485
|
+
"description": "Minimum bottom margin (binding supported)",
|
|
486
|
+
"platform": "swift",
|
|
487
|
+
"mode": "uikit"
|
|
488
|
+
},
|
|
489
|
+
"minLeftMargin": {
|
|
490
|
+
"type": [
|
|
491
|
+
"number",
|
|
492
|
+
"binding"
|
|
493
|
+
],
|
|
494
|
+
"description": "Minimum left margin (binding supported)",
|
|
495
|
+
"platform": "swift",
|
|
496
|
+
"mode": "uikit"
|
|
497
|
+
},
|
|
498
|
+
"minRightMargin": {
|
|
499
|
+
"type": [
|
|
500
|
+
"number",
|
|
501
|
+
"binding"
|
|
502
|
+
],
|
|
503
|
+
"description": "Minimum right margin (binding supported)",
|
|
504
|
+
"platform": "swift",
|
|
505
|
+
"mode": "uikit"
|
|
506
|
+
},
|
|
507
|
+
"maxTopMargin": {
|
|
508
|
+
"type": [
|
|
509
|
+
"number",
|
|
510
|
+
"binding"
|
|
511
|
+
],
|
|
512
|
+
"description": "Maximum top margin (binding supported)",
|
|
513
|
+
"platform": "swift",
|
|
514
|
+
"mode": "uikit"
|
|
515
|
+
},
|
|
516
|
+
"maxBottomMargin": {
|
|
517
|
+
"type": [
|
|
518
|
+
"number",
|
|
519
|
+
"binding"
|
|
520
|
+
],
|
|
521
|
+
"description": "Maximum bottom margin (binding supported)",
|
|
522
|
+
"platform": "swift",
|
|
523
|
+
"mode": "uikit"
|
|
524
|
+
},
|
|
525
|
+
"maxLeftMargin": {
|
|
526
|
+
"type": [
|
|
527
|
+
"number",
|
|
528
|
+
"binding"
|
|
529
|
+
],
|
|
530
|
+
"description": "Maximum left margin (binding supported)",
|
|
531
|
+
"platform": "swift",
|
|
532
|
+
"mode": "uikit"
|
|
533
|
+
},
|
|
534
|
+
"maxRightMargin": {
|
|
535
|
+
"type": [
|
|
536
|
+
"number",
|
|
537
|
+
"binding"
|
|
538
|
+
],
|
|
539
|
+
"description": "Maximum right margin (binding supported)",
|
|
540
|
+
"platform": "swift",
|
|
541
|
+
"mode": "uikit"
|
|
542
|
+
},
|
|
543
|
+
"centerInParent": {
|
|
544
|
+
"type": [
|
|
545
|
+
"boolean",
|
|
546
|
+
"binding"
|
|
547
|
+
],
|
|
548
|
+
"description": "Center both horizontally and vertically (binding supported)"
|
|
549
|
+
},
|
|
550
|
+
"centerVertical": {
|
|
551
|
+
"type": [
|
|
552
|
+
"boolean",
|
|
553
|
+
"binding"
|
|
554
|
+
],
|
|
555
|
+
"description": "Center vertically in parent (binding supported)"
|
|
556
|
+
},
|
|
557
|
+
"centerHorizontal": {
|
|
558
|
+
"type": [
|
|
559
|
+
"boolean",
|
|
560
|
+
"binding"
|
|
561
|
+
],
|
|
562
|
+
"description": "Center horizontally in parent (binding supported)"
|
|
563
|
+
},
|
|
564
|
+
"alignTop": {
|
|
565
|
+
"type": [
|
|
566
|
+
"boolean",
|
|
567
|
+
"binding"
|
|
568
|
+
],
|
|
569
|
+
"description": "Align to parent top (binding supported)"
|
|
570
|
+
},
|
|
571
|
+
"alignBottom": {
|
|
572
|
+
"type": [
|
|
573
|
+
"boolean",
|
|
574
|
+
"binding"
|
|
575
|
+
],
|
|
576
|
+
"description": "Align to parent bottom (binding supported)"
|
|
577
|
+
},
|
|
578
|
+
"alignLeft": {
|
|
579
|
+
"type": [
|
|
580
|
+
"boolean",
|
|
581
|
+
"binding"
|
|
582
|
+
],
|
|
583
|
+
"description": "Align to parent left (binding supported)"
|
|
584
|
+
},
|
|
585
|
+
"alignRight": {
|
|
586
|
+
"type": [
|
|
587
|
+
"boolean",
|
|
588
|
+
"binding"
|
|
589
|
+
],
|
|
590
|
+
"description": "Align to parent right (binding supported)"
|
|
591
|
+
},
|
|
592
|
+
"alignTopOfView": {
|
|
593
|
+
"type": "string",
|
|
594
|
+
"description": "Align below specified view ID"
|
|
595
|
+
},
|
|
596
|
+
"alignBottomOfView": {
|
|
597
|
+
"type": "string",
|
|
598
|
+
"description": "Align above specified view ID"
|
|
599
|
+
},
|
|
600
|
+
"alignLeftOfView": {
|
|
601
|
+
"type": "string",
|
|
602
|
+
"description": "Align to right of specified view ID"
|
|
603
|
+
},
|
|
604
|
+
"alignRightOfView": {
|
|
605
|
+
"type": "string",
|
|
606
|
+
"description": "Align to left of specified view ID"
|
|
607
|
+
},
|
|
608
|
+
"alignTopView": {
|
|
609
|
+
"type": "string",
|
|
610
|
+
"description": "Align top edge with specified view"
|
|
611
|
+
},
|
|
612
|
+
"alignBottomView": {
|
|
613
|
+
"type": "string",
|
|
614
|
+
"description": "Align bottom edge with specified view"
|
|
615
|
+
},
|
|
616
|
+
"alignLeftView": {
|
|
617
|
+
"type": "string",
|
|
618
|
+
"description": "Align left edge with specified view"
|
|
619
|
+
},
|
|
620
|
+
"alignRightView": {
|
|
621
|
+
"type": "string",
|
|
622
|
+
"description": "Align right edge with specified view"
|
|
623
|
+
},
|
|
624
|
+
"alignCenterVerticalView": {
|
|
625
|
+
"type": "string",
|
|
626
|
+
"description": "Align vertical center with specified view"
|
|
627
|
+
},
|
|
628
|
+
"alignCenterHorizontalView": {
|
|
629
|
+
"type": "string",
|
|
630
|
+
"description": "Align horizontal center with specified view"
|
|
631
|
+
},
|
|
632
|
+
"toView": {
|
|
633
|
+
"type": "string",
|
|
634
|
+
"description": "Relative layout target view",
|
|
635
|
+
"platform": "swift",
|
|
636
|
+
"mode": "uikit"
|
|
637
|
+
},
|
|
638
|
+
"shadow": {
|
|
639
|
+
"type": [
|
|
640
|
+
"string",
|
|
641
|
+
"object"
|
|
642
|
+
],
|
|
643
|
+
"description": "Shadow configuration (string 'color|offsetX|offsetY|opacity|radius' or object)",
|
|
644
|
+
"properties": {
|
|
645
|
+
"color": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"description": "Shadow color (hex)"
|
|
648
|
+
},
|
|
649
|
+
"offsetX": {
|
|
650
|
+
"type": "number",
|
|
651
|
+
"description": "Shadow X offset"
|
|
652
|
+
},
|
|
653
|
+
"offsetY": {
|
|
654
|
+
"type": "number",
|
|
655
|
+
"description": "Shadow Y offset"
|
|
656
|
+
},
|
|
657
|
+
"opacity": {
|
|
658
|
+
"type": "number",
|
|
659
|
+
"min": 0,
|
|
660
|
+
"max": 1,
|
|
661
|
+
"description": "Shadow opacity (0-1)"
|
|
662
|
+
},
|
|
663
|
+
"radius": {
|
|
664
|
+
"type": "number",
|
|
665
|
+
"description": "Shadow blur radius"
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
"clipToBounds": {
|
|
670
|
+
"type": [
|
|
671
|
+
"boolean",
|
|
672
|
+
"binding"
|
|
673
|
+
],
|
|
674
|
+
"description": "Whether to clip content to bounds (binding supported)"
|
|
675
|
+
},
|
|
676
|
+
"onclick": {
|
|
677
|
+
"type": [
|
|
678
|
+
"string",
|
|
679
|
+
"array"
|
|
680
|
+
],
|
|
681
|
+
"description": "Click handler function name (selector-based, lowercase) - string only, no binding"
|
|
682
|
+
},
|
|
683
|
+
"onClick": {
|
|
684
|
+
"type": "binding",
|
|
685
|
+
"description": "Click handler (camelCase) - binding only (@{functionName})"
|
|
686
|
+
},
|
|
687
|
+
"onLongPress": {
|
|
688
|
+
"type": "binding",
|
|
689
|
+
"description": "Long press gesture handler (camelCase) - binding only (@{functionName})",
|
|
690
|
+
"binding_direction": "one-way",
|
|
691
|
+
"platform": [
|
|
692
|
+
"swift",
|
|
693
|
+
"kotlin"
|
|
694
|
+
]
|
|
695
|
+
},
|
|
696
|
+
"onPan": {
|
|
697
|
+
"type": "binding",
|
|
698
|
+
"description": "Pan gesture handler (camelCase) - binding only (@{functionName}). Invoked repeatedly while the user drags. Payload: cumulative translation since the gesture began (iOS CGSize, Android Offset; web passes the PointerEvent). A handler declared () -> Void is called without the payload."
|
|
699
|
+
},
|
|
700
|
+
"onPinch": {
|
|
701
|
+
"type": "binding",
|
|
702
|
+
"description": "Pinch gesture handler (camelCase) - binding only (@{functionName}). Invoked repeatedly while the user pinches. Payload: cumulative scale factor since the gesture began (iOS CGFloat, Android Float; web passes the TouchEvent). A handler declared () -> Void is called without the payload."
|
|
703
|
+
},
|
|
704
|
+
"canTap": {
|
|
705
|
+
"type": [
|
|
706
|
+
"boolean",
|
|
707
|
+
"binding"
|
|
708
|
+
],
|
|
709
|
+
"description": "Whether component is tappable (binding supported)"
|
|
710
|
+
},
|
|
711
|
+
"tintColor": {
|
|
712
|
+
"type": [
|
|
713
|
+
"string",
|
|
714
|
+
"binding"
|
|
715
|
+
],
|
|
716
|
+
"description": "Tint color - hex string or color name from colors.json (binding supported)"
|
|
717
|
+
},
|
|
718
|
+
"binding": {
|
|
719
|
+
"type": [
|
|
720
|
+
"string",
|
|
721
|
+
"object"
|
|
722
|
+
],
|
|
723
|
+
"description": "Legacy UIKit KVC binding: names the data property a view is bound to (SJUIViewCreator sets view.binding / view.bindingSet, and UIKit's Binding class pushes values through it). The object form is also the pre-@{} Table data source ({\"data\": \"@{items}\"}). Superseded by '@{...}' in the attribute value itself — use `bind` or the component's own value attribute instead.",
|
|
724
|
+
"platform": "swift"
|
|
725
|
+
},
|
|
726
|
+
"bind": {
|
|
727
|
+
"type": "binding",
|
|
728
|
+
"binding_direction": "two-way",
|
|
729
|
+
"description": "Two-way binding for the component's primary value — Switch/Check isOn, Slider value, Segment selectedIndex, SelectBox selectedValue, Progress progress, Table items. An alternative spelling to each component's own value attribute, which takes precedence when both are set."
|
|
730
|
+
},
|
|
731
|
+
"include": {
|
|
732
|
+
"type": "string",
|
|
733
|
+
"description": "Include another JSON layout (filename without extension)"
|
|
734
|
+
},
|
|
735
|
+
"variables": {
|
|
736
|
+
"type": "object",
|
|
737
|
+
"description": "Variables for include",
|
|
738
|
+
"platform": "swift",
|
|
739
|
+
"mode": "uikit"
|
|
740
|
+
},
|
|
741
|
+
"shared_data": {
|
|
742
|
+
"type": "object",
|
|
743
|
+
"description": "Data passed to included components"
|
|
744
|
+
},
|
|
745
|
+
"style": {
|
|
746
|
+
"type": "string",
|
|
747
|
+
"description": "Style file name (without extension)"
|
|
748
|
+
},
|
|
749
|
+
"compressHorizontal": {
|
|
750
|
+
"type": "string",
|
|
751
|
+
"description": "Horizontal compression resistance",
|
|
752
|
+
"platform": "swift",
|
|
753
|
+
"mode": "uikit"
|
|
754
|
+
},
|
|
755
|
+
"compressVertical": {
|
|
756
|
+
"type": "string",
|
|
757
|
+
"description": "Vertical compression resistance",
|
|
758
|
+
"platform": "swift",
|
|
759
|
+
"mode": "uikit"
|
|
760
|
+
},
|
|
761
|
+
"hugHorizontal": {
|
|
762
|
+
"type": "string",
|
|
763
|
+
"description": "Horizontal content hugging",
|
|
764
|
+
"platform": "swift",
|
|
765
|
+
"mode": "uikit"
|
|
766
|
+
},
|
|
767
|
+
"hugVertical": {
|
|
768
|
+
"type": "string",
|
|
769
|
+
"description": "Vertical content hugging",
|
|
770
|
+
"platform": "swift",
|
|
771
|
+
"mode": "uikit"
|
|
772
|
+
},
|
|
773
|
+
"propertyName": {
|
|
774
|
+
"type": "string",
|
|
775
|
+
"description": "Property name for binding",
|
|
776
|
+
"platform": "swift",
|
|
777
|
+
"mode": "uikit"
|
|
778
|
+
},
|
|
779
|
+
"binding_id": {
|
|
780
|
+
"type": "string",
|
|
781
|
+
"description": "Binding ID",
|
|
782
|
+
"platform": "swift",
|
|
783
|
+
"mode": "uikit"
|
|
784
|
+
},
|
|
785
|
+
"binding_group": {
|
|
786
|
+
"type": [
|
|
787
|
+
"string",
|
|
788
|
+
"array"
|
|
789
|
+
],
|
|
790
|
+
"description": "Groups related bindings for batch updates (can be array for multiple groups)"
|
|
791
|
+
},
|
|
792
|
+
"wrapContent": {
|
|
793
|
+
"type": "boolean",
|
|
794
|
+
"description": "Wrap content",
|
|
795
|
+
"platform": "swift",
|
|
796
|
+
"mode": "uikit"
|
|
797
|
+
},
|
|
798
|
+
"innerPadding": {
|
|
799
|
+
"type": [
|
|
800
|
+
"number",
|
|
801
|
+
"binding"
|
|
802
|
+
],
|
|
803
|
+
"description": "Inner padding (binding supported)",
|
|
804
|
+
"platform": "swift",
|
|
805
|
+
"mode": "uikit"
|
|
806
|
+
},
|
|
807
|
+
"keyBottomView": {
|
|
808
|
+
"type": "string",
|
|
809
|
+
"description": "Key bottom view ID",
|
|
810
|
+
"platform": "swift",
|
|
811
|
+
"mode": "uikit"
|
|
812
|
+
},
|
|
813
|
+
"keyTopView": {
|
|
814
|
+
"type": "string",
|
|
815
|
+
"description": "Key top view ID",
|
|
816
|
+
"platform": "swift",
|
|
817
|
+
"mode": "uikit"
|
|
818
|
+
},
|
|
819
|
+
"keyLeftView": {
|
|
820
|
+
"type": "string",
|
|
821
|
+
"description": "Key left view ID",
|
|
822
|
+
"platform": "swift",
|
|
823
|
+
"mode": "uikit"
|
|
824
|
+
},
|
|
825
|
+
"keyRightView": {
|
|
826
|
+
"type": "string",
|
|
827
|
+
"description": "Key right view ID",
|
|
828
|
+
"platform": "swift",
|
|
829
|
+
"mode": "uikit"
|
|
830
|
+
},
|
|
831
|
+
"scripts": {
|
|
832
|
+
"type": "array",
|
|
833
|
+
"description": "Script definitions",
|
|
834
|
+
"platform": "swift",
|
|
835
|
+
"mode": "uikit"
|
|
836
|
+
},
|
|
837
|
+
"events": {
|
|
838
|
+
"type": "object",
|
|
839
|
+
"description": "Complex event handlers",
|
|
840
|
+
"platform": "swift",
|
|
841
|
+
"mode": "uikit"
|
|
842
|
+
},
|
|
843
|
+
"effectStyle": {
|
|
844
|
+
"type": "string",
|
|
845
|
+
"description": "Visual effect style",
|
|
846
|
+
"platform": "swift",
|
|
847
|
+
"mode": "uikit"
|
|
848
|
+
},
|
|
849
|
+
"tag": {
|
|
850
|
+
"type": [
|
|
851
|
+
"number",
|
|
852
|
+
"binding"
|
|
853
|
+
],
|
|
854
|
+
"description": "View tag for identification (binding supported)",
|
|
855
|
+
"platform": "swift",
|
|
856
|
+
"mode": "uikit"
|
|
857
|
+
},
|
|
858
|
+
"userInteractionEnabled": {
|
|
859
|
+
"type": [
|
|
860
|
+
"boolean",
|
|
861
|
+
"binding"
|
|
862
|
+
],
|
|
863
|
+
"description": "Enable user interaction (binding supported)"
|
|
864
|
+
},
|
|
865
|
+
"enabled": {
|
|
866
|
+
"type": [
|
|
867
|
+
"boolean",
|
|
868
|
+
"binding"
|
|
869
|
+
],
|
|
870
|
+
"description": "Whether component is enabled (can be data binding)"
|
|
871
|
+
},
|
|
872
|
+
"rect": {
|
|
873
|
+
"type": "array",
|
|
874
|
+
"description": "Direct frame [x, y, width, height]",
|
|
875
|
+
"platform": "swift",
|
|
876
|
+
"mode": "uikit"
|
|
877
|
+
},
|
|
878
|
+
"frame": {
|
|
879
|
+
"type": "object",
|
|
880
|
+
"description": "Frame configuration with width/height"
|
|
881
|
+
},
|
|
882
|
+
"indexBelow": {
|
|
883
|
+
"type": "string",
|
|
884
|
+
"description": "Place below specified view ID",
|
|
885
|
+
"platform": [
|
|
886
|
+
"swift",
|
|
887
|
+
"react"
|
|
888
|
+
],
|
|
889
|
+
"platform_reasons": {
|
|
890
|
+
"kotlin": "Compose z-order is Modifier.zIndex on each component's own modifier chain; the codegen has no shared chain, so wiring it partially would work on some components and silently not on others — and z-order only means anything inside a Box (Column/Row children do not overlap). iOS degrades to zIndex(-1); re-declare if the codegen grows a shared modifier chain."
|
|
891
|
+
}
|
|
892
|
+
},
|
|
893
|
+
"indexAbove": {
|
|
894
|
+
"type": "string",
|
|
895
|
+
"description": "Place above specified view ID",
|
|
896
|
+
"platform": [
|
|
897
|
+
"swift",
|
|
898
|
+
"react"
|
|
899
|
+
],
|
|
900
|
+
"platform_reasons": {
|
|
901
|
+
"kotlin": "Same as indexBelow: Compose z-order is Modifier.zIndex on each component's own modifier chain, and without a shared chain a partial wiring would be silently inconsistent across components. Re-declare if the codegen grows a shared modifier chain."
|
|
902
|
+
}
|
|
903
|
+
},
|
|
904
|
+
"touchDisabledState": {
|
|
905
|
+
"type": "string",
|
|
906
|
+
"description": "Touch disable mode",
|
|
907
|
+
"platform": "swift",
|
|
908
|
+
"mode": "uikit"
|
|
909
|
+
},
|
|
910
|
+
"touchEnabledViewIds": {
|
|
911
|
+
"type": "array",
|
|
912
|
+
"description": "IDs of enabled views",
|
|
913
|
+
"platform": "swift",
|
|
914
|
+
"mode": "uikit"
|
|
915
|
+
},
|
|
916
|
+
"data": {
|
|
917
|
+
"type": "array",
|
|
918
|
+
"description": "Data model definitions for binding"
|
|
919
|
+
},
|
|
920
|
+
"bindingScript": {
|
|
921
|
+
"type": "string",
|
|
922
|
+
"description": "Custom Swift binding code",
|
|
923
|
+
"platform": "swift",
|
|
924
|
+
"mode": "uikit"
|
|
925
|
+
},
|
|
926
|
+
"gravity": {
|
|
927
|
+
"type": [
|
|
928
|
+
"string",
|
|
929
|
+
"array"
|
|
930
|
+
],
|
|
931
|
+
"enum": [
|
|
932
|
+
"top",
|
|
933
|
+
"bottom",
|
|
934
|
+
"centerVertical",
|
|
935
|
+
"left",
|
|
936
|
+
"right",
|
|
937
|
+
"centerHorizontal",
|
|
938
|
+
"center"
|
|
939
|
+
],
|
|
940
|
+
"description": "Content gravity/alignment"
|
|
941
|
+
},
|
|
942
|
+
"onAppear": {
|
|
943
|
+
"type": "string",
|
|
944
|
+
"description": "Lifecycle callback when view appears (SwiftUI/Compose only)",
|
|
945
|
+
"mode": ["swiftui", "compose"]
|
|
946
|
+
},
|
|
947
|
+
"onDisappear": {
|
|
948
|
+
"type": "string",
|
|
949
|
+
"description": "Lifecycle callback when view disappears (SwiftUI/Compose only)",
|
|
950
|
+
"mode": ["swiftui", "compose"]
|
|
951
|
+
},
|
|
952
|
+
"className": {
|
|
953
|
+
"type": "string",
|
|
954
|
+
"description": "Custom CSS class name",
|
|
955
|
+
"platform": "react"
|
|
956
|
+
},
|
|
957
|
+
"testId": {
|
|
958
|
+
"type": "string",
|
|
959
|
+
"description": "Test ID for testing (data-testid)",
|
|
960
|
+
"platform": "react"
|
|
961
|
+
},
|
|
962
|
+
"confirmationDialog": {
|
|
963
|
+
"type": "object",
|
|
964
|
+
"description": "Confirmation dialog configuration (iOS 15+)",
|
|
965
|
+
"platform": "swift",
|
|
966
|
+
"mode": "swiftui",
|
|
967
|
+
"properties": {
|
|
968
|
+
"isPresented": {
|
|
969
|
+
"type": "binding",
|
|
970
|
+
"required": true,
|
|
971
|
+
"description": "Binding to control dialog visibility"
|
|
972
|
+
},
|
|
973
|
+
"title": {
|
|
974
|
+
"type": [
|
|
975
|
+
"string",
|
|
976
|
+
"binding"
|
|
977
|
+
],
|
|
978
|
+
"default": "",
|
|
979
|
+
"description": "Dialog title (empty string if not specified)"
|
|
980
|
+
},
|
|
981
|
+
"titleVisibility": {
|
|
982
|
+
"type": "string",
|
|
983
|
+
"enum": [
|
|
984
|
+
"automatic",
|
|
985
|
+
"visible",
|
|
986
|
+
"hidden"
|
|
987
|
+
],
|
|
988
|
+
"default": "automatic",
|
|
989
|
+
"description": "Title visibility control"
|
|
990
|
+
},
|
|
991
|
+
"message": {
|
|
992
|
+
"type": [
|
|
993
|
+
"string",
|
|
994
|
+
"binding"
|
|
995
|
+
],
|
|
996
|
+
"description": "Optional dialog message"
|
|
997
|
+
},
|
|
998
|
+
"actions": {
|
|
999
|
+
"type": "binding",
|
|
1000
|
+
"description": "Binding to function returning action buttons (alternative to layout)"
|
|
1001
|
+
},
|
|
1002
|
+
"layout": {
|
|
1003
|
+
"type": "object",
|
|
1004
|
+
"description": "Layout configuration for dialog content (alternative to actions)",
|
|
1005
|
+
"properties": {
|
|
1006
|
+
"name": {
|
|
1007
|
+
"type": "string",
|
|
1008
|
+
"required": true,
|
|
1009
|
+
"description": "JSON filename for dialog content"
|
|
1010
|
+
},
|
|
1011
|
+
"data": {
|
|
1012
|
+
"type": "binding",
|
|
1013
|
+
"required": true,
|
|
1014
|
+
"description": "Binding to data for the layout view"
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
},
|
|
1020
|
+
"alignment": {
|
|
1021
|
+
"type": "string",
|
|
1022
|
+
"enum": [
|
|
1023
|
+
"topLeading",
|
|
1024
|
+
"top",
|
|
1025
|
+
"topTrailing",
|
|
1026
|
+
"leading",
|
|
1027
|
+
"center",
|
|
1028
|
+
"trailing",
|
|
1029
|
+
"bottomLeading",
|
|
1030
|
+
"bottom",
|
|
1031
|
+
"bottomTrailing"
|
|
1032
|
+
],
|
|
1033
|
+
"description": "String alternative to numeric gravity. Resolves to SwiftUI Alignment / Compose Arrangement+Alignment.",
|
|
1034
|
+
"platform": [
|
|
1035
|
+
"swift",
|
|
1036
|
+
"kotlin"
|
|
1037
|
+
]
|
|
1038
|
+
},
|
|
1039
|
+
"distribution": {
|
|
1040
|
+
"type": "string",
|
|
1041
|
+
"enum": [
|
|
1042
|
+
"fill",
|
|
1043
|
+
"fillEqually",
|
|
1044
|
+
"equalSpacing",
|
|
1045
|
+
"equalCentering"
|
|
1046
|
+
],
|
|
1047
|
+
"description": "Child distribution for orientation-bearing containers. SwiftUI: Spacer/weight synthesis; Compose: Arrangement.",
|
|
1048
|
+
"platform": [
|
|
1049
|
+
"swift",
|
|
1050
|
+
"kotlin"
|
|
1051
|
+
]
|
|
1052
|
+
},
|
|
1053
|
+
"minStartMargin": {
|
|
1054
|
+
"type": "number",
|
|
1055
|
+
"description": "Min margin constraint (SwiftUI dynamic layout).",
|
|
1056
|
+
"platform": "swift",
|
|
1057
|
+
"mode": "swiftui"
|
|
1058
|
+
},
|
|
1059
|
+
"maxStartMargin": {
|
|
1060
|
+
"type": "number",
|
|
1061
|
+
"description": "Max margin constraint (SwiftUI dynamic layout).",
|
|
1062
|
+
"platform": "swift",
|
|
1063
|
+
"mode": "swiftui"
|
|
1064
|
+
},
|
|
1065
|
+
"minEndMargin": {
|
|
1066
|
+
"type": "number",
|
|
1067
|
+
"description": "Min margin constraint (SwiftUI dynamic layout).",
|
|
1068
|
+
"platform": "swift",
|
|
1069
|
+
"mode": "swiftui"
|
|
1070
|
+
},
|
|
1071
|
+
"maxEndMargin": {
|
|
1072
|
+
"type": "number",
|
|
1073
|
+
"description": "Max margin constraint (SwiftUI dynamic layout).",
|
|
1074
|
+
"platform": "swift",
|
|
1075
|
+
"mode": "swiftui"
|
|
1076
|
+
},
|
|
1077
|
+
"idealWidth": {
|
|
1078
|
+
"type": "number",
|
|
1079
|
+
"description": "SwiftUI .frame(idealWidth:) hint for layout system.",
|
|
1080
|
+
"platform": "swift",
|
|
1081
|
+
"mode": "swiftui"
|
|
1082
|
+
},
|
|
1083
|
+
"idealHeight": {
|
|
1084
|
+
"type": "number",
|
|
1085
|
+
"description": "SwiftUI .frame(idealHeight:) hint.",
|
|
1086
|
+
"platform": "swift",
|
|
1087
|
+
"mode": "swiftui"
|
|
1088
|
+
},
|
|
1089
|
+
"widthRaw": {
|
|
1090
|
+
"type": "string",
|
|
1091
|
+
"description": "Debug: original width string before parsing. Dynamic-only; not emitted to static code.",
|
|
1092
|
+
"platform": "swift",
|
|
1093
|
+
"mode": "dynamic-only"
|
|
1094
|
+
},
|
|
1095
|
+
"heightRaw": {
|
|
1096
|
+
"type": "string",
|
|
1097
|
+
"description": "Debug: original height string before parsing. Dynamic-only; not emitted to static code.",
|
|
1098
|
+
"platform": "swift",
|
|
1099
|
+
"mode": "dynamic-only"
|
|
1100
|
+
}
|
|
1101
|
+
},
|
|
1102
|
+
"Label": {
|
|
1103
|
+
"text": {
|
|
1104
|
+
"type": [
|
|
1105
|
+
"string",
|
|
1106
|
+
"binding"
|
|
1107
|
+
],
|
|
1108
|
+
"description": "Text content (can be data binding, supports interpolation). PLAIN TEXT: markdown is not interpreted, so \"[label](/path)\", \"**bold**\" and backticks render literally, brackets and all. To emphasise or link part of the string, use partialAttributes ('range' plus font/color/underline, and 'onclick' for a tappable span). Rendering real markdown is out of scope for Label — write a custom component."
|
|
1109
|
+
},
|
|
1110
|
+
"hint": {
|
|
1111
|
+
"type": "string",
|
|
1112
|
+
"description": "Placeholder text when empty (primary)"
|
|
1113
|
+
},
|
|
1114
|
+
"placeholder": {
|
|
1115
|
+
"type": "string",
|
|
1116
|
+
"description": "Placeholder text when empty (alias for hint)"
|
|
1117
|
+
},
|
|
1118
|
+
"font": {
|
|
1119
|
+
"type": [
|
|
1120
|
+
"string",
|
|
1121
|
+
"binding"
|
|
1122
|
+
],
|
|
1123
|
+
"description": "Font weight name (regular/medium/semibold/bold/...) or font name. Passed as the `weight` field of `FontSpec` to `Configuration.Font.fontProvider`. Can be a data binding."
|
|
1124
|
+
},
|
|
1125
|
+
"fontSize": {
|
|
1126
|
+
"type": [
|
|
1127
|
+
"number",
|
|
1128
|
+
"binding"
|
|
1129
|
+
],
|
|
1130
|
+
"description": "Font size. Passed as the `size` field of `FontSpec` to `Configuration.Font.fontProvider`. Can be a data binding."
|
|
1131
|
+
},
|
|
1132
|
+
"fontColor": {
|
|
1133
|
+
"type": [
|
|
1134
|
+
"string",
|
|
1135
|
+
"binding"
|
|
1136
|
+
],
|
|
1137
|
+
"description": "Font color - hex string or color name from colors.json (can be data binding)"
|
|
1138
|
+
},
|
|
1139
|
+
"fontFamily": {
|
|
1140
|
+
"type": [
|
|
1141
|
+
"string",
|
|
1142
|
+
"binding"
|
|
1143
|
+
],
|
|
1144
|
+
"description": "Font family name (e.g., 'Noto Sans JP'). Passed as the `family` field of `FontSpec` to `Configuration.Font.fontProvider`. Coexists with `font` (weight) and `fontSize` which are passed in the same FontSpec."
|
|
1145
|
+
},
|
|
1146
|
+
"lineHeight": {
|
|
1147
|
+
"type": "number",
|
|
1148
|
+
"description": "Line height",
|
|
1149
|
+
"platform": "react"
|
|
1150
|
+
},
|
|
1151
|
+
"textTransform": {
|
|
1152
|
+
"type": "string",
|
|
1153
|
+
"enum": [
|
|
1154
|
+
"none",
|
|
1155
|
+
"capitalize",
|
|
1156
|
+
"uppercase",
|
|
1157
|
+
"lowercase"
|
|
1158
|
+
],
|
|
1159
|
+
"description": "Text transformation",
|
|
1160
|
+
"platform": "react"
|
|
1161
|
+
},
|
|
1162
|
+
"selected": {
|
|
1163
|
+
"type": [
|
|
1164
|
+
"boolean",
|
|
1165
|
+
"binding"
|
|
1166
|
+
],
|
|
1167
|
+
"description": "Selected state (binding supported). Decides which attribute set is in force: while true the label renders with 'highlightAttributes' (or 'highlightColor'), otherwise with its base font and colour."
|
|
1168
|
+
},
|
|
1169
|
+
"textAlign": {
|
|
1170
|
+
"type": [
|
|
1171
|
+
"string",
|
|
1172
|
+
"binding"
|
|
1173
|
+
],
|
|
1174
|
+
"enum": [
|
|
1175
|
+
"Left",
|
|
1176
|
+
"Center",
|
|
1177
|
+
"Right",
|
|
1178
|
+
"left",
|
|
1179
|
+
"center",
|
|
1180
|
+
"right"
|
|
1181
|
+
],
|
|
1182
|
+
"description": "Text alignment (binding supported)"
|
|
1183
|
+
},
|
|
1184
|
+
"lines": {
|
|
1185
|
+
"type": [
|
|
1186
|
+
"number",
|
|
1187
|
+
"binding"
|
|
1188
|
+
],
|
|
1189
|
+
"min": 0,
|
|
1190
|
+
"description": "Maximum number of lines (0 for unlimited) (binding supported)"
|
|
1191
|
+
},
|
|
1192
|
+
"lineBreakMode": {
|
|
1193
|
+
"type": "string",
|
|
1194
|
+
"enum": [
|
|
1195
|
+
"Char",
|
|
1196
|
+
"Clip",
|
|
1197
|
+
"Word",
|
|
1198
|
+
"Head",
|
|
1199
|
+
"Middle",
|
|
1200
|
+
"Tail"
|
|
1201
|
+
],
|
|
1202
|
+
"description": "Truncation mode"
|
|
1203
|
+
},
|
|
1204
|
+
"lineHeightMultiple": {
|
|
1205
|
+
"type": [
|
|
1206
|
+
"number",
|
|
1207
|
+
"binding"
|
|
1208
|
+
],
|
|
1209
|
+
"min": 1,
|
|
1210
|
+
"description": "Line height multiplier (binding supported)"
|
|
1211
|
+
},
|
|
1212
|
+
"lineSpacing": {
|
|
1213
|
+
"type": [
|
|
1214
|
+
"number",
|
|
1215
|
+
"binding"
|
|
1216
|
+
],
|
|
1217
|
+
"description": "Line spacing (binding supported)"
|
|
1218
|
+
},
|
|
1219
|
+
"edgeInset": {
|
|
1220
|
+
"type": [
|
|
1221
|
+
"array",
|
|
1222
|
+
"string"
|
|
1223
|
+
],
|
|
1224
|
+
"description": "Edge insets as array or pipe-separated string",
|
|
1225
|
+
"deprecated": "kotlin",
|
|
1226
|
+
"deprecation_note": "Compose Text has no edgeInset; use padding* instead."
|
|
1227
|
+
},
|
|
1228
|
+
"underline": {
|
|
1229
|
+
"type": [
|
|
1230
|
+
"boolean",
|
|
1231
|
+
"object",
|
|
1232
|
+
"array"
|
|
1233
|
+
],
|
|
1234
|
+
"description": "Underline styling (boolean for simple, object for styled)",
|
|
1235
|
+
"properties": {
|
|
1236
|
+
"lineStyle": {
|
|
1237
|
+
"type": "string",
|
|
1238
|
+
"enum": [
|
|
1239
|
+
"Single",
|
|
1240
|
+
"Double",
|
|
1241
|
+
"Thick",
|
|
1242
|
+
"None"
|
|
1243
|
+
],
|
|
1244
|
+
"description": "Underline style"
|
|
1245
|
+
},
|
|
1246
|
+
"color": {
|
|
1247
|
+
"type": "string",
|
|
1248
|
+
"description": "Underline color - hex string or color name from colors.json"
|
|
1249
|
+
},
|
|
1250
|
+
"lineOffset": {
|
|
1251
|
+
"type": "number",
|
|
1252
|
+
"description": "Baseline offset"
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
},
|
|
1256
|
+
"strikethrough": {
|
|
1257
|
+
"type": [
|
|
1258
|
+
"boolean",
|
|
1259
|
+
"object"
|
|
1260
|
+
],
|
|
1261
|
+
"description": "Strikethrough styling (boolean for simple, object for styled)",
|
|
1262
|
+
"properties": {
|
|
1263
|
+
"lineStyle": {
|
|
1264
|
+
"type": "string",
|
|
1265
|
+
"enum": [
|
|
1266
|
+
"Single",
|
|
1267
|
+
"Double",
|
|
1268
|
+
"Thick",
|
|
1269
|
+
"None"
|
|
1270
|
+
],
|
|
1271
|
+
"description": "Strikethrough style"
|
|
1272
|
+
},
|
|
1273
|
+
"color": {
|
|
1274
|
+
"type": "string",
|
|
1275
|
+
"description": "Strikethrough color - hex string or color name from colors.json"
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
},
|
|
1279
|
+
"autoShrink": {
|
|
1280
|
+
"type": "boolean",
|
|
1281
|
+
"description": "Enable auto-shrink"
|
|
1282
|
+
},
|
|
1283
|
+
"minimumScaleFactor": {
|
|
1284
|
+
"type": [
|
|
1285
|
+
"number",
|
|
1286
|
+
"binding"
|
|
1287
|
+
],
|
|
1288
|
+
"min": 0,
|
|
1289
|
+
"max": 1,
|
|
1290
|
+
"description": "Minimum scale factor for auto-shrink (binding supported)"
|
|
1291
|
+
},
|
|
1292
|
+
"linkable": {
|
|
1293
|
+
"type": [
|
|
1294
|
+
"boolean",
|
|
1295
|
+
"binding"
|
|
1296
|
+
],
|
|
1297
|
+
"description": "Enable URL/phone detection. Auto-links BARE http(s) URLs and phone numbers found in the text. It does not parse markdown, and relative paths are deliberately never linked: a path like \"/guides/x\" only means something to a web router, so linkifying it would produce a control that is dead on iOS and Android. Express a cross-document reference with partialAttributes 'range' + 'onclick', where the handler performs the navigation itself — including scrolling to the target position, which an href cannot express on mobile anyway."
|
|
1298
|
+
},
|
|
1299
|
+
"textShadow": {
|
|
1300
|
+
"type": [
|
|
1301
|
+
"string",
|
|
1302
|
+
"object"
|
|
1303
|
+
],
|
|
1304
|
+
"description": "Text shadow configuration"
|
|
1305
|
+
},
|
|
1306
|
+
"hintColor": {
|
|
1307
|
+
"type": [
|
|
1308
|
+
"string",
|
|
1309
|
+
"binding"
|
|
1310
|
+
],
|
|
1311
|
+
"description": "Hint text color - hex string or color name from colors.json (binding supported)"
|
|
1312
|
+
},
|
|
1313
|
+
"highlightAttributes": {
|
|
1314
|
+
"type": "object",
|
|
1315
|
+
"description": "Highlight styling attributes when selected",
|
|
1316
|
+
"properties": {
|
|
1317
|
+
"font": {
|
|
1318
|
+
"type": "string",
|
|
1319
|
+
"description": "Font name"
|
|
1320
|
+
},
|
|
1321
|
+
"fontSize": {
|
|
1322
|
+
"type": "number",
|
|
1323
|
+
"description": "Font size"
|
|
1324
|
+
},
|
|
1325
|
+
"fontColor": {
|
|
1326
|
+
"type": "string",
|
|
1327
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
1328
|
+
},
|
|
1329
|
+
"lineHeightMultiple": {
|
|
1330
|
+
"type": "number",
|
|
1331
|
+
"description": "Line height multiplier"
|
|
1332
|
+
},
|
|
1333
|
+
"textAlign": {
|
|
1334
|
+
"type": "string",
|
|
1335
|
+
"enum": [
|
|
1336
|
+
"Left",
|
|
1337
|
+
"Right",
|
|
1338
|
+
"Center"
|
|
1339
|
+
],
|
|
1340
|
+
"description": "Text alignment"
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
},
|
|
1344
|
+
"highlightColor": {
|
|
1345
|
+
"type": [
|
|
1346
|
+
"string",
|
|
1347
|
+
"binding"
|
|
1348
|
+
],
|
|
1349
|
+
"description": "Font color when selected - hex string or color name from colors.json (binding supported)"
|
|
1350
|
+
},
|
|
1351
|
+
"partialAttributes": {
|
|
1352
|
+
"type": "array",
|
|
1353
|
+
"description": "Partial text styling: apply font/size/color/underline/shadow to a substring selected by 'range' (a [start, end] pair, a text pattern, or a binding), and optionally make it tappable with 'onclick'. This is the supported way to get emphasis or a link inside a Label, since 'text' is plain text and markdown is not interpreted, and it is the portable way to express a cross-reference: the handler navigates (and scrolls to the target) in host code, so the same layout works everywhere, where a URL-based link would only work on web. All three platforms resolve partials at RUNTIME against the resolved string, so a pattern range and a localized or bound 'text' both work. Semantics, identical across platforms and verified against each runtime: an array range is [start, end) with the end exclusive; a string range is the FIRST occurrence and the partial is skipped (not an error) when the pattern is absent; a range that is out of bounds or inverted is skipped; partials apply in declaration order and MERGE where they overlap, later declarations winning per property.",
|
|
1354
|
+
"items": {
|
|
1355
|
+
"type": "object",
|
|
1356
|
+
"properties": {
|
|
1357
|
+
"font": {
|
|
1358
|
+
"type": "string",
|
|
1359
|
+
"description": "Font name"
|
|
1360
|
+
},
|
|
1361
|
+
"fontSize": {
|
|
1362
|
+
"type": "number",
|
|
1363
|
+
"description": "Font size"
|
|
1364
|
+
},
|
|
1365
|
+
"fontColor": {
|
|
1366
|
+
"type": "string",
|
|
1367
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
1368
|
+
},
|
|
1369
|
+
"lineSpacing": {
|
|
1370
|
+
"type": "number",
|
|
1371
|
+
"description": "Line spacing"
|
|
1372
|
+
},
|
|
1373
|
+
"lineHeightMultiple": {
|
|
1374
|
+
"type": "number",
|
|
1375
|
+
"description": "Line height multiplier"
|
|
1376
|
+
},
|
|
1377
|
+
"lineBreakMode": {
|
|
1378
|
+
"type": "string",
|
|
1379
|
+
"enum": [
|
|
1380
|
+
"Char",
|
|
1381
|
+
"Clip",
|
|
1382
|
+
"Word",
|
|
1383
|
+
"Head",
|
|
1384
|
+
"Middle",
|
|
1385
|
+
"Tail"
|
|
1386
|
+
],
|
|
1387
|
+
"description": "Line break mode"
|
|
1388
|
+
},
|
|
1389
|
+
"textAlign": {
|
|
1390
|
+
"type": "string",
|
|
1391
|
+
"enum": [
|
|
1392
|
+
"Left",
|
|
1393
|
+
"Right",
|
|
1394
|
+
"Center"
|
|
1395
|
+
],
|
|
1396
|
+
"description": "Text alignment"
|
|
1397
|
+
},
|
|
1398
|
+
"underline": {
|
|
1399
|
+
"type": "object",
|
|
1400
|
+
"properties": {
|
|
1401
|
+
"lineStyle": {
|
|
1402
|
+
"type": "string",
|
|
1403
|
+
"enum": [
|
|
1404
|
+
"Single",
|
|
1405
|
+
"Double",
|
|
1406
|
+
"Thick",
|
|
1407
|
+
"None"
|
|
1408
|
+
],
|
|
1409
|
+
"description": "Underline style"
|
|
1410
|
+
},
|
|
1411
|
+
"color": {
|
|
1412
|
+
"type": "string",
|
|
1413
|
+
"description": "Underline color - hex string or color name from colors.json"
|
|
1414
|
+
},
|
|
1415
|
+
"lineOffset": {
|
|
1416
|
+
"type": "number",
|
|
1417
|
+
"description": "Baseline offset"
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
},
|
|
1421
|
+
"textShadow": {
|
|
1422
|
+
"type": "string",
|
|
1423
|
+
"description": "Text shadow"
|
|
1424
|
+
},
|
|
1425
|
+
"range": {
|
|
1426
|
+
"type": [
|
|
1427
|
+
"array",
|
|
1428
|
+
"string"
|
|
1429
|
+
],
|
|
1430
|
+
"description": "Range [start, end], text pattern string, or binding expression"
|
|
1431
|
+
},
|
|
1432
|
+
"onclick": {
|
|
1433
|
+
"type": "string",
|
|
1434
|
+
"description": "Click handler for this range (selector-based, lowercase)"
|
|
1435
|
+
},
|
|
1436
|
+
"onClick": {
|
|
1437
|
+
"type": "binding",
|
|
1438
|
+
"description": "Click handler for this range (camelCase) - binding only (@{functionName})"
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
},
|
|
1443
|
+
"hintAttributes": {
|
|
1444
|
+
"type": "object",
|
|
1445
|
+
"description": "Hint text styling attributes",
|
|
1446
|
+
"properties": {
|
|
1447
|
+
"font": {
|
|
1448
|
+
"type": "string",
|
|
1449
|
+
"description": "Font name"
|
|
1450
|
+
},
|
|
1451
|
+
"fontSize": {
|
|
1452
|
+
"type": "number",
|
|
1453
|
+
"description": "Font size"
|
|
1454
|
+
},
|
|
1455
|
+
"fontColor": {
|
|
1456
|
+
"type": "string",
|
|
1457
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
1458
|
+
},
|
|
1459
|
+
"lineHeightMultiple": {
|
|
1460
|
+
"type": "number",
|
|
1461
|
+
"description": "Line height multiplier"
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
},
|
|
1465
|
+
"fontWeight": {
|
|
1466
|
+
"type": [
|
|
1467
|
+
"string",
|
|
1468
|
+
"number"
|
|
1469
|
+
],
|
|
1470
|
+
"description": "Font weight (e.g., 'bold', 'semibold', '500', 600)"
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
"TextField": {
|
|
1474
|
+
"text": {
|
|
1475
|
+
"type": [
|
|
1476
|
+
"string",
|
|
1477
|
+
"binding"
|
|
1478
|
+
],
|
|
1479
|
+
"description": "Text content (binding for two-way)",
|
|
1480
|
+
"binding_direction": "two-way"
|
|
1481
|
+
},
|
|
1482
|
+
"hint": {
|
|
1483
|
+
"type": "string",
|
|
1484
|
+
"description": "Placeholder text (primary)"
|
|
1485
|
+
},
|
|
1486
|
+
"placeholder": {
|
|
1487
|
+
"type": "string",
|
|
1488
|
+
"description": "Placeholder text (alias for hint)"
|
|
1489
|
+
},
|
|
1490
|
+
"hintColor": {
|
|
1491
|
+
"type": [
|
|
1492
|
+
"string",
|
|
1493
|
+
"binding"
|
|
1494
|
+
],
|
|
1495
|
+
"description": "Placeholder color - hex string or color name from colors.json (binding supported)",
|
|
1496
|
+
"deprecated": "swiftui",
|
|
1497
|
+
"deprecation_note": "SwiftUI TextField placeholder cannot be color-styled."
|
|
1498
|
+
},
|
|
1499
|
+
"hintFont": {
|
|
1500
|
+
"type": "string",
|
|
1501
|
+
"description": "Placeholder font",
|
|
1502
|
+
"deprecated": "swiftui",
|
|
1503
|
+
"deprecation_note": "SwiftUI TextField placeholder cannot be custom-font-styled."
|
|
1504
|
+
},
|
|
1505
|
+
"hintFontSize": {
|
|
1506
|
+
"type": "number",
|
|
1507
|
+
"description": "Placeholder font size",
|
|
1508
|
+
"deprecated": "swiftui",
|
|
1509
|
+
"deprecation_note": "SwiftUI TextField placeholder cannot be custom-size-styled."
|
|
1510
|
+
},
|
|
1511
|
+
"hintAttributes": {
|
|
1512
|
+
"type": "object",
|
|
1513
|
+
"description": "Hint text attributes (font, color, etc.)",
|
|
1514
|
+
"platform": "swift",
|
|
1515
|
+
"mode": "uikit"
|
|
1516
|
+
},
|
|
1517
|
+
"font": {
|
|
1518
|
+
"type": [
|
|
1519
|
+
"string",
|
|
1520
|
+
"binding"
|
|
1521
|
+
],
|
|
1522
|
+
"description": "Font name or 'bold' (binding supported)"
|
|
1523
|
+
},
|
|
1524
|
+
"fontSize": {
|
|
1525
|
+
"type": [
|
|
1526
|
+
"number",
|
|
1527
|
+
"binding"
|
|
1528
|
+
],
|
|
1529
|
+
"description": "Font size (binding supported)"
|
|
1530
|
+
},
|
|
1531
|
+
"fontColor": {
|
|
1532
|
+
"type": [
|
|
1533
|
+
"string",
|
|
1534
|
+
"binding"
|
|
1535
|
+
],
|
|
1536
|
+
"description": "Font color - hex string or color name from colors.json (binding supported)"
|
|
1537
|
+
},
|
|
1538
|
+
"textAlign": {
|
|
1539
|
+
"type": "string",
|
|
1540
|
+
"enum": [
|
|
1541
|
+
"Left",
|
|
1542
|
+
"Center",
|
|
1543
|
+
"Right",
|
|
1544
|
+
"left",
|
|
1545
|
+
"center",
|
|
1546
|
+
"right"
|
|
1547
|
+
],
|
|
1548
|
+
"description": "Text alignment"
|
|
1549
|
+
},
|
|
1550
|
+
"borderStyle": {
|
|
1551
|
+
"type": "string",
|
|
1552
|
+
"enum": [
|
|
1553
|
+
"none",
|
|
1554
|
+
"line",
|
|
1555
|
+
"bezel",
|
|
1556
|
+
"roundedRect",
|
|
1557
|
+
"RoundedRect",
|
|
1558
|
+
"Line",
|
|
1559
|
+
"Bezel"
|
|
1560
|
+
],
|
|
1561
|
+
"description": "Border style"
|
|
1562
|
+
},
|
|
1563
|
+
"input": {
|
|
1564
|
+
"type": "string",
|
|
1565
|
+
"enum": [
|
|
1566
|
+
"default",
|
|
1567
|
+
"alphabet",
|
|
1568
|
+
"allphabet",
|
|
1569
|
+
"email",
|
|
1570
|
+
"number",
|
|
1571
|
+
"phone",
|
|
1572
|
+
"url",
|
|
1573
|
+
"password",
|
|
1574
|
+
"decimal"
|
|
1575
|
+
],
|
|
1576
|
+
"description": "Input type (includes 'allphabet' typo for backward compatibility)"
|
|
1577
|
+
},
|
|
1578
|
+
"inputType": {
|
|
1579
|
+
"type": "string",
|
|
1580
|
+
"description": "Input type for Android (Android-only; `input` is the cross-platform attribute)",
|
|
1581
|
+
"platform": "kotlin"
|
|
1582
|
+
},
|
|
1583
|
+
"returnKeyType": {
|
|
1584
|
+
"type": "string",
|
|
1585
|
+
"enum": [
|
|
1586
|
+
"Done",
|
|
1587
|
+
"Go",
|
|
1588
|
+
"Next",
|
|
1589
|
+
"Return",
|
|
1590
|
+
"Search",
|
|
1591
|
+
"Send",
|
|
1592
|
+
"Continue",
|
|
1593
|
+
"Join",
|
|
1594
|
+
"Route",
|
|
1595
|
+
"Yahoo",
|
|
1596
|
+
"Google"
|
|
1597
|
+
],
|
|
1598
|
+
"description": "Return key type"
|
|
1599
|
+
},
|
|
1600
|
+
"contentType": {
|
|
1601
|
+
"type": [
|
|
1602
|
+
"string",
|
|
1603
|
+
"binding"
|
|
1604
|
+
],
|
|
1605
|
+
"description": "Content type for autofill (binding supported)"
|
|
1606
|
+
},
|
|
1607
|
+
"secure": {
|
|
1608
|
+
"type": [
|
|
1609
|
+
"boolean",
|
|
1610
|
+
"binding"
|
|
1611
|
+
],
|
|
1612
|
+
"description": "Secure text entry for passwords (can be data binding)",
|
|
1613
|
+
"platform": "swift",
|
|
1614
|
+
"mode": "swiftui"
|
|
1615
|
+
},
|
|
1616
|
+
"fieldPadding": {
|
|
1617
|
+
"type": "number",
|
|
1618
|
+
"description": "Field padding",
|
|
1619
|
+
"platform": "swift",
|
|
1620
|
+
"mode": "swiftui"
|
|
1621
|
+
},
|
|
1622
|
+
"textPaddingLeft": {
|
|
1623
|
+
"type": "number",
|
|
1624
|
+
"description": "Text padding left"
|
|
1625
|
+
},
|
|
1626
|
+
"textPaddingRight": {
|
|
1627
|
+
"type": "number",
|
|
1628
|
+
"description": "Text padding right",
|
|
1629
|
+
"platform": "swift",
|
|
1630
|
+
"mode": "uikit"
|
|
1631
|
+
},
|
|
1632
|
+
"hasContainer": {
|
|
1633
|
+
"type": "boolean",
|
|
1634
|
+
"description": "Has container view",
|
|
1635
|
+
"platform": "swift",
|
|
1636
|
+
"mode": "uikit",
|
|
1637
|
+
"deprecated": "uikit",
|
|
1638
|
+
"deprecation_note": "hasContainer is a UIKit-only behavior."
|
|
1639
|
+
},
|
|
1640
|
+
"textVerticalAlign": {
|
|
1641
|
+
"type": "string",
|
|
1642
|
+
"description": "Text vertical alignment",
|
|
1643
|
+
"platform": "swift",
|
|
1644
|
+
"mode": "uikit"
|
|
1645
|
+
},
|
|
1646
|
+
"applyLiquidGlass": {
|
|
1647
|
+
"type": "boolean",
|
|
1648
|
+
"description": "Apply liquid glass effect",
|
|
1649
|
+
"platform": "swift",
|
|
1650
|
+
"mode": "uikit"
|
|
1651
|
+
},
|
|
1652
|
+
"accessoryCornerRadius": {
|
|
1653
|
+
"type": "number",
|
|
1654
|
+
"description": "Accessory corner radius",
|
|
1655
|
+
"platform": "swift",
|
|
1656
|
+
"mode": "uikit"
|
|
1657
|
+
},
|
|
1658
|
+
"glassEffectStyle": {
|
|
1659
|
+
"type": "string",
|
|
1660
|
+
"description": "Glass effect style",
|
|
1661
|
+
"platform": "swift",
|
|
1662
|
+
"mode": "uikit"
|
|
1663
|
+
},
|
|
1664
|
+
"accessoryBackground": {
|
|
1665
|
+
"type": "string",
|
|
1666
|
+
"description": "Input accessory background - hex string or color name from colors.json",
|
|
1667
|
+
"platform": "swift",
|
|
1668
|
+
"mode": "swiftui"
|
|
1669
|
+
},
|
|
1670
|
+
"accessoryTextColor": {
|
|
1671
|
+
"type": "string",
|
|
1672
|
+
"description": "Input accessory text color - hex string or color name from colors.json",
|
|
1673
|
+
"platform": "swift",
|
|
1674
|
+
"mode": "swiftui"
|
|
1675
|
+
},
|
|
1676
|
+
"doneText": {
|
|
1677
|
+
"type": "string",
|
|
1678
|
+
"description": "Done button text",
|
|
1679
|
+
"platform": "swift",
|
|
1680
|
+
"mode": "swiftui"
|
|
1681
|
+
},
|
|
1682
|
+
"tintColor": {
|
|
1683
|
+
"type": "string",
|
|
1684
|
+
"description": "Cursor/caret color - hex string or color name from colors.json"
|
|
1685
|
+
},
|
|
1686
|
+
"caretAttributes": {
|
|
1687
|
+
"type": "object",
|
|
1688
|
+
"description": "Caret styling attributes (fontColor for cursor color)",
|
|
1689
|
+
"properties": {
|
|
1690
|
+
"fontColor": {
|
|
1691
|
+
"type": "string",
|
|
1692
|
+
"description": "Caret color - hex string or color name from colors.json"
|
|
1693
|
+
}
|
|
1694
|
+
},
|
|
1695
|
+
"deprecated": "swiftui",
|
|
1696
|
+
"deprecation_note": "SwiftUI cannot style the caret (iOS 17 has partial .tint API)."
|
|
1697
|
+
},
|
|
1698
|
+
"onTextChange": {
|
|
1699
|
+
"type": "string",
|
|
1700
|
+
"description": "Text change event handler"
|
|
1701
|
+
},
|
|
1702
|
+
"autocapitalizationType": {
|
|
1703
|
+
"type": "string",
|
|
1704
|
+
"description": "Auto-capitalization type"
|
|
1705
|
+
},
|
|
1706
|
+
"autocorrectionType": {
|
|
1707
|
+
"type": "string",
|
|
1708
|
+
"description": "Auto-correction type"
|
|
1709
|
+
},
|
|
1710
|
+
"spellCheckingType": {
|
|
1711
|
+
"type": "string",
|
|
1712
|
+
"description": "Spell checking type",
|
|
1713
|
+
"platform": "swift",
|
|
1714
|
+
"deprecated": "swift",
|
|
1715
|
+
"deprecation_note": "Compose does not expose spell-checking control."
|
|
1716
|
+
},
|
|
1717
|
+
"keyboardAppearance": {
|
|
1718
|
+
"type": "string",
|
|
1719
|
+
"description": "Keyboard appearance: dark, light",
|
|
1720
|
+
"deprecated": "kotlin",
|
|
1721
|
+
"deprecation_note": "Compose keyboard appearance is system-controlled."
|
|
1722
|
+
},
|
|
1723
|
+
"clearButtonMode": {
|
|
1724
|
+
"type": "string",
|
|
1725
|
+
"description": "Clear button mode",
|
|
1726
|
+
"platform": "swift"
|
|
1727
|
+
},
|
|
1728
|
+
"onFocus": {
|
|
1729
|
+
"type": "string",
|
|
1730
|
+
"description": "Focus event handler"
|
|
1731
|
+
},
|
|
1732
|
+
"onBlur": {
|
|
1733
|
+
"type": "string",
|
|
1734
|
+
"description": "Blur event handler"
|
|
1735
|
+
},
|
|
1736
|
+
"onBeginEditing": {
|
|
1737
|
+
"type": "string",
|
|
1738
|
+
"description": "Begin editing event handler"
|
|
1739
|
+
},
|
|
1740
|
+
"onEndEditing": {
|
|
1741
|
+
"type": "string",
|
|
1742
|
+
"description": "End editing event handler"
|
|
1743
|
+
},
|
|
1744
|
+
"onSubmit": {
|
|
1745
|
+
"type": "string",
|
|
1746
|
+
"description": "Submit event handler — fires when the user taps the return/done key (binding or raw method name). On SwiftUI emitted as .onSubmit { ... }; on Compose emitted in KeyboardActions.onDone/onGo/onSearch/onSend"
|
|
1747
|
+
},
|
|
1748
|
+
"onDeleteBackward": {
|
|
1749
|
+
"type": "string",
|
|
1750
|
+
"description": "Delete backward (backspace) event handler",
|
|
1751
|
+
"platform": "swift",
|
|
1752
|
+
"mode": "uikit"
|
|
1753
|
+
},
|
|
1754
|
+
"onShouldReturn": {
|
|
1755
|
+
"type": "string",
|
|
1756
|
+
"description": "Should return event handler (return true to allow)",
|
|
1757
|
+
"platform": "swift",
|
|
1758
|
+
"mode": "uikit"
|
|
1759
|
+
},
|
|
1760
|
+
"onShouldChangeCharacters": {
|
|
1761
|
+
"type": "string",
|
|
1762
|
+
"description": "Should change characters event handler (return true to allow)",
|
|
1763
|
+
"platform": "swift",
|
|
1764
|
+
"mode": "uikit"
|
|
1765
|
+
},
|
|
1766
|
+
"onShouldClear": {
|
|
1767
|
+
"type": "string",
|
|
1768
|
+
"description": "Should clear event handler (return true to allow)",
|
|
1769
|
+
"platform": "swift",
|
|
1770
|
+
"mode": "uikit"
|
|
1771
|
+
},
|
|
1772
|
+
"onChangeSelection": {
|
|
1773
|
+
"type": "string",
|
|
1774
|
+
"description": "Selection change event handler",
|
|
1775
|
+
"platform": "swift",
|
|
1776
|
+
"mode": "uikit"
|
|
1777
|
+
},
|
|
1778
|
+
"onShouldBeginEditing": {
|
|
1779
|
+
"type": "string",
|
|
1780
|
+
"description": "Should begin editing event handler (return true to allow)",
|
|
1781
|
+
"platform": "swift",
|
|
1782
|
+
"mode": "uikit"
|
|
1783
|
+
},
|
|
1784
|
+
"onShouldEndEditing": {
|
|
1785
|
+
"type": "string",
|
|
1786
|
+
"description": "Should end editing event handler (return true to allow)",
|
|
1787
|
+
"platform": "swift",
|
|
1788
|
+
"mode": "uikit"
|
|
1789
|
+
},
|
|
1790
|
+
"leftView": {
|
|
1791
|
+
"type": "object",
|
|
1792
|
+
"description": "Left view configuration",
|
|
1793
|
+
"platform": "swift",
|
|
1794
|
+
"mode": "uikit"
|
|
1795
|
+
},
|
|
1796
|
+
"rightView": {
|
|
1797
|
+
"type": "object",
|
|
1798
|
+
"description": "Right view configuration",
|
|
1799
|
+
"platform": "swift",
|
|
1800
|
+
"mode": "uikit"
|
|
1801
|
+
},
|
|
1802
|
+
"leftViewMode": {
|
|
1803
|
+
"type": "string",
|
|
1804
|
+
"description": "Left view display mode",
|
|
1805
|
+
"platform": "swift",
|
|
1806
|
+
"mode": "uikit"
|
|
1807
|
+
},
|
|
1808
|
+
"rightViewMode": {
|
|
1809
|
+
"type": "string",
|
|
1810
|
+
"description": "Right view display mode",
|
|
1811
|
+
"platform": "swift",
|
|
1812
|
+
"mode": "uikit"
|
|
1813
|
+
},
|
|
1814
|
+
"nextFocus": {
|
|
1815
|
+
"type": "string",
|
|
1816
|
+
"description": "ID of the next field to focus on submit (for focus chain)"
|
|
1817
|
+
},
|
|
1818
|
+
"maxLength": {
|
|
1819
|
+
"type": "number",
|
|
1820
|
+
"description": "Maximum input length"
|
|
1821
|
+
},
|
|
1822
|
+
"pattern": {
|
|
1823
|
+
"type": "string",
|
|
1824
|
+
"description": "Input validation pattern",
|
|
1825
|
+
"platform": "react"
|
|
1826
|
+
},
|
|
1827
|
+
"required": {
|
|
1828
|
+
"type": "boolean",
|
|
1829
|
+
"description": "Required field validation",
|
|
1830
|
+
"platform": "react"
|
|
1831
|
+
},
|
|
1832
|
+
"fontFamily": {
|
|
1833
|
+
"type": [
|
|
1834
|
+
"string",
|
|
1835
|
+
"binding"
|
|
1836
|
+
],
|
|
1837
|
+
"description": "Font family name (e.g., 'Noto Sans JP'). Passed as the `family` field of `FontSpec` to `Configuration.Font.fontProvider`. Coexists with `font` (weight) and `fontSize` which are passed in the same FontSpec."
|
|
1838
|
+
},
|
|
1839
|
+
"disabledBackground": {
|
|
1840
|
+
"type": "string",
|
|
1841
|
+
"description": "Background color when disabled - hex string or color name from colors.json",
|
|
1842
|
+
"platform": "react"
|
|
1843
|
+
},
|
|
1844
|
+
"hideOnFocused": {
|
|
1845
|
+
"type": "boolean",
|
|
1846
|
+
"description": "Hide other elements while the field is focused.",
|
|
1847
|
+
"platform": "swift",
|
|
1848
|
+
"mode": "swiftui"
|
|
1849
|
+
},
|
|
1850
|
+
"placeholderColor": {
|
|
1851
|
+
"type": "string",
|
|
1852
|
+
"description": "Deprecated on swift.",
|
|
1853
|
+
"deprecated": "swift",
|
|
1854
|
+
"deprecation_note": "SwiftUI TextField placeholder cannot be color-styled."
|
|
1855
|
+
}
|
|
1856
|
+
},
|
|
1857
|
+
"TextView": {
|
|
1858
|
+
"text": {
|
|
1859
|
+
"type": [
|
|
1860
|
+
"string",
|
|
1861
|
+
"binding"
|
|
1862
|
+
],
|
|
1863
|
+
"description": "Text content (binding for two-way)",
|
|
1864
|
+
"binding_direction": "two-way"
|
|
1865
|
+
},
|
|
1866
|
+
"hint": {
|
|
1867
|
+
"type": "string",
|
|
1868
|
+
"description": "Placeholder text (primary)"
|
|
1869
|
+
},
|
|
1870
|
+
"placeholder": {
|
|
1871
|
+
"type": "string",
|
|
1872
|
+
"description": "Placeholder text (alias for hint)"
|
|
1873
|
+
},
|
|
1874
|
+
"hintColor": {
|
|
1875
|
+
"type": [
|
|
1876
|
+
"string",
|
|
1877
|
+
"binding"
|
|
1878
|
+
],
|
|
1879
|
+
"description": "Placeholder color - hex string or color name from colors.json (binding supported)"
|
|
1880
|
+
},
|
|
1881
|
+
"hintFont": {
|
|
1882
|
+
"type": "string",
|
|
1883
|
+
"description": "Placeholder font"
|
|
1884
|
+
},
|
|
1885
|
+
"hintFontSize": {
|
|
1886
|
+
"type": "number",
|
|
1887
|
+
"description": "Placeholder font size"
|
|
1888
|
+
},
|
|
1889
|
+
"hintLineHeightMultiple": {
|
|
1890
|
+
"type": "number",
|
|
1891
|
+
"description": "Placeholder line height multiplier"
|
|
1892
|
+
},
|
|
1893
|
+
"hintAttributes": {
|
|
1894
|
+
"type": "object",
|
|
1895
|
+
"description": "Hint styling attributes"
|
|
1896
|
+
},
|
|
1897
|
+
"hideOnFocused": {
|
|
1898
|
+
"type": "boolean",
|
|
1899
|
+
"default": true,
|
|
1900
|
+
"description": "Hide placeholder when focused"
|
|
1901
|
+
},
|
|
1902
|
+
"font": {
|
|
1903
|
+
"type": [
|
|
1904
|
+
"string",
|
|
1905
|
+
"binding"
|
|
1906
|
+
],
|
|
1907
|
+
"description": "Font name or 'bold' (binding supported)"
|
|
1908
|
+
},
|
|
1909
|
+
"fontSize": {
|
|
1910
|
+
"type": [
|
|
1911
|
+
"number",
|
|
1912
|
+
"binding"
|
|
1913
|
+
],
|
|
1914
|
+
"description": "Font size (binding supported)"
|
|
1915
|
+
},
|
|
1916
|
+
"fontColor": {
|
|
1917
|
+
"type": [
|
|
1918
|
+
"string",
|
|
1919
|
+
"binding"
|
|
1920
|
+
],
|
|
1921
|
+
"description": "Font color - hex string or color name from colors.json (binding supported)"
|
|
1922
|
+
},
|
|
1923
|
+
"textAlign": {
|
|
1924
|
+
"type": "string",
|
|
1925
|
+
"enum": [
|
|
1926
|
+
"Left",
|
|
1927
|
+
"Center",
|
|
1928
|
+
"Right",
|
|
1929
|
+
"left",
|
|
1930
|
+
"center",
|
|
1931
|
+
"right"
|
|
1932
|
+
],
|
|
1933
|
+
"description": "Text alignment"
|
|
1934
|
+
},
|
|
1935
|
+
"containerInset": {
|
|
1936
|
+
"type": [
|
|
1937
|
+
"number",
|
|
1938
|
+
"array"
|
|
1939
|
+
],
|
|
1940
|
+
"description": "Container inset"
|
|
1941
|
+
},
|
|
1942
|
+
"flexible": {
|
|
1943
|
+
"type": "boolean",
|
|
1944
|
+
"description": "Enable flexible height"
|
|
1945
|
+
},
|
|
1946
|
+
"input": {
|
|
1947
|
+
"type": "string",
|
|
1948
|
+
"enum": [
|
|
1949
|
+
"default",
|
|
1950
|
+
"alphabet",
|
|
1951
|
+
"allphabet",
|
|
1952
|
+
"email",
|
|
1953
|
+
"number",
|
|
1954
|
+
"phone",
|
|
1955
|
+
"url",
|
|
1956
|
+
"password",
|
|
1957
|
+
"decimal"
|
|
1958
|
+
],
|
|
1959
|
+
"description": "Input type (includes 'allphabet' typo for backward compatibility)"
|
|
1960
|
+
},
|
|
1961
|
+
"returnKeyType": {
|
|
1962
|
+
"type": "string",
|
|
1963
|
+
"enum": [
|
|
1964
|
+
"Done",
|
|
1965
|
+
"Go",
|
|
1966
|
+
"Next",
|
|
1967
|
+
"Return",
|
|
1968
|
+
"Search",
|
|
1969
|
+
"Send",
|
|
1970
|
+
"Continue",
|
|
1971
|
+
"Join",
|
|
1972
|
+
"Route",
|
|
1973
|
+
"Yahoo",
|
|
1974
|
+
"Google"
|
|
1975
|
+
],
|
|
1976
|
+
"description": "Return key type"
|
|
1977
|
+
},
|
|
1978
|
+
"editable": {
|
|
1979
|
+
"type": "boolean",
|
|
1980
|
+
"description": "Enable/disable editing"
|
|
1981
|
+
},
|
|
1982
|
+
"scrollEnabled": {
|
|
1983
|
+
"type": "boolean",
|
|
1984
|
+
"description": "Enable/disable scrolling"
|
|
1985
|
+
},
|
|
1986
|
+
"lineBreakMode": {
|
|
1987
|
+
"type": "string",
|
|
1988
|
+
"description": "Line break mode"
|
|
1989
|
+
},
|
|
1990
|
+
"dataDetectorTypes": {
|
|
1991
|
+
"type": "string",
|
|
1992
|
+
"description": "Data detector types",
|
|
1993
|
+
"platform": "swift",
|
|
1994
|
+
"mode": "uikit"
|
|
1995
|
+
},
|
|
1996
|
+
"allowsEditingTextAttributes": {
|
|
1997
|
+
"type": "boolean",
|
|
1998
|
+
"description": "Allow editing text attributes",
|
|
1999
|
+
"platform": "swift",
|
|
2000
|
+
"mode": "uikit"
|
|
2001
|
+
},
|
|
2002
|
+
"keyboardType": {
|
|
2003
|
+
"type": "string",
|
|
2004
|
+
"description": "Keyboard type"
|
|
2005
|
+
},
|
|
2006
|
+
"onTextChange": {
|
|
2007
|
+
"type": "string",
|
|
2008
|
+
"description": "Text change event selector"
|
|
2009
|
+
},
|
|
2010
|
+
"onBeginEditing": {
|
|
2011
|
+
"type": "string",
|
|
2012
|
+
"description": "Begin editing event handler",
|
|
2013
|
+
"platform": "swift",
|
|
2014
|
+
"mode": "uikit"
|
|
2015
|
+
},
|
|
2016
|
+
"onEndEditing": {
|
|
2017
|
+
"type": "string",
|
|
2018
|
+
"description": "End editing event handler",
|
|
2019
|
+
"platform": "swift",
|
|
2020
|
+
"mode": "uikit"
|
|
2021
|
+
},
|
|
2022
|
+
"onChangeSelection": {
|
|
2023
|
+
"type": "string",
|
|
2024
|
+
"description": "Selection change event handler",
|
|
2025
|
+
"platform": "swift",
|
|
2026
|
+
"mode": "uikit"
|
|
2027
|
+
},
|
|
2028
|
+
"onShouldChangeText": {
|
|
2029
|
+
"type": "string",
|
|
2030
|
+
"description": "Should change text event handler (return true to allow)",
|
|
2031
|
+
"platform": "swift",
|
|
2032
|
+
"mode": "uikit"
|
|
2033
|
+
},
|
|
2034
|
+
"onShouldBeginEditing": {
|
|
2035
|
+
"type": "string",
|
|
2036
|
+
"description": "Should begin editing event handler (return true to allow)",
|
|
2037
|
+
"platform": "swift",
|
|
2038
|
+
"mode": "uikit"
|
|
2039
|
+
},
|
|
2040
|
+
"onShouldEndEditing": {
|
|
2041
|
+
"type": "string",
|
|
2042
|
+
"description": "Should end editing event handler (return true to allow)",
|
|
2043
|
+
"platform": "swift",
|
|
2044
|
+
"mode": "uikit"
|
|
2045
|
+
},
|
|
2046
|
+
"maxLength": {
|
|
2047
|
+
"type": "number",
|
|
2048
|
+
"description": "Maximum input length",
|
|
2049
|
+
"platform": "react"
|
|
2050
|
+
},
|
|
2051
|
+
"pattern": {
|
|
2052
|
+
"type": "string",
|
|
2053
|
+
"description": "Input validation pattern",
|
|
2054
|
+
"platform": "react"
|
|
2055
|
+
},
|
|
2056
|
+
"required": {
|
|
2057
|
+
"type": "boolean",
|
|
2058
|
+
"description": "Required field validation",
|
|
2059
|
+
"platform": "react"
|
|
2060
|
+
},
|
|
2061
|
+
"selectable": {
|
|
2062
|
+
"type": "boolean",
|
|
2063
|
+
"description": "Whether text is selectable",
|
|
2064
|
+
"platform": "react"
|
|
2065
|
+
},
|
|
2066
|
+
"rows": {
|
|
2067
|
+
"type": "number",
|
|
2068
|
+
"description": "Number of visible rows",
|
|
2069
|
+
"platform": "react"
|
|
2070
|
+
},
|
|
2071
|
+
"cols": {
|
|
2072
|
+
"type": "number",
|
|
2073
|
+
"description": "Number of visible columns",
|
|
2074
|
+
"platform": "react"
|
|
2075
|
+
},
|
|
2076
|
+
"resize": {
|
|
2077
|
+
"type": "string",
|
|
2078
|
+
"enum": [
|
|
2079
|
+
"none",
|
|
2080
|
+
"both",
|
|
2081
|
+
"horizontal",
|
|
2082
|
+
"vertical"
|
|
2083
|
+
],
|
|
2084
|
+
"description": "Resize behavior",
|
|
2085
|
+
"platform": "react"
|
|
2086
|
+
},
|
|
2087
|
+
"fontFamily": {
|
|
2088
|
+
"type": [
|
|
2089
|
+
"string",
|
|
2090
|
+
"binding"
|
|
2091
|
+
],
|
|
2092
|
+
"description": "Font family name (e.g., 'Noto Sans JP'). Passed as the `family` field of `FontSpec` to `Configuration.Font.fontProvider`. Coexists with `font` (weight) and `fontSize` which are passed in the same FontSpec."
|
|
2093
|
+
},
|
|
2094
|
+
"disabledBackground": {
|
|
2095
|
+
"type": "string",
|
|
2096
|
+
"description": "Background color when disabled - hex string or color name from colors.json",
|
|
2097
|
+
"platform": "react"
|
|
2098
|
+
},
|
|
2099
|
+
"edgeInset": {
|
|
2100
|
+
"type": "string",
|
|
2101
|
+
"description": "Deprecated on kotlin.",
|
|
2102
|
+
"deprecated": "kotlin",
|
|
2103
|
+
"deprecation_note": "Compose Text has no edgeInset; use padding* instead."
|
|
2104
|
+
}
|
|
2105
|
+
},
|
|
2106
|
+
"EditText": {
|
|
2107
|
+
"_alias_of": "TextField",
|
|
2108
|
+
"_comment": "Component alias of TextField (Android naming). Resolved by the L1 normalizer type rewrite and by every validator/codegen consumer - do not add attribute copies here. inputType lives on TextField (platform: kotlin)."
|
|
2109
|
+
},
|
|
2110
|
+
"Input": {
|
|
2111
|
+
"_alias_of": "TextField",
|
|
2112
|
+
"_comment": "Component alias of TextField (web naming). Resolved by the L1 normalizer type rewrite and by every validator/codegen consumer - do not add attribute copies here."
|
|
2113
|
+
},
|
|
2114
|
+
"Button": {
|
|
2115
|
+
"text": {
|
|
2116
|
+
"type": [
|
|
2117
|
+
"string",
|
|
2118
|
+
"binding"
|
|
2119
|
+
],
|
|
2120
|
+
"description": "Button text (can be data binding, supports interpolation)"
|
|
2121
|
+
},
|
|
2122
|
+
"font": {
|
|
2123
|
+
"type": "string",
|
|
2124
|
+
"description": "Font name or 'bold'"
|
|
2125
|
+
},
|
|
2126
|
+
"fontSize": {
|
|
2127
|
+
"type": "number",
|
|
2128
|
+
"description": "Font size"
|
|
2129
|
+
},
|
|
2130
|
+
"fontColor": {
|
|
2131
|
+
"type": [
|
|
2132
|
+
"string",
|
|
2133
|
+
"binding"
|
|
2134
|
+
],
|
|
2135
|
+
"description": "Font color - hex string or color name from colors.json (binding supported)"
|
|
2136
|
+
},
|
|
2137
|
+
"disabledFontColor": {
|
|
2138
|
+
"type": [
|
|
2139
|
+
"string",
|
|
2140
|
+
"binding"
|
|
2141
|
+
],
|
|
2142
|
+
"description": "Font color when disabled - hex string or color name from colors.json (binding supported)"
|
|
2143
|
+
},
|
|
2144
|
+
"highlightColor": {
|
|
2145
|
+
"type": [
|
|
2146
|
+
"string",
|
|
2147
|
+
"binding"
|
|
2148
|
+
],
|
|
2149
|
+
"description": "Highlight color - hex string or color name from colors.json (binding supported)",
|
|
2150
|
+
"aliases": [
|
|
2151
|
+
"hilightColor"
|
|
2152
|
+
]
|
|
2153
|
+
},
|
|
2154
|
+
"hilightColor": {
|
|
2155
|
+
"type": "string",
|
|
2156
|
+
"description": "Highlight color - hex string or color name from colors.json (typo alias)"
|
|
2157
|
+
},
|
|
2158
|
+
"tapBackground": {
|
|
2159
|
+
"type": "string",
|
|
2160
|
+
"description": "Background when tapped - hex string or color name from colors.json"
|
|
2161
|
+
},
|
|
2162
|
+
"highlightBackground": {
|
|
2163
|
+
"type": "string",
|
|
2164
|
+
"description": "Background when highlighted - hex string or color name from colors.json"
|
|
2165
|
+
},
|
|
2166
|
+
"image": {
|
|
2167
|
+
"type": [
|
|
2168
|
+
"string",
|
|
2169
|
+
"binding"
|
|
2170
|
+
],
|
|
2171
|
+
"description": "Button image - asset name (binding supported)"
|
|
2172
|
+
},
|
|
2173
|
+
"textAlign": {
|
|
2174
|
+
"type": "string",
|
|
2175
|
+
"enum": [
|
|
2176
|
+
"Left",
|
|
2177
|
+
"Center",
|
|
2178
|
+
"Right"
|
|
2179
|
+
],
|
|
2180
|
+
"description": "Text alignment"
|
|
2181
|
+
},
|
|
2182
|
+
"config": {
|
|
2183
|
+
"type": "object",
|
|
2184
|
+
"description": "Button configuration (iOS 15+)",
|
|
2185
|
+
"platform": "swift",
|
|
2186
|
+
"mode": "uikit"
|
|
2187
|
+
},
|
|
2188
|
+
"buttonType": {
|
|
2189
|
+
"type": "string",
|
|
2190
|
+
"enum": [
|
|
2191
|
+
"button",
|
|
2192
|
+
"submit",
|
|
2193
|
+
"reset"
|
|
2194
|
+
],
|
|
2195
|
+
"description": "HTML button type",
|
|
2196
|
+
"platform": "react"
|
|
2197
|
+
},
|
|
2198
|
+
"fontWeight": {
|
|
2199
|
+
"type": [
|
|
2200
|
+
"string",
|
|
2201
|
+
"number",
|
|
2202
|
+
"binding"
|
|
2203
|
+
],
|
|
2204
|
+
"description": "Font weight (e.g., 'bold', 'semibold', '500', 600, or binding)"
|
|
2205
|
+
}
|
|
2206
|
+
},
|
|
2207
|
+
"Image": {
|
|
2208
|
+
"src": {
|
|
2209
|
+
"type": [
|
|
2210
|
+
"string",
|
|
2211
|
+
"binding"
|
|
2212
|
+
],
|
|
2213
|
+
"description": "Image source name (can be data binding)"
|
|
2214
|
+
},
|
|
2215
|
+
"srcName": {
|
|
2216
|
+
"type": [
|
|
2217
|
+
"string",
|
|
2218
|
+
"binding"
|
|
2219
|
+
],
|
|
2220
|
+
"description": "Image source name (alias, can be data binding)"
|
|
2221
|
+
},
|
|
2222
|
+
"highlightSrc": {
|
|
2223
|
+
"type": [
|
|
2224
|
+
"string",
|
|
2225
|
+
"binding"
|
|
2226
|
+
],
|
|
2227
|
+
"description": "Image when highlighted (binding supported)",
|
|
2228
|
+
"platform": "swift",
|
|
2229
|
+
"mode": "swiftui"
|
|
2230
|
+
},
|
|
2231
|
+
"highlightSrcName": {
|
|
2232
|
+
"type": [
|
|
2233
|
+
"string",
|
|
2234
|
+
"binding"
|
|
2235
|
+
],
|
|
2236
|
+
"description": "Highlight image source name (binding supported)",
|
|
2237
|
+
"platform": "swift",
|
|
2238
|
+
"mode": "uikit"
|
|
2239
|
+
},
|
|
2240
|
+
"contentMode": {
|
|
2241
|
+
"type": [
|
|
2242
|
+
"string",
|
|
2243
|
+
"binding"
|
|
2244
|
+
],
|
|
2245
|
+
"enum": [
|
|
2246
|
+
"fit",
|
|
2247
|
+
"fill",
|
|
2248
|
+
"center",
|
|
2249
|
+
"top",
|
|
2250
|
+
"bottom",
|
|
2251
|
+
"left",
|
|
2252
|
+
"right",
|
|
2253
|
+
"AspectFill",
|
|
2254
|
+
"AspectFit",
|
|
2255
|
+
"Center",
|
|
2256
|
+
"ScaleToFill",
|
|
2257
|
+
"Top",
|
|
2258
|
+
"Bottom",
|
|
2259
|
+
"Left",
|
|
2260
|
+
"Right"
|
|
2261
|
+
],
|
|
2262
|
+
"description": "Content mode (binding supported)"
|
|
2263
|
+
},
|
|
2264
|
+
"renderingMode": {
|
|
2265
|
+
"type": "string",
|
|
2266
|
+
"enum": [
|
|
2267
|
+
"original",
|
|
2268
|
+
"template"
|
|
2269
|
+
],
|
|
2270
|
+
"description": "Rendering mode",
|
|
2271
|
+
"platform": [
|
|
2272
|
+
"swift",
|
|
2273
|
+
"kotlin"
|
|
2274
|
+
]
|
|
2275
|
+
},
|
|
2276
|
+
"alt": {
|
|
2277
|
+
"type": "string",
|
|
2278
|
+
"description": "Alt text for accessibility",
|
|
2279
|
+
"platform": "react"
|
|
2280
|
+
},
|
|
2281
|
+
"loading": {
|
|
2282
|
+
"type": "string",
|
|
2283
|
+
"enum": [
|
|
2284
|
+
"lazy",
|
|
2285
|
+
"eager"
|
|
2286
|
+
],
|
|
2287
|
+
"description": "Loading behavior",
|
|
2288
|
+
"platform": "react"
|
|
2289
|
+
},
|
|
2290
|
+
"loadingImage": {
|
|
2291
|
+
"type": "string",
|
|
2292
|
+
"description": "Placeholder shown while the main image loads.",
|
|
2293
|
+
"platform": [
|
|
2294
|
+
"swift",
|
|
2295
|
+
"kotlin"
|
|
2296
|
+
]
|
|
2297
|
+
},
|
|
2298
|
+
"errorImage": {
|
|
2299
|
+
"type": "string",
|
|
2300
|
+
"description": "Fallback image on load error.",
|
|
2301
|
+
"platform": [
|
|
2302
|
+
"swift",
|
|
2303
|
+
"kotlin"
|
|
2304
|
+
]
|
|
2305
|
+
},
|
|
2306
|
+
"canTap": {
|
|
2307
|
+
"type": "boolean",
|
|
2308
|
+
"description": "Enable tap gesture independent of onClick.",
|
|
2309
|
+
"platform": "swift",
|
|
2310
|
+
"mode": "swiftui"
|
|
2311
|
+
},
|
|
2312
|
+
"systemIcon": {
|
|
2313
|
+
"type": "boolean",
|
|
2314
|
+
"description": "Interpret `src` as an SF Symbol name.",
|
|
2315
|
+
"platform": "swift",
|
|
2316
|
+
"mode": "swiftui"
|
|
2317
|
+
},
|
|
2318
|
+
"maxZoom": {
|
|
2319
|
+
"type": "number",
|
|
2320
|
+
"description": "Pinch-zoom upper bound.",
|
|
2321
|
+
"platform": "swift",
|
|
2322
|
+
"mode": "swiftui"
|
|
2323
|
+
},
|
|
2324
|
+
"minZoom": {
|
|
2325
|
+
"type": "number",
|
|
2326
|
+
"description": "Pinch-zoom lower bound.",
|
|
2327
|
+
"platform": "swift",
|
|
2328
|
+
"mode": "swiftui"
|
|
2329
|
+
}
|
|
2330
|
+
},
|
|
2331
|
+
"NetworkImage": {
|
|
2332
|
+
"src": {
|
|
2333
|
+
"type": [
|
|
2334
|
+
"string",
|
|
2335
|
+
"binding"
|
|
2336
|
+
],
|
|
2337
|
+
"description": "Image URL (can be data binding)"
|
|
2338
|
+
},
|
|
2339
|
+
"url": {
|
|
2340
|
+
"type": [
|
|
2341
|
+
"string",
|
|
2342
|
+
"binding"
|
|
2343
|
+
],
|
|
2344
|
+
"description": "Image URL (alias, can be data binding)"
|
|
2345
|
+
},
|
|
2346
|
+
"hint": {
|
|
2347
|
+
"type": "string",
|
|
2348
|
+
"description": "Placeholder image name (primary)"
|
|
2349
|
+
},
|
|
2350
|
+
"placeholder": {
|
|
2351
|
+
"type": "string",
|
|
2352
|
+
"description": "Placeholder image name (alias for hint)"
|
|
2353
|
+
},
|
|
2354
|
+
"defaultImage": {
|
|
2355
|
+
"type": "string",
|
|
2356
|
+
"description": "Default image name"
|
|
2357
|
+
},
|
|
2358
|
+
"errorImage": {
|
|
2359
|
+
"type": "string",
|
|
2360
|
+
"description": "Error image name",
|
|
2361
|
+
"platform": [
|
|
2362
|
+
"swift",
|
|
2363
|
+
"kotlin"
|
|
2364
|
+
]
|
|
2365
|
+
},
|
|
2366
|
+
"loadingImage": {
|
|
2367
|
+
"type": "string",
|
|
2368
|
+
"description": "Loading image name",
|
|
2369
|
+
"platform": [
|
|
2370
|
+
"swift",
|
|
2371
|
+
"kotlin"
|
|
2372
|
+
]
|
|
2373
|
+
},
|
|
2374
|
+
"contentMode": {
|
|
2375
|
+
"type": [
|
|
2376
|
+
"string",
|
|
2377
|
+
"binding"
|
|
2378
|
+
],
|
|
2379
|
+
"enum": [
|
|
2380
|
+
"fit",
|
|
2381
|
+
"fill",
|
|
2382
|
+
"center",
|
|
2383
|
+
"top",
|
|
2384
|
+
"bottom",
|
|
2385
|
+
"left",
|
|
2386
|
+
"right",
|
|
2387
|
+
"AspectFill",
|
|
2388
|
+
"AspectFit",
|
|
2389
|
+
"Center"
|
|
2390
|
+
],
|
|
2391
|
+
"description": "Content mode (binding supported)"
|
|
2392
|
+
},
|
|
2393
|
+
"cachePolicy": {
|
|
2394
|
+
"type": "string",
|
|
2395
|
+
"description": "Cache policy",
|
|
2396
|
+
"platform": "swift",
|
|
2397
|
+
"mode": "uikit"
|
|
2398
|
+
},
|
|
2399
|
+
"timeout": {
|
|
2400
|
+
"type": "number",
|
|
2401
|
+
"description": "Download timeout in seconds",
|
|
2402
|
+
"platform": "swift",
|
|
2403
|
+
"mode": "uikit"
|
|
2404
|
+
},
|
|
2405
|
+
"alt": {
|
|
2406
|
+
"type": "string",
|
|
2407
|
+
"description": "Alt text for accessibility",
|
|
2408
|
+
"platform": "react"
|
|
2409
|
+
},
|
|
2410
|
+
"loading": {
|
|
2411
|
+
"type": "string",
|
|
2412
|
+
"enum": [
|
|
2413
|
+
"lazy",
|
|
2414
|
+
"eager"
|
|
2415
|
+
],
|
|
2416
|
+
"description": "Loading behavior",
|
|
2417
|
+
"platform": "react"
|
|
2418
|
+
},
|
|
2419
|
+
"headers": {
|
|
2420
|
+
"type": "object",
|
|
2421
|
+
"description": "HTTP headers for the image request (Coil 3: httpHeaders(NetworkHeaders) on ImageRequest.Builder).",
|
|
2422
|
+
"platform": "kotlin",
|
|
2423
|
+
"mode": "compose"
|
|
2424
|
+
}
|
|
2425
|
+
},
|
|
2426
|
+
"SelectBox": {
|
|
2427
|
+
"prompt": {
|
|
2428
|
+
"type": "string",
|
|
2429
|
+
"description": "Prompt text (primary)"
|
|
2430
|
+
},
|
|
2431
|
+
"hint": {
|
|
2432
|
+
"type": "string",
|
|
2433
|
+
"description": "Hint text (alias for prompt)"
|
|
2434
|
+
},
|
|
2435
|
+
"placeholder": {
|
|
2436
|
+
"type": "string",
|
|
2437
|
+
"description": "Placeholder text (alias for prompt)"
|
|
2438
|
+
},
|
|
2439
|
+
"hintColor": {
|
|
2440
|
+
"type": [
|
|
2441
|
+
"string",
|
|
2442
|
+
"binding"
|
|
2443
|
+
],
|
|
2444
|
+
"description": "Hint text color - hex string or color name from colors.json (binding supported)"
|
|
2445
|
+
},
|
|
2446
|
+
"text": {
|
|
2447
|
+
"type": [
|
|
2448
|
+
"string",
|
|
2449
|
+
"binding"
|
|
2450
|
+
],
|
|
2451
|
+
"description": "Display text (binding supported)",
|
|
2452
|
+
"platform": "swift"
|
|
2453
|
+
},
|
|
2454
|
+
"items": {
|
|
2455
|
+
"type": [
|
|
2456
|
+
"array",
|
|
2457
|
+
"binding"
|
|
2458
|
+
],
|
|
2459
|
+
"description": "List of items for normal picker (can be template variable)"
|
|
2460
|
+
},
|
|
2461
|
+
"selectItemType": {
|
|
2462
|
+
"type": "string",
|
|
2463
|
+
"enum": [
|
|
2464
|
+
"Normal",
|
|
2465
|
+
"Date"
|
|
2466
|
+
],
|
|
2467
|
+
"description": "Select item type"
|
|
2468
|
+
},
|
|
2469
|
+
"selectedIndex": {
|
|
2470
|
+
"type": [
|
|
2471
|
+
"number",
|
|
2472
|
+
"binding"
|
|
2473
|
+
],
|
|
2474
|
+
"min": 0,
|
|
2475
|
+
"description": "Initial selected index for normal picker (two-way binding)",
|
|
2476
|
+
"binding_direction": "two-way"
|
|
2477
|
+
},
|
|
2478
|
+
"selectedItem": {
|
|
2479
|
+
"type": [
|
|
2480
|
+
"string",
|
|
2481
|
+
"binding"
|
|
2482
|
+
],
|
|
2483
|
+
"description": "Selected item value (two-way binding)",
|
|
2484
|
+
"platform": "swift",
|
|
2485
|
+
"mode": "uikit"
|
|
2486
|
+
},
|
|
2487
|
+
"selectedDate": {
|
|
2488
|
+
"type": [
|
|
2489
|
+
"string",
|
|
2490
|
+
"binding"
|
|
2491
|
+
],
|
|
2492
|
+
"description": "Initial selected date (yyyy-MM-dd format, two-way binding)"
|
|
2493
|
+
},
|
|
2494
|
+
"datePickerMode": {
|
|
2495
|
+
"type": "string",
|
|
2496
|
+
"enum": [
|
|
2497
|
+
"date",
|
|
2498
|
+
"time",
|
|
2499
|
+
"datetime",
|
|
2500
|
+
"dateAndTime",
|
|
2501
|
+
"countDown"
|
|
2502
|
+
],
|
|
2503
|
+
"description": "Date picker mode"
|
|
2504
|
+
},
|
|
2505
|
+
"datePickerStyle": {
|
|
2506
|
+
"type": "string",
|
|
2507
|
+
"enum": [
|
|
2508
|
+
"automatic",
|
|
2509
|
+
"wheel",
|
|
2510
|
+
"wheels",
|
|
2511
|
+
"compact",
|
|
2512
|
+
"graphical",
|
|
2513
|
+
"inline"
|
|
2514
|
+
],
|
|
2515
|
+
"description": "Date picker style"
|
|
2516
|
+
},
|
|
2517
|
+
"dateStringFormat": {
|
|
2518
|
+
"type": "string",
|
|
2519
|
+
"description": "Date string format"
|
|
2520
|
+
},
|
|
2521
|
+
"minimumDate": {
|
|
2522
|
+
"type": [
|
|
2523
|
+
"string",
|
|
2524
|
+
"binding"
|
|
2525
|
+
],
|
|
2526
|
+
"description": "Minimum date (yyyy-MM-dd format, binding supported)"
|
|
2527
|
+
},
|
|
2528
|
+
"maximumDate": {
|
|
2529
|
+
"type": [
|
|
2530
|
+
"string",
|
|
2531
|
+
"binding"
|
|
2532
|
+
],
|
|
2533
|
+
"description": "Maximum date (yyyy-MM-dd format, binding supported)"
|
|
2534
|
+
},
|
|
2535
|
+
"minuteInterval": {
|
|
2536
|
+
"type": "number",
|
|
2537
|
+
"enum": [
|
|
2538
|
+
1,
|
|
2539
|
+
2,
|
|
2540
|
+
3,
|
|
2541
|
+
4,
|
|
2542
|
+
5,
|
|
2543
|
+
6,
|
|
2544
|
+
10,
|
|
2545
|
+
12,
|
|
2546
|
+
15,
|
|
2547
|
+
20,
|
|
2548
|
+
30
|
|
2549
|
+
],
|
|
2550
|
+
"description": "Minute interval for time picker"
|
|
2551
|
+
},
|
|
2552
|
+
"font": {
|
|
2553
|
+
"type": "string",
|
|
2554
|
+
"description": "Font name"
|
|
2555
|
+
},
|
|
2556
|
+
"fontSize": {
|
|
2557
|
+
"type": "number",
|
|
2558
|
+
"description": "Font size"
|
|
2559
|
+
},
|
|
2560
|
+
"fontColor": {
|
|
2561
|
+
"type": "string",
|
|
2562
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
2563
|
+
},
|
|
2564
|
+
"labelAttributes": {
|
|
2565
|
+
"type": "object",
|
|
2566
|
+
"description": "Label styling attributes",
|
|
2567
|
+
"properties": {
|
|
2568
|
+
"font": {
|
|
2569
|
+
"type": "string",
|
|
2570
|
+
"description": "Font name"
|
|
2571
|
+
},
|
|
2572
|
+
"fontSize": {
|
|
2573
|
+
"type": "number",
|
|
2574
|
+
"description": "Font size"
|
|
2575
|
+
},
|
|
2576
|
+
"fontColor": {
|
|
2577
|
+
"type": "string",
|
|
2578
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
2579
|
+
},
|
|
2580
|
+
"textAlign": {
|
|
2581
|
+
"type": "string",
|
|
2582
|
+
"enum": [
|
|
2583
|
+
"Left",
|
|
2584
|
+
"Right",
|
|
2585
|
+
"Center"
|
|
2586
|
+
],
|
|
2587
|
+
"description": "Text alignment"
|
|
2588
|
+
},
|
|
2589
|
+
"text": {
|
|
2590
|
+
"type": "string",
|
|
2591
|
+
"description": "Label text"
|
|
2592
|
+
},
|
|
2593
|
+
"highlightAttributes": {
|
|
2594
|
+
"type": "object",
|
|
2595
|
+
"description": "Highlight attributes"
|
|
2596
|
+
},
|
|
2597
|
+
"highlightColor": {
|
|
2598
|
+
"type": "string",
|
|
2599
|
+
"description": "Highlight color - hex string or color name from colors.json"
|
|
2600
|
+
},
|
|
2601
|
+
"hintAttributes": {
|
|
2602
|
+
"type": "object",
|
|
2603
|
+
"description": "Hint attributes"
|
|
2604
|
+
},
|
|
2605
|
+
"hintColor": {
|
|
2606
|
+
"type": "string",
|
|
2607
|
+
"description": "Hint color - hex string or color name from colors.json"
|
|
2608
|
+
},
|
|
2609
|
+
"lineHeightMultiple": {
|
|
2610
|
+
"type": "number",
|
|
2611
|
+
"description": "Line height multiplier"
|
|
2612
|
+
},
|
|
2613
|
+
"edgeInset": {
|
|
2614
|
+
"type": [
|
|
2615
|
+
"string",
|
|
2616
|
+
"array"
|
|
2617
|
+
],
|
|
2618
|
+
"description": "Edge insets"
|
|
2619
|
+
},
|
|
2620
|
+
"lineBreakMode": {
|
|
2621
|
+
"type": "string",
|
|
2622
|
+
"enum": [
|
|
2623
|
+
"Char",
|
|
2624
|
+
"Clip",
|
|
2625
|
+
"Word",
|
|
2626
|
+
"Head",
|
|
2627
|
+
"Middle",
|
|
2628
|
+
"Tail"
|
|
2629
|
+
],
|
|
2630
|
+
"description": "Line break mode"
|
|
2631
|
+
},
|
|
2632
|
+
"lines": {
|
|
2633
|
+
"type": "number",
|
|
2634
|
+
"description": "Number of lines"
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2637
|
+
},
|
|
2638
|
+
"caretAttributes": {
|
|
2639
|
+
"type": "object",
|
|
2640
|
+
"description": "Caret/arrow styling attributes",
|
|
2641
|
+
"platform": "swift",
|
|
2642
|
+
"mode": "uikit",
|
|
2643
|
+
"properties": {
|
|
2644
|
+
"src": {
|
|
2645
|
+
"type": "string",
|
|
2646
|
+
"description": "Caret image name"
|
|
2647
|
+
},
|
|
2648
|
+
"width": {
|
|
2649
|
+
"type": "number",
|
|
2650
|
+
"description": "Caret width"
|
|
2651
|
+
},
|
|
2652
|
+
"height": {
|
|
2653
|
+
"type": "number",
|
|
2654
|
+
"description": "Caret height"
|
|
2655
|
+
},
|
|
2656
|
+
"tintColor": {
|
|
2657
|
+
"type": "string",
|
|
2658
|
+
"description": "Caret tint color - hex string or color name from colors.json"
|
|
2659
|
+
},
|
|
2660
|
+
"background": {
|
|
2661
|
+
"type": "string",
|
|
2662
|
+
"description": "Caret background color - hex string or color name from colors.json"
|
|
2663
|
+
}
|
|
2664
|
+
}
|
|
2665
|
+
},
|
|
2666
|
+
"dividerAttributes": {
|
|
2667
|
+
"type": "object",
|
|
2668
|
+
"description": "Divider styling attributes",
|
|
2669
|
+
"platform": "swift",
|
|
2670
|
+
"mode": "uikit",
|
|
2671
|
+
"properties": {
|
|
2672
|
+
"background": {
|
|
2673
|
+
"type": "string",
|
|
2674
|
+
"description": "Divider color - hex string or color name from colors.json"
|
|
2675
|
+
},
|
|
2676
|
+
"height": {
|
|
2677
|
+
"type": "number",
|
|
2678
|
+
"description": "Divider height"
|
|
2679
|
+
},
|
|
2680
|
+
"width": {
|
|
2681
|
+
"type": "number",
|
|
2682
|
+
"description": "Divider width"
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
},
|
|
2686
|
+
"canBack": {
|
|
2687
|
+
"type": "boolean",
|
|
2688
|
+
"description": "Show back button",
|
|
2689
|
+
"platform": "swift",
|
|
2690
|
+
"mode": "uikit"
|
|
2691
|
+
},
|
|
2692
|
+
"includePromptWhenDataBinding": {
|
|
2693
|
+
"type": "boolean",
|
|
2694
|
+
"description": "Include prompt in binding",
|
|
2695
|
+
"platform": "swift",
|
|
2696
|
+
"mode": "uikit"
|
|
2697
|
+
},
|
|
2698
|
+
"inView": {
|
|
2699
|
+
"type": "string",
|
|
2700
|
+
"description": "Display picker inside view",
|
|
2701
|
+
"platform": "swift",
|
|
2702
|
+
"mode": "uikit"
|
|
2703
|
+
},
|
|
2704
|
+
"referenceView": {
|
|
2705
|
+
"type": "string",
|
|
2706
|
+
"description": "Reference view for picker",
|
|
2707
|
+
"platform": "swift",
|
|
2708
|
+
"mode": "uikit"
|
|
2709
|
+
},
|
|
2710
|
+
"onValueChange": {
|
|
2711
|
+
"type": "binding",
|
|
2712
|
+
"description": "Value change handler - binding only (@{functionName})"
|
|
2713
|
+
},
|
|
2714
|
+
"onValueChanged": {
|
|
2715
|
+
"type": "binding",
|
|
2716
|
+
"description": "Value change handler (alias for onValueChange) - binding only (@{functionName})"
|
|
2717
|
+
},
|
|
2718
|
+
"colorScheme": {
|
|
2719
|
+
"type": "string",
|
|
2720
|
+
"enum": [
|
|
2721
|
+
"light",
|
|
2722
|
+
"dark"
|
|
2723
|
+
],
|
|
2724
|
+
"description": "Color scheme for native date picker icon visibility (set 'dark' for dark backgrounds)",
|
|
2725
|
+
"platform": "react"
|
|
2726
|
+
},
|
|
2727
|
+
"multiple": {
|
|
2728
|
+
"type": "boolean",
|
|
2729
|
+
"description": "Allow multiple selection",
|
|
2730
|
+
"platform": "react"
|
|
2731
|
+
},
|
|
2732
|
+
"size": {
|
|
2733
|
+
"type": "number",
|
|
2734
|
+
"description": "Number of visible options",
|
|
2735
|
+
"platform": "react"
|
|
2736
|
+
},
|
|
2737
|
+
"selectedValue": {
|
|
2738
|
+
"type": [
|
|
2739
|
+
"string",
|
|
2740
|
+
"binding"
|
|
2741
|
+
],
|
|
2742
|
+
"description": "Selected value (binding for two-way)"
|
|
2743
|
+
}
|
|
2744
|
+
},
|
|
2745
|
+
"Switch": {
|
|
2746
|
+
"_alias": "Toggle",
|
|
2747
|
+
"_comment": "Switch is the primary component name. Toggle is supported as an alias for backward compatibility.",
|
|
2748
|
+
"isOn": {
|
|
2749
|
+
"type": [
|
|
2750
|
+
"boolean",
|
|
2751
|
+
"binding"
|
|
2752
|
+
],
|
|
2753
|
+
"description": "Switch state (binding for two-way)",
|
|
2754
|
+
"binding_direction": "two-way"
|
|
2755
|
+
},
|
|
2756
|
+
"value": {
|
|
2757
|
+
"type": [
|
|
2758
|
+
"boolean",
|
|
2759
|
+
"binding"
|
|
2760
|
+
],
|
|
2761
|
+
"description": "Switch state alias (binding for two-way)",
|
|
2762
|
+
"binding_direction": "two-way"
|
|
2763
|
+
},
|
|
2764
|
+
"checked": {
|
|
2765
|
+
"type": [
|
|
2766
|
+
"boolean",
|
|
2767
|
+
"binding"
|
|
2768
|
+
],
|
|
2769
|
+
"description": "Switch state alias (binding for two-way)",
|
|
2770
|
+
"binding_direction": "two-way"
|
|
2771
|
+
},
|
|
2772
|
+
"enabled": {
|
|
2773
|
+
"type": [
|
|
2774
|
+
"boolean",
|
|
2775
|
+
"binding"
|
|
2776
|
+
],
|
|
2777
|
+
"description": "Whether enabled (can be data binding)"
|
|
2778
|
+
},
|
|
2779
|
+
"tint": {
|
|
2780
|
+
"type": [
|
|
2781
|
+
"string",
|
|
2782
|
+
"binding"
|
|
2783
|
+
],
|
|
2784
|
+
"description": "Tint color - hex string or color name from colors.json (binding supported)"
|
|
2785
|
+
},
|
|
2786
|
+
"tintColor": {
|
|
2787
|
+
"type": "string",
|
|
2788
|
+
"description": "Tint color - hex string or color name from colors.json (alias)"
|
|
2789
|
+
},
|
|
2790
|
+
"onTintColor": {
|
|
2791
|
+
"type": "string",
|
|
2792
|
+
"description": "Track color when on - hex string or color name from colors.json"
|
|
2793
|
+
},
|
|
2794
|
+
"thumbTintColor": {
|
|
2795
|
+
"type": [
|
|
2796
|
+
"string",
|
|
2797
|
+
"binding"
|
|
2798
|
+
],
|
|
2799
|
+
"description": "Thumb tint color - hex string or color name from colors.json (binding supported)"
|
|
2800
|
+
},
|
|
2801
|
+
"offTintColor": {
|
|
2802
|
+
"type": [
|
|
2803
|
+
"string",
|
|
2804
|
+
"binding"
|
|
2805
|
+
],
|
|
2806
|
+
"description": "Off tint color - hex string or color name from colors.json (binding supported)",
|
|
2807
|
+
"platform": "swift",
|
|
2808
|
+
"mode": "uikit"
|
|
2809
|
+
},
|
|
2810
|
+
"onToggle": {
|
|
2811
|
+
"type": "binding",
|
|
2812
|
+
"description": "Toggle handler function - binding only (@{functionName}). Alias of onValueChange."
|
|
2813
|
+
},
|
|
2814
|
+
"onValueChange": {
|
|
2815
|
+
"type": "binding",
|
|
2816
|
+
"description": "Value change handler - binding only (@{functionName})",
|
|
2817
|
+
"aliases": [
|
|
2818
|
+
"onToggle"
|
|
2819
|
+
]
|
|
2820
|
+
},
|
|
2821
|
+
"labelAttributes": {
|
|
2822
|
+
"type": "object",
|
|
2823
|
+
"description": "Label styling for Toggle",
|
|
2824
|
+
"properties": {
|
|
2825
|
+
"text": {
|
|
2826
|
+
"type": "string",
|
|
2827
|
+
"description": "Label text"
|
|
2828
|
+
},
|
|
2829
|
+
"font": {
|
|
2830
|
+
"type": "string",
|
|
2831
|
+
"description": "Font name"
|
|
2832
|
+
},
|
|
2833
|
+
"fontSize": {
|
|
2834
|
+
"type": "number",
|
|
2835
|
+
"description": "Font size"
|
|
2836
|
+
},
|
|
2837
|
+
"fontColor": {
|
|
2838
|
+
"type": "string",
|
|
2839
|
+
"description": "Font color - hex string or color name from colors.json"
|
|
2840
|
+
}
|
|
2841
|
+
},
|
|
2842
|
+
"platform": "kotlin",
|
|
2843
|
+
"mode": "compose"
|
|
2844
|
+
},
|
|
2845
|
+
"labelPosition": {
|
|
2846
|
+
"type": "string",
|
|
2847
|
+
"enum": [
|
|
2848
|
+
"leading",
|
|
2849
|
+
"trailing"
|
|
2850
|
+
],
|
|
2851
|
+
"description": "Label position relative to the Switch.",
|
|
2852
|
+
"platform": "kotlin",
|
|
2853
|
+
"mode": "compose"
|
|
2854
|
+
},
|
|
2855
|
+
"trackTintColor": {
|
|
2856
|
+
"type": "string",
|
|
2857
|
+
"description": "Deprecated on swift.",
|
|
2858
|
+
"deprecated": "swift",
|
|
2859
|
+
"deprecation_note": "SwiftUI Toggle uses unified tint only."
|
|
2860
|
+
}
|
|
2861
|
+
},
|
|
2862
|
+
"Toggle": {
|
|
2863
|
+
"_alias_of": "Switch",
|
|
2864
|
+
"_comment": "Component alias of Switch. Resolved by the L1 normalizer type rewrite and by every validator/codegen consumer - do not add attribute copies here."
|
|
2865
|
+
},
|
|
2866
|
+
"Segment": {
|
|
2867
|
+
"items": {
|
|
2868
|
+
"type": "array",
|
|
2869
|
+
"required": true,
|
|
2870
|
+
"description": "Segment items array"
|
|
2871
|
+
},
|
|
2872
|
+
"selectedIndex": {
|
|
2873
|
+
"type": [
|
|
2874
|
+
"number",
|
|
2875
|
+
"binding"
|
|
2876
|
+
],
|
|
2877
|
+
"description": "Initially selected index (binding for two-way)",
|
|
2878
|
+
"binding_direction": "two-way"
|
|
2879
|
+
},
|
|
2880
|
+
"tintColor": {
|
|
2881
|
+
"type": "string",
|
|
2882
|
+
"description": "Tint color - hex string or color name from colors.json"
|
|
2883
|
+
},
|
|
2884
|
+
"normalColor": {
|
|
2885
|
+
"type": [
|
|
2886
|
+
"string",
|
|
2887
|
+
"binding"
|
|
2888
|
+
],
|
|
2889
|
+
"description": "Normal state color - hex string or color name from colors.json (binding supported)",
|
|
2890
|
+
"platform": "swift",
|
|
2891
|
+
"mode": "swiftui"
|
|
2892
|
+
},
|
|
2893
|
+
"selectedColor": {
|
|
2894
|
+
"type": [
|
|
2895
|
+
"string",
|
|
2896
|
+
"binding"
|
|
2897
|
+
],
|
|
2898
|
+
"description": "Selected state color - hex string or color name from colors.json (binding supported)",
|
|
2899
|
+
"platform": "swift",
|
|
2900
|
+
"mode": "swiftui"
|
|
2901
|
+
},
|
|
2902
|
+
"valueChange": {
|
|
2903
|
+
"type": "string",
|
|
2904
|
+
"description": "Value change event"
|
|
2905
|
+
},
|
|
2906
|
+
"momentary": {
|
|
2907
|
+
"type": "boolean",
|
|
2908
|
+
"description": "Momentary selection mode",
|
|
2909
|
+
"platform": "swift",
|
|
2910
|
+
"mode": "uikit"
|
|
2911
|
+
},
|
|
2912
|
+
"apportionsSegmentWidthsByContent": {
|
|
2913
|
+
"type": "boolean",
|
|
2914
|
+
"description": "Size segments by content",
|
|
2915
|
+
"platform": "swift",
|
|
2916
|
+
"mode": "uikit"
|
|
2917
|
+
},
|
|
2918
|
+
"onValueChange": {
|
|
2919
|
+
"type": "binding",
|
|
2920
|
+
"description": "Value change handler - binding only (@{functionName})"
|
|
2921
|
+
}
|
|
2922
|
+
},
|
|
2923
|
+
"Slider": {
|
|
2924
|
+
"value": {
|
|
2925
|
+
"type": [
|
|
2926
|
+
"number",
|
|
2927
|
+
"binding"
|
|
2928
|
+
],
|
|
2929
|
+
"description": "Current value (binding for two-way)",
|
|
2930
|
+
"binding_direction": "two-way"
|
|
2931
|
+
},
|
|
2932
|
+
"minValue": {
|
|
2933
|
+
"type": [
|
|
2934
|
+
"number",
|
|
2935
|
+
"binding"
|
|
2936
|
+
],
|
|
2937
|
+
"description": "Minimum value (binding supported)"
|
|
2938
|
+
},
|
|
2939
|
+
"minimum": {
|
|
2940
|
+
"type": [
|
|
2941
|
+
"number",
|
|
2942
|
+
"binding"
|
|
2943
|
+
],
|
|
2944
|
+
"description": "Minimum value (alias for minValue) (binding supported)",
|
|
2945
|
+
"aliases": [
|
|
2946
|
+
"minimumValue",
|
|
2947
|
+
"minValue"
|
|
2948
|
+
]
|
|
2949
|
+
},
|
|
2950
|
+
"maxValue": {
|
|
2951
|
+
"type": [
|
|
2952
|
+
"number",
|
|
2953
|
+
"binding"
|
|
2954
|
+
],
|
|
2955
|
+
"description": "Maximum value (binding supported)"
|
|
2956
|
+
},
|
|
2957
|
+
"maximum": {
|
|
2958
|
+
"type": [
|
|
2959
|
+
"number",
|
|
2960
|
+
"binding"
|
|
2961
|
+
],
|
|
2962
|
+
"description": "Maximum value (alias for maxValue) (binding supported)",
|
|
2963
|
+
"aliases": [
|
|
2964
|
+
"maximumValue",
|
|
2965
|
+
"maxValue"
|
|
2966
|
+
]
|
|
2967
|
+
},
|
|
2968
|
+
"tintColor": {
|
|
2969
|
+
"type": "string",
|
|
2970
|
+
"description": "Tint color - hex string or color name from colors.json"
|
|
2971
|
+
},
|
|
2972
|
+
"onValueChange": {
|
|
2973
|
+
"type": "binding",
|
|
2974
|
+
"description": "Value change handler - binding only (@{functionName})",
|
|
2975
|
+
"aliases": [
|
|
2976
|
+
"onValueChanged"
|
|
2977
|
+
]
|
|
2978
|
+
},
|
|
2979
|
+
"minimumValueImage": {
|
|
2980
|
+
"type": "string",
|
|
2981
|
+
"description": "Image at minimum end",
|
|
2982
|
+
"platform": "swift",
|
|
2983
|
+
"mode": "uikit"
|
|
2984
|
+
},
|
|
2985
|
+
"maximumValueImage": {
|
|
2986
|
+
"type": "string",
|
|
2987
|
+
"description": "Image at maximum end",
|
|
2988
|
+
"platform": "swift",
|
|
2989
|
+
"mode": "uikit"
|
|
2990
|
+
},
|
|
2991
|
+
"step": {
|
|
2992
|
+
"type": "number",
|
|
2993
|
+
"description": "Step increment value",
|
|
2994
|
+
"platform": "react"
|
|
2995
|
+
},
|
|
2996
|
+
"progressTintColor": {
|
|
2997
|
+
"type": "string",
|
|
2998
|
+
"description": "Deprecated on swift.",
|
|
2999
|
+
"deprecated": "swift",
|
|
3000
|
+
"deprecation_note": "SwiftUI Slider uses unified tint only."
|
|
3001
|
+
},
|
|
3002
|
+
"trackTintColor": {
|
|
3003
|
+
"type": "string",
|
|
3004
|
+
"description": "Deprecated on swift.",
|
|
3005
|
+
"deprecated": "swift",
|
|
3006
|
+
"deprecation_note": "SwiftUI Slider uses unified tint only."
|
|
3007
|
+
}
|
|
3008
|
+
},
|
|
3009
|
+
"Progress": {
|
|
3010
|
+
"progress": {
|
|
3011
|
+
"type": [
|
|
3012
|
+
"number",
|
|
3013
|
+
"binding"
|
|
3014
|
+
],
|
|
3015
|
+
"min": 0,
|
|
3016
|
+
"max": 1,
|
|
3017
|
+
"description": "Progress value (0-1, can be binding)"
|
|
3018
|
+
},
|
|
3019
|
+
"tintColor": {
|
|
3020
|
+
"type": "string",
|
|
3021
|
+
"description": "Tint color - hex string or color name from colors.json"
|
|
3022
|
+
},
|
|
3023
|
+
"progressTintColor": {
|
|
3024
|
+
"type": [
|
|
3025
|
+
"string",
|
|
3026
|
+
"binding"
|
|
3027
|
+
],
|
|
3028
|
+
"description": "Progress portion color - hex string or color name from colors.json (binding supported)"
|
|
3029
|
+
},
|
|
3030
|
+
"trackTintColor": {
|
|
3031
|
+
"type": [
|
|
3032
|
+
"string",
|
|
3033
|
+
"binding"
|
|
3034
|
+
],
|
|
3035
|
+
"description": "Track portion color - hex string or color name from colors.json (binding supported)"
|
|
3036
|
+
},
|
|
3037
|
+
"progressViewStyle": {
|
|
3038
|
+
"type": "string",
|
|
3039
|
+
"description": "Progress view style: default, bar",
|
|
3040
|
+
"platform": "swift",
|
|
3041
|
+
"mode": "uikit"
|
|
3042
|
+
},
|
|
3043
|
+
"progressImage": {
|
|
3044
|
+
"type": "string",
|
|
3045
|
+
"description": "Custom progress image",
|
|
3046
|
+
"platform": "swift",
|
|
3047
|
+
"mode": "uikit"
|
|
3048
|
+
},
|
|
3049
|
+
"trackImage": {
|
|
3050
|
+
"type": "string",
|
|
3051
|
+
"description": "Custom track image",
|
|
3052
|
+
"platform": "swift",
|
|
3053
|
+
"mode": "uikit"
|
|
3054
|
+
},
|
|
3055
|
+
"hidesWhenStopped": {
|
|
3056
|
+
"type": "boolean",
|
|
3057
|
+
"description": "ActivityIndicator: auto-hide when stopped.",
|
|
3058
|
+
"platform": "swift",
|
|
3059
|
+
"mode": "swiftui"
|
|
3060
|
+
},
|
|
3061
|
+
"indicatorStyle": {
|
|
3062
|
+
"type": "string",
|
|
3063
|
+
"enum": [
|
|
3064
|
+
"medium",
|
|
3065
|
+
"large"
|
|
3066
|
+
],
|
|
3067
|
+
"description": "ActivityIndicator size style.",
|
|
3068
|
+
"platform": "swift",
|
|
3069
|
+
"mode": "swiftui"
|
|
3070
|
+
},
|
|
3071
|
+
"color": {
|
|
3072
|
+
"type": "color",
|
|
3073
|
+
"description": "ActivityIndicator color, distinct from tintColor for historical reasons.",
|
|
3074
|
+
"platform": "swift",
|
|
3075
|
+
"mode": "swiftui"
|
|
3076
|
+
}
|
|
3077
|
+
},
|
|
3078
|
+
"View": {
|
|
3079
|
+
"_comment": {
|
|
3080
|
+
"type": "string",
|
|
3081
|
+
"description": "Developer comment (ignored at runtime)"
|
|
3082
|
+
},
|
|
3083
|
+
"orientation": {
|
|
3084
|
+
"type": "string",
|
|
3085
|
+
"enum": [
|
|
3086
|
+
"horizontal",
|
|
3087
|
+
"vertical"
|
|
3088
|
+
],
|
|
3089
|
+
"description": "Stack orientation (default: zstack)"
|
|
3090
|
+
},
|
|
3091
|
+
"direction": {
|
|
3092
|
+
"type": "string",
|
|
3093
|
+
"enum": [
|
|
3094
|
+
"topToBottom",
|
|
3095
|
+
"bottomToTop",
|
|
3096
|
+
"leftToRight",
|
|
3097
|
+
"rightToLeft",
|
|
3098
|
+
"none"
|
|
3099
|
+
],
|
|
3100
|
+
"description": "Layout direction"
|
|
3101
|
+
},
|
|
3102
|
+
"child": {
|
|
3103
|
+
"type": "array",
|
|
3104
|
+
"description": "Child component(s)"
|
|
3105
|
+
},
|
|
3106
|
+
"children": {
|
|
3107
|
+
"type": "array",
|
|
3108
|
+
"description": "Child components (alias for child)"
|
|
3109
|
+
},
|
|
3110
|
+
"distribution": {
|
|
3111
|
+
"type": "string",
|
|
3112
|
+
"enum": [
|
|
3113
|
+
"fill",
|
|
3114
|
+
"fillEqually",
|
|
3115
|
+
"equalSpacing",
|
|
3116
|
+
"equalCentering"
|
|
3117
|
+
],
|
|
3118
|
+
"description": "Child distribution mode for stacks",
|
|
3119
|
+
"mode": [
|
|
3120
|
+
"swiftui",
|
|
3121
|
+
"compose",
|
|
3122
|
+
"react"
|
|
3123
|
+
]
|
|
3124
|
+
},
|
|
3125
|
+
"spacing": {
|
|
3126
|
+
"type": [
|
|
3127
|
+
"number",
|
|
3128
|
+
"binding"
|
|
3129
|
+
],
|
|
3130
|
+
"description": "Space between children (binding supported)",
|
|
3131
|
+
"mode": [
|
|
3132
|
+
"swiftui",
|
|
3133
|
+
"compose",
|
|
3134
|
+
"react"
|
|
3135
|
+
]
|
|
3136
|
+
},
|
|
3137
|
+
"gradient": {
|
|
3138
|
+
"type": "array",
|
|
3139
|
+
"description": "Gradient colors",
|
|
3140
|
+
"platform": "swift",
|
|
3141
|
+
"mode": "uikit"
|
|
3142
|
+
},
|
|
3143
|
+
"gradientDirection": {
|
|
3144
|
+
"type": "string",
|
|
3145
|
+
"description": "Gradient direction",
|
|
3146
|
+
"platform": "swift",
|
|
3147
|
+
"mode": "uikit"
|
|
3148
|
+
},
|
|
3149
|
+
"locations": {
|
|
3150
|
+
"type": "array",
|
|
3151
|
+
"description": "Gradient color stop locations",
|
|
3152
|
+
"platform": "swift",
|
|
3153
|
+
"mode": "uikit"
|
|
3154
|
+
},
|
|
3155
|
+
"safeAreaInsetPositions": {
|
|
3156
|
+
"type": "array",
|
|
3157
|
+
"description": "Safe area inset positions (SafeAreaView only)",
|
|
3158
|
+
"items": {
|
|
3159
|
+
"type": "string",
|
|
3160
|
+
"enum": [
|
|
3161
|
+
"top",
|
|
3162
|
+
"bottom",
|
|
3163
|
+
"leading",
|
|
3164
|
+
"trailing",
|
|
3165
|
+
"vertical",
|
|
3166
|
+
"all"
|
|
3167
|
+
]
|
|
3168
|
+
}
|
|
3169
|
+
},
|
|
3170
|
+
"highlighted": {
|
|
3171
|
+
"type": "boolean",
|
|
3172
|
+
"description": "View highlighted state"
|
|
3173
|
+
},
|
|
3174
|
+
"flexWrap": {
|
|
3175
|
+
"type": "string",
|
|
3176
|
+
"enum": [
|
|
3177
|
+
"nowrap",
|
|
3178
|
+
"wrap",
|
|
3179
|
+
"wrap-reverse"
|
|
3180
|
+
],
|
|
3181
|
+
"description": "Flex wrap behavior",
|
|
3182
|
+
"platform": "react"
|
|
3183
|
+
},
|
|
3184
|
+
"draggable": {
|
|
3185
|
+
"type": "boolean",
|
|
3186
|
+
"description": "Make this view draggable",
|
|
3187
|
+
"platform": "react"
|
|
3188
|
+
},
|
|
3189
|
+
"onDragStart": {
|
|
3190
|
+
"type": "binding",
|
|
3191
|
+
"description": "Handler called when drag starts - @{handlerName}",
|
|
3192
|
+
"platform": "react"
|
|
3193
|
+
},
|
|
3194
|
+
"onDrop": {
|
|
3195
|
+
"type": "binding",
|
|
3196
|
+
"description": "Handler called when an item is dropped onto this view - @{handlerName}",
|
|
3197
|
+
"platform": "react"
|
|
3198
|
+
},
|
|
3199
|
+
"onDragOver": {
|
|
3200
|
+
"type": "binding",
|
|
3201
|
+
"description": "Handler called while a dragged item hovers over this view - @{handlerName}",
|
|
3202
|
+
"platform": "react"
|
|
3203
|
+
},
|
|
3204
|
+
"onDragEnter": {
|
|
3205
|
+
"type": "binding",
|
|
3206
|
+
"description": "Handler called when a dragged item enters this view - @{handlerName}",
|
|
3207
|
+
"platform": "react"
|
|
3208
|
+
},
|
|
3209
|
+
"onDragLeave": {
|
|
3210
|
+
"type": "binding",
|
|
3211
|
+
"description": "Handler called when a dragged item leaves this view - @{handlerName}",
|
|
3212
|
+
"platform": "react"
|
|
3213
|
+
}
|
|
3214
|
+
},
|
|
3215
|
+
"CircleView": {
|
|
3216
|
+
"_comment": "Sparse by design, not an alias: only the Kotlin dynamic runtime dispatches CircleView (DynamicCircleViewComponent, CircleShape clip) - P18 audit 2026-08-01. Everything it renders beyond child/children comes from common. component_metadata.json carries the per-platform truth.",
|
|
3217
|
+
"child": {
|
|
3218
|
+
"type": "array",
|
|
3219
|
+
"description": "Child component(s)",
|
|
3220
|
+
"platform": "swift",
|
|
3221
|
+
"mode": "uikit"
|
|
3222
|
+
},
|
|
3223
|
+
"children": {
|
|
3224
|
+
"type": "array",
|
|
3225
|
+
"description": "Child components (alias for child)",
|
|
3226
|
+
"platform": "swift",
|
|
3227
|
+
"mode": "uikit"
|
|
3228
|
+
}
|
|
3229
|
+
},
|
|
3230
|
+
"ScrollView": {
|
|
3231
|
+
"child": {
|
|
3232
|
+
"type": "array",
|
|
3233
|
+
"description": "Child component(s)"
|
|
3234
|
+
},
|
|
3235
|
+
"children": {
|
|
3236
|
+
"type": "array",
|
|
3237
|
+
"description": "Child components"
|
|
3238
|
+
},
|
|
3239
|
+
"orientation": {
|
|
3240
|
+
"type": "string",
|
|
3241
|
+
"enum": [
|
|
3242
|
+
"horizontal",
|
|
3243
|
+
"vertical"
|
|
3244
|
+
],
|
|
3245
|
+
"description": "Scroll orientation"
|
|
3246
|
+
},
|
|
3247
|
+
"scrollMode": {
|
|
3248
|
+
"type": "string",
|
|
3249
|
+
"platform": "react",
|
|
3250
|
+
"enum": [
|
|
3251
|
+
"inner",
|
|
3252
|
+
"window"
|
|
3253
|
+
],
|
|
3254
|
+
"description": "Where the scroll happens. 'inner' (default, iOS/Android-style): the ScrollView div itself gets overflow-y-auto and scrolls internally — requires a bounded-height ancestor on web to actually activate. 'window' (web-only escape hatch): skip the overflow class so the page/window scrolls naturally; fixes position:sticky descendants that would otherwise be anchored to a never-scrolling inner container. iOS/Android ignore this attribute (UIScrollView always scrolls internally)."
|
|
3255
|
+
},
|
|
3256
|
+
"showsHorizontalScrollIndicator": {
|
|
3257
|
+
"type": "boolean",
|
|
3258
|
+
"description": "Show horizontal indicator",
|
|
3259
|
+
"platform": [
|
|
3260
|
+
"swift",
|
|
3261
|
+
"react"
|
|
3262
|
+
],
|
|
3263
|
+
"platform_reasons": {
|
|
3264
|
+
"kotlin": "Compose has no scrollbar primitive for scrollable/Lazy content (ScrollbarStyle is Desktop-only), so there is nothing to switch on or off — needs a drawn scrollbar composable in KotlinJsonUI first. iOS uses .scrollIndicators and web uses CSS, both native. Re-declare when the composable exists."
|
|
3265
|
+
}
|
|
3266
|
+
},
|
|
3267
|
+
"showsVerticalScrollIndicator": {
|
|
3268
|
+
"type": "boolean",
|
|
3269
|
+
"description": "Show vertical indicator",
|
|
3270
|
+
"platform": [
|
|
3271
|
+
"swift",
|
|
3272
|
+
"react"
|
|
3273
|
+
],
|
|
3274
|
+
"platform_reasons": {
|
|
3275
|
+
"kotlin": "Compose has no scrollbar primitive for scrollable/Lazy content (ScrollbarStyle is Desktop-only), so there is nothing to switch on or off — needs a drawn scrollbar composable in KotlinJsonUI first. iOS uses .scrollIndicators and web uses CSS, both native. Re-declare when the composable exists."
|
|
3276
|
+
}
|
|
3277
|
+
},
|
|
3278
|
+
"paging": {
|
|
3279
|
+
"type": "boolean",
|
|
3280
|
+
"description": "Enable paging"
|
|
3281
|
+
},
|
|
3282
|
+
"bounces": {
|
|
3283
|
+
"type": "boolean",
|
|
3284
|
+
"description": "Enable bounce effect",
|
|
3285
|
+
"platform": [
|
|
3286
|
+
"swift",
|
|
3287
|
+
"react"
|
|
3288
|
+
],
|
|
3289
|
+
"platform_reasons": {
|
|
3290
|
+
"kotlin": "Compose's equivalent is overscroll, and disabling it means CompositionLocalProvider(LocalOverscrollConfiguration provides null) — an experimental Foundation API the generated code does not carry an @OptIn for. Re-declare when the API stabilizes."
|
|
3291
|
+
}
|
|
3292
|
+
},
|
|
3293
|
+
"scrollEnabled": {
|
|
3294
|
+
"type": [
|
|
3295
|
+
"boolean",
|
|
3296
|
+
"binding"
|
|
3297
|
+
],
|
|
3298
|
+
"description": "Enable scrolling (binding supported)"
|
|
3299
|
+
},
|
|
3300
|
+
"contentInsetAdjustmentBehavior": {
|
|
3301
|
+
"type": "string",
|
|
3302
|
+
"enum": [
|
|
3303
|
+
"never",
|
|
3304
|
+
"always",
|
|
3305
|
+
"automatic",
|
|
3306
|
+
"scrollableAxes"
|
|
3307
|
+
],
|
|
3308
|
+
"description": "Content inset adjustment"
|
|
3309
|
+
},
|
|
3310
|
+
"maxZoom": {
|
|
3311
|
+
"type": [
|
|
3312
|
+
"number",
|
|
3313
|
+
"binding"
|
|
3314
|
+
],
|
|
3315
|
+
"description": "Maximum zoom scale (binding supported)",
|
|
3316
|
+
"platform": [
|
|
3317
|
+
"swift",
|
|
3318
|
+
"react"
|
|
3319
|
+
],
|
|
3320
|
+
"platform_reasons": {
|
|
3321
|
+
"kotlin": "Pinch-zoom on a SCROLLING container needs real gesture arbitration in Compose — detectTransformGestures/transformable consume the drag and would take scrolling away — and a maximum without minZoom would be half a feature. iOS gets zoom from UIScrollView; web delegates to the browser via touch-action."
|
|
3322
|
+
}
|
|
3323
|
+
},
|
|
3324
|
+
"minZoom": {
|
|
3325
|
+
"type": [
|
|
3326
|
+
"number",
|
|
3327
|
+
"binding"
|
|
3328
|
+
],
|
|
3329
|
+
"description": "Minimum zoom scale (binding supported)",
|
|
3330
|
+
"platform": [
|
|
3331
|
+
"swift"
|
|
3332
|
+
],
|
|
3333
|
+
"platform_reasons": {
|
|
3334
|
+
"kotlin": "Same gesture-arbitration problem as maxZoom: Compose has no zoom primitive for a scrolling container.",
|
|
3335
|
+
"react": "The browser arbitrates pinch zoom itself (touch-action); there is no control surface for a minimum scale."
|
|
3336
|
+
}
|
|
3337
|
+
},
|
|
3338
|
+
"contentSize": {
|
|
3339
|
+
"type": "array",
|
|
3340
|
+
"description": "Content size [width, height]",
|
|
3341
|
+
"platform": "swift",
|
|
3342
|
+
"mode": "uikit"
|
|
3343
|
+
},
|
|
3344
|
+
"contentOffset": {
|
|
3345
|
+
"type": "array",
|
|
3346
|
+
"description": "Initial offset [x, y]",
|
|
3347
|
+
"platform": "swift",
|
|
3348
|
+
"mode": "uikit"
|
|
3349
|
+
},
|
|
3350
|
+
"decelerationRate": {
|
|
3351
|
+
"type": "string",
|
|
3352
|
+
"description": "Deceleration rate",
|
|
3353
|
+
"platform": "swift",
|
|
3354
|
+
"mode": "uikit"
|
|
3355
|
+
},
|
|
3356
|
+
"indicatorStyle": {
|
|
3357
|
+
"type": "string",
|
|
3358
|
+
"description": "Scroll indicator style",
|
|
3359
|
+
"platform": "swift",
|
|
3360
|
+
"mode": "uikit"
|
|
3361
|
+
},
|
|
3362
|
+
"keyboardDismissMode": {
|
|
3363
|
+
"type": "string",
|
|
3364
|
+
"platform": "swift",
|
|
3365
|
+
"enum": [
|
|
3366
|
+
"none",
|
|
3367
|
+
"onDrag",
|
|
3368
|
+
"interactive"
|
|
3369
|
+
],
|
|
3370
|
+
"description": "How scrolling dismisses the soft keyboard. Default 'none': scrolling never dismisses (keyboard stays). 'interactive': dragging down over the keyboard dismisses it interactively. 'onDrag': any scroll dismisses immediately. Value names follow UIKit UIScrollView.keyboardDismissMode; SwiftUI mode maps to scrollDismissesKeyboard(.never/.interactively/.immediately). iOS-effective; other platforms currently ignore it."
|
|
3371
|
+
},
|
|
3372
|
+
"scrollsToTop": {
|
|
3373
|
+
"type": "boolean",
|
|
3374
|
+
"description": "Scroll to top on status bar tap",
|
|
3375
|
+
"platform": "swift",
|
|
3376
|
+
"mode": "uikit"
|
|
3377
|
+
},
|
|
3378
|
+
"keyboardAvoidance": {
|
|
3379
|
+
"type": "boolean",
|
|
3380
|
+
"description": "Enable keyboard avoidance",
|
|
3381
|
+
"platform": "swift"
|
|
3382
|
+
},
|
|
3383
|
+
"scrollBehavior": {
|
|
3384
|
+
"type": "string",
|
|
3385
|
+
"enum": [
|
|
3386
|
+
"auto",
|
|
3387
|
+
"smooth"
|
|
3388
|
+
],
|
|
3389
|
+
"description": "Scroll behavior animation",
|
|
3390
|
+
"platform": "react"
|
|
3391
|
+
}
|
|
3392
|
+
},
|
|
3393
|
+
"Collection": {
|
|
3394
|
+
"cellClasses": {
|
|
3395
|
+
"type": "array",
|
|
3396
|
+
"description": "Cell class definitions"
|
|
3397
|
+
},
|
|
3398
|
+
"headerClasses": {
|
|
3399
|
+
"type": "array",
|
|
3400
|
+
"description": "Header class definitions"
|
|
3401
|
+
},
|
|
3402
|
+
"footerClasses": {
|
|
3403
|
+
"type": "array",
|
|
3404
|
+
"description": "Footer class definitions"
|
|
3405
|
+
},
|
|
3406
|
+
"lazy": {
|
|
3407
|
+
"type": [
|
|
3408
|
+
"string",
|
|
3409
|
+
"binding"
|
|
3410
|
+
],
|
|
3411
|
+
"enum": [
|
|
3412
|
+
"lazy",
|
|
3413
|
+
"eager",
|
|
3414
|
+
"none"
|
|
3415
|
+
],
|
|
3416
|
+
"default": "lazy",
|
|
3417
|
+
"description": "Outer container shape for the Collection (single-column section path uses CollectionStackView/CollectionStack). Accepts: 'lazy' (default) -> ScrollView+LazyVStack/LazyHStack on iOS, LazyColumn/LazyRow on Android, with virtualized cell rendering. 'eager' -> ScrollView+VStack/HStack on iOS, Column(verticalScroll)/Row(horizontalScroll) on Android — no virtualization, smooth scrolling for heavy cells (markdown / images / attributed text) that suffer from LazyVStack re-evaluation. 'none' -> VStack/HStack only, no scroll container, parent must already be scrollable. Bindings (@{prop}) are resolved at runtime via the wrapper's mode parameter so toggles preserve view identity. Sticky headers and paging require 'lazy'."
|
|
3418
|
+
},
|
|
3419
|
+
"columns": {
|
|
3420
|
+
"type": [
|
|
3421
|
+
"number",
|
|
3422
|
+
"binding"
|
|
3423
|
+
],
|
|
3424
|
+
"min": 1,
|
|
3425
|
+
"description": "Number of columns. Literal int -> static GridCells.Fixed(N) / Array(repeating: ..., count: N). Binding @{prop} -> runtime-resolved data.prop; the Collection always renders on the multi-column grid path (LazyVerticalGrid / LazyHorizontalGrid on Android, LazyVGrid / LazyHGrid on iOS) even when the binding resolves to 1, so the grid layout stays stable across runtime column changes."
|
|
3426
|
+
},
|
|
3427
|
+
"columnSpacing": {
|
|
3428
|
+
"type": "number",
|
|
3429
|
+
"description": "Spacing between columns"
|
|
3430
|
+
},
|
|
3431
|
+
"itemSpacing": {
|
|
3432
|
+
"type": "number",
|
|
3433
|
+
"description": "Spacing between items (used for both grid spacing and list item spacing)"
|
|
3434
|
+
},
|
|
3435
|
+
"lineSpacing": {
|
|
3436
|
+
"type": "number",
|
|
3437
|
+
"description": "Spacing between rows"
|
|
3438
|
+
},
|
|
3439
|
+
"horizontalScroll": {
|
|
3440
|
+
"type": "boolean",
|
|
3441
|
+
"description": "Enable horizontal scroll"
|
|
3442
|
+
},
|
|
3443
|
+
"orientation": {
|
|
3444
|
+
"type": "string",
|
|
3445
|
+
"enum": [
|
|
3446
|
+
"horizontal",
|
|
3447
|
+
"vertical"
|
|
3448
|
+
],
|
|
3449
|
+
"description": "Scroll orientation (horizontal or vertical)"
|
|
3450
|
+
},
|
|
3451
|
+
"layout": {
|
|
3452
|
+
"type": "string",
|
|
3453
|
+
"enum": [
|
|
3454
|
+
"vertical",
|
|
3455
|
+
"horizontal",
|
|
3456
|
+
"flow",
|
|
3457
|
+
"Flow",
|
|
3458
|
+
"LeftAligned",
|
|
3459
|
+
"leftAligned"
|
|
3460
|
+
],
|
|
3461
|
+
"valueAliases": {
|
|
3462
|
+
"Flow": "flow",
|
|
3463
|
+
"LeftAligned": "flow",
|
|
3464
|
+
"leftAligned": "flow"
|
|
3465
|
+
},
|
|
3466
|
+
"description": "Layout type (vertical | horizontal | flow — wrapping layout packed to the leading edge). Flow/LeftAligned/leftAligned are accepted alias spellings of flow (2026-08-03 unification ruling; the old 'left-aligned wrapping' distinction was a frozen-UIKit fossil — no modern path ever implemented it)."
|
|
3467
|
+
},
|
|
3468
|
+
"insets": {
|
|
3469
|
+
"type": [
|
|
3470
|
+
"array",
|
|
3471
|
+
"string"
|
|
3472
|
+
],
|
|
3473
|
+
"description": "Content insets"
|
|
3474
|
+
},
|
|
3475
|
+
"insetHorizontal": {
|
|
3476
|
+
"type": "number",
|
|
3477
|
+
"description": "Horizontal inset"
|
|
3478
|
+
},
|
|
3479
|
+
"insetVertical": {
|
|
3480
|
+
"type": "number",
|
|
3481
|
+
"description": "Vertical inset"
|
|
3482
|
+
},
|
|
3483
|
+
"contentInsets": {
|
|
3484
|
+
"type": [
|
|
3485
|
+
"array",
|
|
3486
|
+
"string"
|
|
3487
|
+
],
|
|
3488
|
+
"description": "Content insets",
|
|
3489
|
+
"platform": "swift",
|
|
3490
|
+
"mode": "swiftui"
|
|
3491
|
+
},
|
|
3492
|
+
"contentInsetAdjustmentBehavior": {
|
|
3493
|
+
"type": "string",
|
|
3494
|
+
"description": "Content inset adjustment"
|
|
3495
|
+
},
|
|
3496
|
+
"itemWeight": {
|
|
3497
|
+
"type": "number",
|
|
3498
|
+
"description": "Item sizing weight",
|
|
3499
|
+
"platform": "swift",
|
|
3500
|
+
"mode": "swiftui"
|
|
3501
|
+
},
|
|
3502
|
+
"showsHorizontalScrollIndicator": {
|
|
3503
|
+
"type": "boolean",
|
|
3504
|
+
"description": "Show horizontal indicator",
|
|
3505
|
+
"platform": [
|
|
3506
|
+
"swift",
|
|
3507
|
+
"react"
|
|
3508
|
+
],
|
|
3509
|
+
"platform_reasons": {
|
|
3510
|
+
"kotlin": "Compose has no scrollbar primitive for Lazy lists (ScrollbarStyle is Desktop-only), so there is nothing to switch on or off — needs a drawn scrollbar composable in KotlinJsonUI first. iOS uses .scrollIndicators and web uses CSS, both native. Re-declare when the composable exists."
|
|
3511
|
+
}
|
|
3512
|
+
},
|
|
3513
|
+
"showsVerticalScrollIndicator": {
|
|
3514
|
+
"type": "boolean",
|
|
3515
|
+
"description": "Show vertical indicator",
|
|
3516
|
+
"platform": [
|
|
3517
|
+
"swift",
|
|
3518
|
+
"react"
|
|
3519
|
+
],
|
|
3520
|
+
"platform_reasons": {
|
|
3521
|
+
"kotlin": "Compose has no scrollbar primitive for Lazy lists (ScrollbarStyle is Desktop-only), so there is nothing to switch on or off — needs a drawn scrollbar composable in KotlinJsonUI first. iOS uses .scrollIndicators and web uses CSS, both native. Re-declare when the composable exists."
|
|
3522
|
+
}
|
|
3523
|
+
},
|
|
3524
|
+
"paging": {
|
|
3525
|
+
"type": "boolean",
|
|
3526
|
+
"description": "Enable paging"
|
|
3527
|
+
},
|
|
3528
|
+
"sections": {
|
|
3529
|
+
"type": "array",
|
|
3530
|
+
"description": "Section-based configuration",
|
|
3531
|
+
"items": {
|
|
3532
|
+
"type": "object",
|
|
3533
|
+
"properties": {
|
|
3534
|
+
"header": {
|
|
3535
|
+
"type": "string",
|
|
3536
|
+
"description": "Header view name"
|
|
3537
|
+
},
|
|
3538
|
+
"cell": {
|
|
3539
|
+
"type": "string",
|
|
3540
|
+
"description": "Cell view name"
|
|
3541
|
+
},
|
|
3542
|
+
"footer": {
|
|
3543
|
+
"type": "string",
|
|
3544
|
+
"description": "Footer view name"
|
|
3545
|
+
},
|
|
3546
|
+
"columns": {
|
|
3547
|
+
"type": "number",
|
|
3548
|
+
"description": "Section columns"
|
|
3549
|
+
}
|
|
3550
|
+
}
|
|
3551
|
+
}
|
|
3552
|
+
},
|
|
3553
|
+
"items": {
|
|
3554
|
+
"type": [
|
|
3555
|
+
"array",
|
|
3556
|
+
"binding"
|
|
3557
|
+
],
|
|
3558
|
+
"description": "Data source binding"
|
|
3559
|
+
},
|
|
3560
|
+
"keyboardAvoidance": {
|
|
3561
|
+
"type": "boolean",
|
|
3562
|
+
"description": "Enable keyboard avoidance",
|
|
3563
|
+
"platform": "swift"
|
|
3564
|
+
},
|
|
3565
|
+
"setTargetAsDelegate": {
|
|
3566
|
+
"type": "boolean",
|
|
3567
|
+
"description": "Set target as delegate",
|
|
3568
|
+
"platform": "swift"
|
|
3569
|
+
},
|
|
3570
|
+
"setTargetAsDataSource": {
|
|
3571
|
+
"type": "boolean",
|
|
3572
|
+
"description": "Set target as data source",
|
|
3573
|
+
"platform": "swift"
|
|
3574
|
+
},
|
|
3575
|
+
"columnCount": {
|
|
3576
|
+
"type": "number",
|
|
3577
|
+
"description": "Number of columns for CSS grid",
|
|
3578
|
+
"platform": "react"
|
|
3579
|
+
},
|
|
3580
|
+
"scrollTo": {
|
|
3581
|
+
"type": "binding",
|
|
3582
|
+
"description": "PassthroughSubject<Int, Never> for programmatic scrolling to cell index"
|
|
3583
|
+
},
|
|
3584
|
+
"scrollAnchor": {
|
|
3585
|
+
"type": "string",
|
|
3586
|
+
"enum": [
|
|
3587
|
+
"top",
|
|
3588
|
+
"center",
|
|
3589
|
+
"bottom"
|
|
3590
|
+
],
|
|
3591
|
+
"description": "Anchor point for scroll target (default: bottom)"
|
|
3592
|
+
},
|
|
3593
|
+
"defaultScrollAnchor": {
|
|
3594
|
+
"type": "string",
|
|
3595
|
+
"enum": [
|
|
3596
|
+
"top",
|
|
3597
|
+
"center",
|
|
3598
|
+
"bottom"
|
|
3599
|
+
],
|
|
3600
|
+
"description": "Initial scroll position anchor (iOS 17+). Sets where the scroll view starts."
|
|
3601
|
+
},
|
|
3602
|
+
"scrollAnimated": {
|
|
3603
|
+
"type": "boolean",
|
|
3604
|
+
"description": "Whether scrollTo uses animation (default: true)"
|
|
3605
|
+
},
|
|
3606
|
+
"cellIdProperty": {
|
|
3607
|
+
"type": "string",
|
|
3608
|
+
"description": "Cell data property key to use as unique ID for ForEach identity. When set, scrollTo uses String type instead of Int."
|
|
3609
|
+
},
|
|
3610
|
+
"autoChangeTrackingId": {
|
|
3611
|
+
"type": "boolean",
|
|
3612
|
+
"description": "When true (and cellIdProperty is set), the library auto-computes each cellId as '<primary>_<hash>' so differential updates work without a manual hashForCell helper. If cellIdProperty is missing, the build emits a warning and cells fall back to index-based identity."
|
|
3613
|
+
},
|
|
3614
|
+
"reverseLayout": {
|
|
3615
|
+
"type": "boolean",
|
|
3616
|
+
"description": "Reverse the layout direction of the Collection grid. When true, section order in the generated code is also reversed so that JSON definition order (index 0 first) matches the visual top-to-bottom order on iOS (which does not support reverseLayout). Compose's reverseLayout then flips the entire list so index 0 appears at the bottom.",
|
|
3617
|
+
"mode": "compose"
|
|
3618
|
+
},
|
|
3619
|
+
"scrollEnabled": {
|
|
3620
|
+
"type": [
|
|
3621
|
+
"boolean",
|
|
3622
|
+
"binding"
|
|
3623
|
+
],
|
|
3624
|
+
"description": "Enable/disable scrolling (binding supported)"
|
|
3625
|
+
},
|
|
3626
|
+
"onItemAppear": {
|
|
3627
|
+
"type": "callback",
|
|
3628
|
+
"description": "Called with the cell index (Int) when a cell appears on screen. Use for pagination by checking index against total count in ViewModel."
|
|
3629
|
+
},
|
|
3630
|
+
"currentPage": {
|
|
3631
|
+
"type": "binding",
|
|
3632
|
+
"description": "Current page index for paging collections (binding supported)"
|
|
3633
|
+
},
|
|
3634
|
+
"onPageChanged": {
|
|
3635
|
+
"type": "callback",
|
|
3636
|
+
"description": "Called with the new page index (Int) when the user swipes to a different page"
|
|
3637
|
+
},
|
|
3638
|
+
"containerInset": {
|
|
3639
|
+
"type": "array",
|
|
3640
|
+
"description": "Container-level insets applied outside of individual cells.",
|
|
3641
|
+
"platform": "swift",
|
|
3642
|
+
"mode": "swiftui"
|
|
3643
|
+
},
|
|
3644
|
+
"onValueChange": {
|
|
3645
|
+
"type": [
|
|
3646
|
+
"string",
|
|
3647
|
+
"binding"
|
|
3648
|
+
],
|
|
3649
|
+
"binding_direction": "one-way",
|
|
3650
|
+
"description": "Collection page/selection change handler. Canonical; prefer over onPageChanged.",
|
|
3651
|
+
"platform": [
|
|
3652
|
+
"swift",
|
|
3653
|
+
"kotlin",
|
|
3654
|
+
"react"
|
|
3655
|
+
],
|
|
3656
|
+
"aliases": [
|
|
3657
|
+
"onValueChanged",
|
|
3658
|
+
"onPageChanged"
|
|
3659
|
+
]
|
|
3660
|
+
}
|
|
3661
|
+
},
|
|
3662
|
+
"Radio": {
|
|
3663
|
+
"label": {
|
|
3664
|
+
"type": [
|
|
3665
|
+
"string",
|
|
3666
|
+
"binding"
|
|
3667
|
+
],
|
|
3668
|
+
"description": "Radio label (can be data binding)"
|
|
3669
|
+
},
|
|
3670
|
+
"text": {
|
|
3671
|
+
"type": [
|
|
3672
|
+
"string",
|
|
3673
|
+
"binding"
|
|
3674
|
+
],
|
|
3675
|
+
"description": "Radio label (alias, can be data binding)"
|
|
3676
|
+
},
|
|
3677
|
+
"group": {
|
|
3678
|
+
"type": "string",
|
|
3679
|
+
"required": true,
|
|
3680
|
+
"description": "Radio group name"
|
|
3681
|
+
},
|
|
3682
|
+
"icon": {
|
|
3683
|
+
"type": "string",
|
|
3684
|
+
"description": "Icon name for normal state",
|
|
3685
|
+
"platform": [
|
|
3686
|
+
"swift",
|
|
3687
|
+
"kotlin"
|
|
3688
|
+
]
|
|
3689
|
+
},
|
|
3690
|
+
"selectedIcon": {
|
|
3691
|
+
"type": "string",
|
|
3692
|
+
"description": "Selected icon name",
|
|
3693
|
+
"platform": [
|
|
3694
|
+
"swift",
|
|
3695
|
+
"kotlin"
|
|
3696
|
+
],
|
|
3697
|
+
"aliases": [
|
|
3698
|
+
"selected_icon"
|
|
3699
|
+
]
|
|
3700
|
+
},
|
|
3701
|
+
"selected_icon": {
|
|
3702
|
+
"type": "string",
|
|
3703
|
+
"description": "Selected icon name (underscore alias)"
|
|
3704
|
+
},
|
|
3705
|
+
"checked": {
|
|
3706
|
+
"type": [
|
|
3707
|
+
"boolean",
|
|
3708
|
+
"binding"
|
|
3709
|
+
],
|
|
3710
|
+
"description": "Initial checked state (can be binding)"
|
|
3711
|
+
},
|
|
3712
|
+
"value": {
|
|
3713
|
+
"type": "any",
|
|
3714
|
+
"description": "Associated value when selected"
|
|
3715
|
+
},
|
|
3716
|
+
"font": {
|
|
3717
|
+
"type": [
|
|
3718
|
+
"string",
|
|
3719
|
+
"binding"
|
|
3720
|
+
],
|
|
3721
|
+
"description": "Font name (binding supported)"
|
|
3722
|
+
},
|
|
3723
|
+
"fontSize": {
|
|
3724
|
+
"type": [
|
|
3725
|
+
"number",
|
|
3726
|
+
"binding"
|
|
3727
|
+
],
|
|
3728
|
+
"description": "Font size (binding supported)"
|
|
3729
|
+
},
|
|
3730
|
+
"fontColor": {
|
|
3731
|
+
"type": [
|
|
3732
|
+
"string",
|
|
3733
|
+
"binding"
|
|
3734
|
+
],
|
|
3735
|
+
"description": "Text color - hex string or color name from colors.json (binding supported)"
|
|
3736
|
+
},
|
|
3737
|
+
"spacing": {
|
|
3738
|
+
"type": [
|
|
3739
|
+
"number",
|
|
3740
|
+
"binding"
|
|
3741
|
+
],
|
|
3742
|
+
"description": "Space between icon and text (binding supported)"
|
|
3743
|
+
},
|
|
3744
|
+
"checkedColor": {
|
|
3745
|
+
"type": "color",
|
|
3746
|
+
"description": "Color when checked.",
|
|
3747
|
+
"platform": [
|
|
3748
|
+
"swift",
|
|
3749
|
+
"kotlin"
|
|
3750
|
+
]
|
|
3751
|
+
},
|
|
3752
|
+
"uncheckedColor": {
|
|
3753
|
+
"type": "color",
|
|
3754
|
+
"description": "Color when unchecked.",
|
|
3755
|
+
"platform": [
|
|
3756
|
+
"swift",
|
|
3757
|
+
"kotlin"
|
|
3758
|
+
]
|
|
3759
|
+
},
|
|
3760
|
+
"iconSize": {
|
|
3761
|
+
"type": "number",
|
|
3762
|
+
"description": "Icon size (pt / dp).",
|
|
3763
|
+
"platform": [
|
|
3764
|
+
"swift",
|
|
3765
|
+
"kotlin"
|
|
3766
|
+
]
|
|
3767
|
+
},
|
|
3768
|
+
"iconColor": {
|
|
3769
|
+
"type": "color",
|
|
3770
|
+
"description": "Icon tint color.",
|
|
3771
|
+
"platform": [
|
|
3772
|
+
"swift",
|
|
3773
|
+
"kotlin"
|
|
3774
|
+
]
|
|
3775
|
+
},
|
|
3776
|
+
"selectedValue": {
|
|
3777
|
+
"type": [
|
|
3778
|
+
"string",
|
|
3779
|
+
"binding"
|
|
3780
|
+
],
|
|
3781
|
+
"description": "Selected value of the radio group (binding for two-way)"
|
|
3782
|
+
},
|
|
3783
|
+
"onValueChange": {
|
|
3784
|
+
"type": "binding",
|
|
3785
|
+
"description": "Value change handler - binding only (@{functionName})"
|
|
3786
|
+
}
|
|
3787
|
+
},
|
|
3788
|
+
"CheckBox": {
|
|
3789
|
+
"_alias": "Check",
|
|
3790
|
+
"_comment": "CheckBox is the primary component name. Check is supported as an alias for backward compatibility.",
|
|
3791
|
+
"label": {
|
|
3792
|
+
"type": [
|
|
3793
|
+
"string",
|
|
3794
|
+
"binding"
|
|
3795
|
+
],
|
|
3796
|
+
"description": "Checkbox label (can be data binding)"
|
|
3797
|
+
},
|
|
3798
|
+
"text": {
|
|
3799
|
+
"type": [
|
|
3800
|
+
"string",
|
|
3801
|
+
"binding"
|
|
3802
|
+
],
|
|
3803
|
+
"description": "Checkbox label (alias, can be data binding)"
|
|
3804
|
+
},
|
|
3805
|
+
"isOn": {
|
|
3806
|
+
"type": [
|
|
3807
|
+
"boolean",
|
|
3808
|
+
"binding"
|
|
3809
|
+
],
|
|
3810
|
+
"description": "Checked state (binding for two-way)",
|
|
3811
|
+
"binding_direction": "two-way"
|
|
3812
|
+
},
|
|
3813
|
+
"checked": {
|
|
3814
|
+
"type": [
|
|
3815
|
+
"boolean",
|
|
3816
|
+
"binding"
|
|
3817
|
+
],
|
|
3818
|
+
"description": "Checked state alias (binding for two-way)",
|
|
3819
|
+
"binding_direction": "two-way"
|
|
3820
|
+
},
|
|
3821
|
+
"icon": {
|
|
3822
|
+
"type": "string",
|
|
3823
|
+
"description": "Icon name for unchecked state",
|
|
3824
|
+
"platform": [
|
|
3825
|
+
"swift",
|
|
3826
|
+
"kotlin"
|
|
3827
|
+
]
|
|
3828
|
+
},
|
|
3829
|
+
"src": {
|
|
3830
|
+
"type": "string",
|
|
3831
|
+
"description": "Icon name for unchecked state (alias)"
|
|
3832
|
+
},
|
|
3833
|
+
"selectedIcon": {
|
|
3834
|
+
"type": "string",
|
|
3835
|
+
"description": "Selected icon name",
|
|
3836
|
+
"platform": [
|
|
3837
|
+
"swift",
|
|
3838
|
+
"kotlin"
|
|
3839
|
+
],
|
|
3840
|
+
"aliases": [
|
|
3841
|
+
"onSrc"
|
|
3842
|
+
]
|
|
3843
|
+
},
|
|
3844
|
+
"value": {
|
|
3845
|
+
"type": "any",
|
|
3846
|
+
"description": "Associated value when checked"
|
|
3847
|
+
},
|
|
3848
|
+
"enabled": {
|
|
3849
|
+
"type": [
|
|
3850
|
+
"boolean",
|
|
3851
|
+
"binding"
|
|
3852
|
+
],
|
|
3853
|
+
"description": "Whether enabled (can be data binding)"
|
|
3854
|
+
},
|
|
3855
|
+
"font": {
|
|
3856
|
+
"type": [
|
|
3857
|
+
"string",
|
|
3858
|
+
"binding"
|
|
3859
|
+
],
|
|
3860
|
+
"description": "Font name (binding supported)"
|
|
3861
|
+
},
|
|
3862
|
+
"fontSize": {
|
|
3863
|
+
"type": [
|
|
3864
|
+
"number",
|
|
3865
|
+
"binding"
|
|
3866
|
+
],
|
|
3867
|
+
"description": "Font size (binding supported)"
|
|
3868
|
+
},
|
|
3869
|
+
"fontColor": {
|
|
3870
|
+
"type": [
|
|
3871
|
+
"string",
|
|
3872
|
+
"binding"
|
|
3873
|
+
],
|
|
3874
|
+
"description": "Text color - hex string or color name from colors.json (binding supported)"
|
|
3875
|
+
},
|
|
3876
|
+
"spacing": {
|
|
3877
|
+
"type": [
|
|
3878
|
+
"number",
|
|
3879
|
+
"binding"
|
|
3880
|
+
],
|
|
3881
|
+
"description": "Space between icon and text (binding supported)"
|
|
3882
|
+
},
|
|
3883
|
+
"onValueChange": {
|
|
3884
|
+
"type": "binding",
|
|
3885
|
+
"description": "Value change handler - binding only (@{functionName})"
|
|
3886
|
+
},
|
|
3887
|
+
"checkedColor": {
|
|
3888
|
+
"type": "color",
|
|
3889
|
+
"description": "Color when checked.",
|
|
3890
|
+
"platform": [
|
|
3891
|
+
"swift",
|
|
3892
|
+
"kotlin"
|
|
3893
|
+
]
|
|
3894
|
+
},
|
|
3895
|
+
"uncheckedColor": {
|
|
3896
|
+
"type": "color",
|
|
3897
|
+
"description": "Color when unchecked.",
|
|
3898
|
+
"platform": [
|
|
3899
|
+
"swift",
|
|
3900
|
+
"kotlin"
|
|
3901
|
+
]
|
|
3902
|
+
},
|
|
3903
|
+
"iconSize": {
|
|
3904
|
+
"type": "number",
|
|
3905
|
+
"description": "Icon size (pt / dp).",
|
|
3906
|
+
"platform": [
|
|
3907
|
+
"swift",
|
|
3908
|
+
"kotlin"
|
|
3909
|
+
]
|
|
3910
|
+
},
|
|
3911
|
+
"iconColor": {
|
|
3912
|
+
"type": "color",
|
|
3913
|
+
"description": "Icon tint color.",
|
|
3914
|
+
"platform": [
|
|
3915
|
+
"swift",
|
|
3916
|
+
"kotlin"
|
|
3917
|
+
]
|
|
3918
|
+
}
|
|
3919
|
+
},
|
|
3920
|
+
"Check": {
|
|
3921
|
+
"_alias_of": "CheckBox",
|
|
3922
|
+
"_comment": "Component alias of CheckBox. Resolved by the L1 normalizer type rewrite and by every validator/codegen consumer - do not add attribute copies here."
|
|
3923
|
+
},
|
|
3924
|
+
"Indicator": {
|
|
3925
|
+
"indicatorStyle": {
|
|
3926
|
+
"type": "string",
|
|
3927
|
+
"enum": [
|
|
3928
|
+
"medium",
|
|
3929
|
+
"large"
|
|
3930
|
+
],
|
|
3931
|
+
"description": "Indicator style",
|
|
3932
|
+
"platform": "swift",
|
|
3933
|
+
"mode": "swiftui"
|
|
3934
|
+
},
|
|
3935
|
+
"color": {
|
|
3936
|
+
"type": [
|
|
3937
|
+
"string",
|
|
3938
|
+
"binding"
|
|
3939
|
+
],
|
|
3940
|
+
"description": "Indicator color - hex string or color name from colors.json (binding supported)",
|
|
3941
|
+
"platform": "swift",
|
|
3942
|
+
"mode": "swiftui"
|
|
3943
|
+
},
|
|
3944
|
+
"hidesWhenStopped": {
|
|
3945
|
+
"type": "boolean",
|
|
3946
|
+
"description": "Hide when stopped",
|
|
3947
|
+
"platform": "swift",
|
|
3948
|
+
"mode": "swiftui"
|
|
3949
|
+
}
|
|
3950
|
+
},
|
|
3951
|
+
"GradientView": {
|
|
3952
|
+
"gradient": {
|
|
3953
|
+
"type": "array",
|
|
3954
|
+
"description": "Gradient colors"
|
|
3955
|
+
},
|
|
3956
|
+
"gradientDirection": {
|
|
3957
|
+
"type": "string",
|
|
3958
|
+
"enum": [
|
|
3959
|
+
"Vertical",
|
|
3960
|
+
"Horizontal",
|
|
3961
|
+
"Oblique"
|
|
3962
|
+
],
|
|
3963
|
+
"description": "Gradient direction"
|
|
3964
|
+
},
|
|
3965
|
+
"locations": {
|
|
3966
|
+
"type": "array",
|
|
3967
|
+
"description": "Color stop locations (0.0-1.0)"
|
|
3968
|
+
}
|
|
3969
|
+
},
|
|
3970
|
+
"Blur": {
|
|
3971
|
+
"effectStyle": {
|
|
3972
|
+
"type": "string",
|
|
3973
|
+
"enum": [
|
|
3974
|
+
"Light",
|
|
3975
|
+
"Dark",
|
|
3976
|
+
"ExtraLight"
|
|
3977
|
+
],
|
|
3978
|
+
"description": "Blur effect style"
|
|
3979
|
+
},
|
|
3980
|
+
"blurRadius": {
|
|
3981
|
+
"type": "number",
|
|
3982
|
+
"description": "Blur radius in px/dp. Android and Web only: both blur by radius, while UIKit/SwiftUI express the appearance as effectStyle (UIVisualEffectView has styles, not radii). Overrides the radius effectStyle resolves to.",
|
|
3983
|
+
"platform": [
|
|
3984
|
+
"kotlin",
|
|
3985
|
+
"react"
|
|
3986
|
+
]
|
|
3987
|
+
}
|
|
3988
|
+
},
|
|
3989
|
+
"IconLabel": {
|
|
3990
|
+
"text": {
|
|
3991
|
+
"type": [
|
|
3992
|
+
"string",
|
|
3993
|
+
"binding"
|
|
3994
|
+
],
|
|
3995
|
+
"description": "Label text (can be data binding)"
|
|
3996
|
+
},
|
|
3997
|
+
"selected": {
|
|
3998
|
+
"type": [
|
|
3999
|
+
"boolean",
|
|
4000
|
+
"binding"
|
|
4001
|
+
],
|
|
4002
|
+
"description": "Selected state (binding supported). Chooses icon_on over icon_off and selectedFontColor over fontColor, so every platform declaring those needs this too."
|
|
4003
|
+
},
|
|
4004
|
+
"font": {
|
|
4005
|
+
"type": "string",
|
|
4006
|
+
"description": "Font name"
|
|
4007
|
+
},
|
|
4008
|
+
"fontSize": {
|
|
4009
|
+
"type": "number",
|
|
4010
|
+
"description": "Font size"
|
|
4011
|
+
},
|
|
4012
|
+
"fontColor": {
|
|
4013
|
+
"type": "string",
|
|
4014
|
+
"description": "Text color - hex string or color name from colors.json"
|
|
4015
|
+
},
|
|
4016
|
+
"textShadow": {
|
|
4017
|
+
"type": [
|
|
4018
|
+
"string",
|
|
4019
|
+
"object"
|
|
4020
|
+
],
|
|
4021
|
+
"description": "Text shadow — same object contract as Label ({color, blur, offset: [x, y]}; the UIKit runtime passes the identical JSON to both)"
|
|
4022
|
+
},
|
|
4023
|
+
"selectedFontColor": {
|
|
4024
|
+
"type": "string",
|
|
4025
|
+
"description": "Selected text color - hex string or color name from colors.json"
|
|
4026
|
+
},
|
|
4027
|
+
"icon_on": {
|
|
4028
|
+
"type": "string",
|
|
4029
|
+
"description": "Selected icon"
|
|
4030
|
+
},
|
|
4031
|
+
"icon_off": {
|
|
4032
|
+
"type": "string",
|
|
4033
|
+
"description": "Normal icon"
|
|
4034
|
+
},
|
|
4035
|
+
"iconPosition": {
|
|
4036
|
+
"type": "string",
|
|
4037
|
+
"enum": [
|
|
4038
|
+
"Left",
|
|
4039
|
+
"Right",
|
|
4040
|
+
"Top",
|
|
4041
|
+
"Bottom"
|
|
4042
|
+
],
|
|
4043
|
+
"description": "Icon position relative to text"
|
|
4044
|
+
},
|
|
4045
|
+
"iconMargin": {
|
|
4046
|
+
"type": "number",
|
|
4047
|
+
"description": "Icon-text spacing"
|
|
4048
|
+
}
|
|
4049
|
+
},
|
|
4050
|
+
"Web": {
|
|
4051
|
+
"url": {
|
|
4052
|
+
"type": [
|
|
4053
|
+
"string",
|
|
4054
|
+
"binding"
|
|
4055
|
+
],
|
|
4056
|
+
"description": "Web page URL (can be data binding)"
|
|
4057
|
+
},
|
|
4058
|
+
"html": {
|
|
4059
|
+
"type": "string",
|
|
4060
|
+
"description": "HTML content"
|
|
4061
|
+
},
|
|
4062
|
+
"allowsBackForwardNavigationGestures": {
|
|
4063
|
+
"type": "boolean",
|
|
4064
|
+
"description": "Enable swipe navigation",
|
|
4065
|
+
"platform": "swift"
|
|
4066
|
+
},
|
|
4067
|
+
"allowsLinkPreview": {
|
|
4068
|
+
"type": "boolean",
|
|
4069
|
+
"description": "Enable link preview",
|
|
4070
|
+
"platform": "swift"
|
|
4071
|
+
},
|
|
4072
|
+
"sandbox": {
|
|
4073
|
+
"type": "string",
|
|
4074
|
+
"description": "Iframe sandbox attribute",
|
|
4075
|
+
"platform": "react"
|
|
4076
|
+
},
|
|
4077
|
+
"allow": {
|
|
4078
|
+
"type": "string",
|
|
4079
|
+
"description": "Iframe allow attribute for feature policy",
|
|
4080
|
+
"platform": "react"
|
|
4081
|
+
}
|
|
4082
|
+
},
|
|
4083
|
+
"SafeAreaView": {
|
|
4084
|
+
"orientation": {
|
|
4085
|
+
"type": "string",
|
|
4086
|
+
"enum": [
|
|
4087
|
+
"horizontal",
|
|
4088
|
+
"vertical"
|
|
4089
|
+
],
|
|
4090
|
+
"description": "Stack orientation (default: zstack)"
|
|
4091
|
+
},
|
|
4092
|
+
"safeAreaInsetPositions": {
|
|
4093
|
+
"type": "array",
|
|
4094
|
+
"description": "Safe area edges",
|
|
4095
|
+
"items": {
|
|
4096
|
+
"type": "string",
|
|
4097
|
+
"enum": [
|
|
4098
|
+
"top",
|
|
4099
|
+
"bottom",
|
|
4100
|
+
"leading",
|
|
4101
|
+
"trailing",
|
|
4102
|
+
"vertical",
|
|
4103
|
+
"all"
|
|
4104
|
+
]
|
|
4105
|
+
}
|
|
4106
|
+
},
|
|
4107
|
+
"child": {
|
|
4108
|
+
"type": "array",
|
|
4109
|
+
"description": "Child component(s)"
|
|
4110
|
+
},
|
|
4111
|
+
"children": {
|
|
4112
|
+
"type": "array",
|
|
4113
|
+
"description": "Child components (alias for child)"
|
|
4114
|
+
}
|
|
4115
|
+
},
|
|
4116
|
+
"TabView": {
|
|
4117
|
+
"selectedIndex": {
|
|
4118
|
+
"type": [
|
|
4119
|
+
"number",
|
|
4120
|
+
"binding"
|
|
4121
|
+
],
|
|
4122
|
+
"description": "Currently selected tab index (binding for two-way)",
|
|
4123
|
+
"binding_direction": "two-way",
|
|
4124
|
+
"aliases": [
|
|
4125
|
+
"selectedTabIndex"
|
|
4126
|
+
]
|
|
4127
|
+
},
|
|
4128
|
+
"tabs": {
|
|
4129
|
+
"type": "array",
|
|
4130
|
+
"required": true,
|
|
4131
|
+
"description": "Array of tab configurations",
|
|
4132
|
+
"items": {
|
|
4133
|
+
"type": "object",
|
|
4134
|
+
"properties": {
|
|
4135
|
+
"title": {
|
|
4136
|
+
"type": "string",
|
|
4137
|
+
"description": "Tab title text"
|
|
4138
|
+
},
|
|
4139
|
+
"icon": {
|
|
4140
|
+
"type": "string",
|
|
4141
|
+
"description": "Tab icon name (SF Symbol for iOS, drawable for Android)"
|
|
4142
|
+
},
|
|
4143
|
+
"selectedIcon": {
|
|
4144
|
+
"type": "string",
|
|
4145
|
+
"description": "Icon when tab is selected (optional, defaults to icon)"
|
|
4146
|
+
},
|
|
4147
|
+
"iconType": {
|
|
4148
|
+
"type": "string",
|
|
4149
|
+
"enum": [
|
|
4150
|
+
"system",
|
|
4151
|
+
"resource",
|
|
4152
|
+
"lucide"
|
|
4153
|
+
],
|
|
4154
|
+
"default": "system",
|
|
4155
|
+
"description": "Icon source type: 'system' for platform icons (SF Symbols/Material Icons), 'resource' for custom drawable/asset images, 'lucide' for lucide-react components (React only — rjui_tools maps the name via LucideIconHelper)"
|
|
4156
|
+
},
|
|
4157
|
+
"badge": {
|
|
4158
|
+
"type": [
|
|
4159
|
+
"string",
|
|
4160
|
+
"number",
|
|
4161
|
+
"binding"
|
|
4162
|
+
],
|
|
4163
|
+
"description": "Badge value (number or text, can be binding)"
|
|
4164
|
+
},
|
|
4165
|
+
"view": {
|
|
4166
|
+
"type": "string",
|
|
4167
|
+
"description": "Layout file name to display for this tab (without extension)"
|
|
4168
|
+
}
|
|
4169
|
+
}
|
|
4170
|
+
}
|
|
4171
|
+
},
|
|
4172
|
+
"tintColor": {
|
|
4173
|
+
"type": [
|
|
4174
|
+
"string",
|
|
4175
|
+
"binding"
|
|
4176
|
+
],
|
|
4177
|
+
"description": "Selected tab tint color - hex string or color name from colors.json (binding supported)"
|
|
4178
|
+
},
|
|
4179
|
+
"unselectedColor": {
|
|
4180
|
+
"type": [
|
|
4181
|
+
"string",
|
|
4182
|
+
"binding"
|
|
4183
|
+
],
|
|
4184
|
+
"description": "Unselected tab color - hex string or color name from colors.json (binding supported)"
|
|
4185
|
+
},
|
|
4186
|
+
"tabBarBackground": {
|
|
4187
|
+
"type": [
|
|
4188
|
+
"string",
|
|
4189
|
+
"binding"
|
|
4190
|
+
],
|
|
4191
|
+
"description": "Tab bar background color - hex string or color name from colors.json (binding supported)"
|
|
4192
|
+
},
|
|
4193
|
+
"showLabels": {
|
|
4194
|
+
"type": "boolean",
|
|
4195
|
+
"default": true,
|
|
4196
|
+
"description": "Whether to show tab labels (default: true)"
|
|
4197
|
+
},
|
|
4198
|
+
"onTabChange": {
|
|
4199
|
+
"type": "binding",
|
|
4200
|
+
"description": "Tab change handler - binding only (@{functionName})"
|
|
4201
|
+
},
|
|
4202
|
+
"onValueChange": {
|
|
4203
|
+
"type": [
|
|
4204
|
+
"string",
|
|
4205
|
+
"binding"
|
|
4206
|
+
],
|
|
4207
|
+
"binding_direction": "one-way",
|
|
4208
|
+
"description": "Tab/page selection change handler. Canonical; prefer over onTabChange/onPageChanged.",
|
|
4209
|
+
"platform": [
|
|
4210
|
+
"swift",
|
|
4211
|
+
"kotlin",
|
|
4212
|
+
"react"
|
|
4213
|
+
],
|
|
4214
|
+
"aliases": [
|
|
4215
|
+
"onTabChange",
|
|
4216
|
+
"onPageChanged"
|
|
4217
|
+
]
|
|
4218
|
+
}
|
|
4219
|
+
},
|
|
4220
|
+
"Embed": {
|
|
4221
|
+
"_comment": "Embeds another screen as a region of this layout. The embedded screen owns its own ViewModel (independent from the parent VM). Use for tablet master/detail or dashboard panels. See jsonui-cli/docs/plans/2026-05-11-embed-feature.md.",
|
|
4222
|
+
"screen": {
|
|
4223
|
+
"type": "string",
|
|
4224
|
+
"required": true,
|
|
4225
|
+
"description": "Layout JSON filename of the screen to embed (snake_case, no extension, relative to layout root). Codegen converts to PascalCase for the generated View class name; dynamic mode loads the layout JSON as-is."
|
|
4226
|
+
},
|
|
4227
|
+
"params": {
|
|
4228
|
+
"type": [
|
|
4229
|
+
"object",
|
|
4230
|
+
"binding"
|
|
4231
|
+
],
|
|
4232
|
+
"description": "Init params handed to the embedded screen's ViewModel. Keys must be camelCase at every level. Values form a tree: intermediate nodes must be literal objects; leaves may be scalar literals or @{varName} bindings against the parent VM (bindings are leaf-only — an @{} at an object position is a validation error; arrays are not supported). A callback-typed parent VM property passed as a leaf binding is the canonical escape hatch for navigation out of an isolated embed. VMs that implement applyInitParams(_:) receive these; others ignore them."
|
|
4233
|
+
},
|
|
4234
|
+
"navigationMode": {
|
|
4235
|
+
"type": "string",
|
|
4236
|
+
"enum": [
|
|
4237
|
+
"delegate",
|
|
4238
|
+
"isolated"
|
|
4239
|
+
],
|
|
4240
|
+
"default": "delegate",
|
|
4241
|
+
"description": "'delegate' (default): embedded screen shares the parent's NavController/Router. push() bubbles to the parent; pop/dismiss/navigateBack are bounded at the embed (do not close the embed itself). 'isolated': the embed owns a private navigation stack (nested NavigationStack/NavHost/memory stack); push stays inside the embed, pop stops at the embed stack's root, OS gestures/browser back are platform-delegated, and present-type transitions (sheet/dialog/dismiss) are forbidden in the embedded screen's spec. Requires SwiftJsonUI >= 10.5.0 / KotlinJsonUI >= 2.12.0 / EmbedContainer.tsx template v2."
|
|
4242
|
+
},
|
|
4243
|
+
"events": {
|
|
4244
|
+
"type": "object",
|
|
4245
|
+
"description": "Map of embedded-screen event names → parent VM handler names. Event keys must follow on[A-Z]... pattern. Handler values must reference existing entries in the parent VM's dataFlow.viewModel.methods or stateManagement.eventHandlers. Embedded VMs emit events via the lib-provided emit(name, payload) helper (no spec declaration required)."
|
|
4246
|
+
}
|
|
4247
|
+
}
|
|
4248
|
+
}
|