bare-ui-kit 0.2.0 → 0.3.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.
Files changed (89) hide show
  1. package/CMakeLists.txt +7 -1
  2. package/README.md +42 -1
  3. package/binding.m +558 -2
  4. package/index.d.ts +41 -0
  5. package/index.js +16 -0
  6. package/lib/activity-indicator-view.d.ts +29 -0
  7. package/lib/activity-indicator-view.h +181 -0
  8. package/lib/activity-indicator-view.js +56 -0
  9. package/lib/alert-action.d.ts +33 -0
  10. package/lib/alert-action.js +48 -0
  11. package/lib/alert-controller.d.ts +20 -0
  12. package/lib/alert-controller.h +199 -0
  13. package/lib/alert-controller.js +33 -0
  14. package/lib/attributed-string.d.ts +45 -0
  15. package/lib/attributed-string.h +176 -0
  16. package/lib/attributed-string.js +51 -0
  17. package/lib/attributes.js +34 -0
  18. package/lib/bezier-path.d.ts +26 -0
  19. package/lib/bezier-path.h +145 -0
  20. package/lib/bezier-path.js +51 -0
  21. package/lib/bridging.h +600 -2
  22. package/lib/color.d.ts +86 -0
  23. package/lib/color.h +286 -0
  24. package/lib/color.js +170 -0
  25. package/lib/events.js +35 -0
  26. package/lib/font-descriptor.d.ts +30 -0
  27. package/lib/font-descriptor.h +96 -0
  28. package/lib/font-descriptor.js +47 -0
  29. package/lib/font-metrics.d.ts +38 -0
  30. package/lib/font-metrics.h +109 -0
  31. package/lib/font-metrics.js +58 -0
  32. package/lib/font.d.ts +59 -0
  33. package/lib/font.h +424 -0
  34. package/lib/font.js +100 -0
  35. package/lib/handle.d.ts +5 -0
  36. package/lib/handle.js +6 -0
  37. package/lib/image-view.d.ts +15 -0
  38. package/lib/image-view.h +75 -0
  39. package/lib/image-view.js +27 -0
  40. package/lib/image.d.ts +37 -0
  41. package/lib/image.h +205 -0
  42. package/lib/image.js +60 -0
  43. package/lib/label.d.ts +51 -0
  44. package/lib/label.h +331 -0
  45. package/lib/label.js +94 -0
  46. package/lib/paragraph-style.d.ts +20 -0
  47. package/lib/paragraph-style.h +94 -0
  48. package/lib/paragraph-style.js +42 -0
  49. package/lib/pasteboard.d.ts +31 -0
  50. package/lib/pasteboard.h +123 -0
  51. package/lib/pasteboard.js +63 -0
  52. package/lib/retain.js +12 -0
  53. package/lib/runtime.m +92 -15
  54. package/lib/scene.d.ts +30 -0
  55. package/lib/scene.h +87 -0
  56. package/lib/scene.js +48 -0
  57. package/lib/scratch.js +4 -0
  58. package/lib/screen.d.ts +26 -0
  59. package/lib/screen.h +194 -0
  60. package/lib/screen.js +52 -0
  61. package/lib/scroll-view.d.ts +39 -0
  62. package/lib/scroll-view.h +246 -0
  63. package/lib/scroll-view.js +64 -0
  64. package/lib/switch.d.ts +22 -0
  65. package/lib/switch.h +166 -0
  66. package/lib/switch.js +42 -0
  67. package/lib/text-field.d.ts +103 -0
  68. package/lib/text-field.h +562 -0
  69. package/lib/text-field.js +183 -0
  70. package/lib/text-view.d.ts +59 -0
  71. package/lib/text-view.h +497 -0
  72. package/lib/text-view.js +138 -0
  73. package/lib/view-controller.d.ts +37 -0
  74. package/lib/view-controller.h +108 -20
  75. package/lib/view-controller.js +50 -5
  76. package/lib/view.d.ts +158 -0
  77. package/lib/view.h +1385 -20
  78. package/lib/view.js +276 -7
  79. package/lib/window.d.ts +44 -0
  80. package/lib/window.h +167 -27
  81. package/lib/window.js +62 -9
  82. package/lib/wrap.js +7 -0
  83. package/package.json +12 -3
  84. package/prebuilds/ios-arm64/bare +0 -0
  85. package/prebuilds/ios-arm64/bare-ui-kit.bare +0 -0
  86. package/prebuilds/ios-arm64-simulator/bare +0 -0
  87. package/prebuilds/ios-arm64-simulator/bare-ui-kit.bare +0 -0
  88. package/prebuilds/ios-x64-simulator/bare +0 -0
  89. package/prebuilds/ios-x64-simulator/bare-ui-kit.bare +0 -0
@@ -0,0 +1,562 @@
1
+ #import <assert.h>
2
+ #import <bare.h>
3
+ #import <js.h>
4
+
5
+ #import <UIKit/UIKit.h>
6
+
7
+ #import "bridging.h"
8
+
9
+ enum {
10
+ bare_ui_kit_text_field_event_did_begin_editing = 1 << 0,
11
+ bare_ui_kit_text_field_event_did_end_editing = 1 << 1,
12
+ bare_ui_kit_text_field_event_did_change = 1 << 2,
13
+ bare_ui_kit_text_field_event_should_change_characters = 1 << 3,
14
+ bare_ui_kit_text_field_event_should_return = 1 << 4,
15
+ bare_ui_kit_text_field_event_did_change_selection = 1 << 5,
16
+ };
17
+
18
+ @interface BareTextField : UITextField <UITextFieldDelegate, BareEventTarget> {
19
+ @public
20
+ js_env_t *env;
21
+ js_ref_t *ctx;
22
+
23
+ int32_t mask;
24
+ }
25
+
26
+ @end
27
+
28
+ @implementation BareTextField
29
+
30
+ - (void)dealloc {
31
+ int err;
32
+
33
+ err = js_delete_reference(env, ctx);
34
+ assert(err == 0);
35
+
36
+ [super dealloc];
37
+ }
38
+
39
+ - (int32_t)eventMask {
40
+ return mask;
41
+ }
42
+
43
+ - (void)setEventMask:(int32_t)value {
44
+ mask = value;
45
+ }
46
+
47
+ - (void)textFieldDidBeginEditing:(UITextField *)field {
48
+ if ((mask & bare_ui_kit_text_field_event_did_begin_editing) == 0) return;
49
+
50
+ bare_ui_kit__emit(env, ctx, "_ondidbeginediting");
51
+ }
52
+
53
+ - (void)textFieldDidEndEditing:(UITextField *)field {
54
+ if ((mask & bare_ui_kit_text_field_event_did_end_editing) == 0) return;
55
+
56
+ bare_ui_kit__emit(env, ctx, "_ondidendediting");
57
+ }
58
+
59
+ - (void)textFieldDidChangeSelection:(UITextField *)field {
60
+ if ((mask & bare_ui_kit_text_field_event_did_change_selection) == 0) return;
61
+
62
+ bare_ui_kit__emit(env, ctx, "_ondidchangeselection");
63
+ }
64
+
65
+ // UIKit reports an edit before it happens and a change after it, and both are
66
+ // needed.
67
+ - (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
68
+ if ((mask & bare_ui_kit_text_field_event_should_change_characters) != 0) {
69
+ bare_ui_kit__emit_replacement(env, ctx, "_onshouldchangecharacters", (int32_t) range.location, (int32_t) range.length, string);
70
+ }
71
+
72
+ return YES;
73
+ }
74
+
75
+ - (BOOL)textFieldShouldReturn:(UITextField *)field {
76
+ if ((mask & bare_ui_kit_text_field_event_should_return) != 0) {
77
+ bare_ui_kit__emit(env, ctx, "_onshouldreturn");
78
+ }
79
+
80
+ return YES;
81
+ }
82
+
83
+ - (void)bareEditingChanged:(id)sender {
84
+ if ((mask & bare_ui_kit_text_field_event_did_change) == 0) return;
85
+
86
+ bare_ui_kit__emit(env, ctx, "_ondidchange");
87
+ }
88
+
89
+ @end
90
+
91
+ static js_value_t *
92
+ bare_ui_kit_text_field_init(js_env_t *env, js_callback_info_t *info) {
93
+ int err;
94
+
95
+ size_t argc = 5;
96
+ js_value_t *argv[5];
97
+
98
+ bare_ui_kit_state_t *state;
99
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
100
+ assert(err == 0);
101
+
102
+ assert(argc == 5);
103
+
104
+ double x;
105
+ if (!bare_ui_kit__read_double(env, argv[0], "x", &x)) return NULL;
106
+
107
+ double y;
108
+ if (!bare_ui_kit__read_double(env, argv[1], "y", &y)) return NULL;
109
+
110
+ double width;
111
+ if (!bare_ui_kit__read_double(env, argv[2], "width", &width)) return NULL;
112
+
113
+ double height;
114
+ if (!bare_ui_kit__read_double(env, argv[3], "height", &height)) return NULL;
115
+
116
+ js_value_t *result;
117
+
118
+ @autoreleasepool {
119
+ BareTextField *handle = [[[BareTextField alloc]
120
+ initWithFrame:CGRectMake(x, y, width, height)] autorelease];
121
+
122
+ result = bare_foundation_bridge(env, state->registry, handle);
123
+
124
+ handle->env = env;
125
+
126
+ err = js_create_reference(env, argv[4], 0, &handle->ctx);
127
+ assert(err == 0);
128
+
129
+ handle.delegate = handle;
130
+
131
+ // The delegate hears about an edit before it happens. The change itself is
132
+ // a control event, as for every other `UIControl`.
133
+ [handle addTarget:handle
134
+ action:@selector(bareEditingChanged:)
135
+ forControlEvents:UIControlEventEditingChanged];
136
+ }
137
+
138
+ return result;
139
+ }
140
+
141
+ // A field selects with opaque positions, so they are turned into offsets here
142
+ // with `UITextInput`.
143
+ static js_value_t *
144
+ bare_ui_kit_text_field_selected_range(js_env_t *env, js_callback_info_t *info) {
145
+ int err;
146
+
147
+ size_t argc = 3;
148
+ js_value_t *argv[3];
149
+
150
+ bare_ui_kit_state_t *state;
151
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
152
+ assert(err == 0);
153
+
154
+ assert(argc == 1 || argc == 3);
155
+
156
+ void *handle;
157
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
158
+
159
+ js_value_t *result = NULL;
160
+
161
+ @autoreleasepool {
162
+ UITextField *text_field = (__bridge UITextField *) handle;
163
+
164
+ if (argc == 1) {
165
+ UITextRange *range = text_field.selectedTextRange;
166
+
167
+ NSInteger location = 0;
168
+ NSInteger length = 0;
169
+
170
+ if (range != nil) {
171
+ location = [text_field offsetFromPosition:text_field.beginningOfDocument toPosition:range.start];
172
+ length = [text_field offsetFromPosition:range.start toPosition:range.end];
173
+ }
174
+
175
+ result = bare_ui_kit__from_range(env, NSMakeRange(location, length));
176
+ } else {
177
+ int32_t location;
178
+ if (!bare_ui_kit__read_int32(env, argv[1], "location", &location)) return NULL;
179
+
180
+ int32_t length;
181
+ if (!bare_ui_kit__read_int32(env, argv[2], "length", &length)) return NULL;
182
+
183
+ UITextPosition *start = [text_field positionFromPosition:text_field.beginningOfDocument offset:location];
184
+ UITextPosition *end = [text_field positionFromPosition:start offset:length];
185
+
186
+ if (start != nil && end != nil) {
187
+ text_field.selectedTextRange = [text_field textRangeFromPosition:start toPosition:end];
188
+ }
189
+ }
190
+ }
191
+
192
+ return result;
193
+ }
194
+
195
+ static js_value_t *
196
+ bare_ui_kit_text_field_text(js_env_t *env, js_callback_info_t *info) {
197
+ int err;
198
+
199
+ size_t argc = 2;
200
+ js_value_t *argv[2];
201
+
202
+ bare_ui_kit_state_t *state;
203
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
204
+ assert(err == 0);
205
+
206
+ assert(argc == 1 || argc == 2);
207
+
208
+ void *handle;
209
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
210
+
211
+ js_value_t *result = NULL;
212
+
213
+ @autoreleasepool {
214
+ UITextField *text_field = (__bridge UITextField *) handle;
215
+
216
+ if (argc == 1) {
217
+ result = bare_ui_kit__from_string(env, text_field.text);
218
+ } else {
219
+ text_field.text = bare_ui_kit__to_string(env, argv[1]);
220
+ }
221
+ }
222
+
223
+ return result;
224
+ }
225
+
226
+ static js_value_t *
227
+ bare_ui_kit_text_field_placeholder(js_env_t *env, js_callback_info_t *info) {
228
+ int err;
229
+
230
+ size_t argc = 2;
231
+ js_value_t *argv[2];
232
+
233
+ bare_ui_kit_state_t *state;
234
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
235
+ assert(err == 0);
236
+
237
+ assert(argc == 1 || argc == 2);
238
+
239
+ void *handle;
240
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
241
+
242
+ js_value_t *result = NULL;
243
+
244
+ @autoreleasepool {
245
+ UITextField *text_field = (__bridge UITextField *) handle;
246
+
247
+ if (argc == 1) {
248
+ result = bare_ui_kit__from_string(env, text_field.placeholder);
249
+ } else {
250
+ text_field.placeholder = bare_ui_kit__to_string(env, argv[1]);
251
+ }
252
+ }
253
+
254
+ return result;
255
+ }
256
+
257
+ static js_value_t *
258
+ bare_ui_kit_text_field_font(js_env_t *env, js_callback_info_t *info) {
259
+ int err;
260
+
261
+ size_t argc = 2;
262
+ js_value_t *argv[2];
263
+
264
+ bare_ui_kit_state_t *state;
265
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
266
+ assert(err == 0);
267
+
268
+ assert(argc == 1 || argc == 2);
269
+
270
+ void *handle;
271
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
272
+
273
+ js_value_t *result = NULL;
274
+
275
+ @autoreleasepool {
276
+ UITextField *text_field = (__bridge UITextField *) handle;
277
+
278
+ if (argc == 1) {
279
+ result = bare_foundation_bridge(env, state->registry, text_field.font);
280
+ } else {
281
+ text_field.font = bare_foundation_to_object(env, state->registry, argv[1]);
282
+ }
283
+ }
284
+
285
+ return result;
286
+ }
287
+
288
+ static js_value_t *
289
+ bare_ui_kit_text_field_text_color(js_env_t *env, js_callback_info_t *info) {
290
+ int err;
291
+
292
+ size_t argc = 2;
293
+ js_value_t *argv[2];
294
+
295
+ bare_ui_kit_state_t *state;
296
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
297
+ assert(err == 0);
298
+
299
+ assert(argc == 1 || argc == 2);
300
+
301
+ void *handle;
302
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
303
+
304
+ js_value_t *result = NULL;
305
+
306
+ @autoreleasepool {
307
+ UITextField *text_field = (__bridge UITextField *) handle;
308
+
309
+ if (argc == 1) {
310
+ result = bare_foundation_bridge(env, state->registry, text_field.textColor);
311
+ } else {
312
+ text_field.textColor = bare_foundation_to_object(env, state->registry, argv[1]);
313
+ }
314
+ }
315
+
316
+ return result;
317
+ }
318
+
319
+ static js_value_t *
320
+ bare_ui_kit_text_field_text_alignment(js_env_t *env, js_callback_info_t *info) {
321
+ int err;
322
+
323
+ size_t argc = 2;
324
+ js_value_t *argv[2];
325
+
326
+ bare_ui_kit_state_t *state;
327
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
328
+ assert(err == 0);
329
+
330
+ assert(argc == 1 || argc == 2);
331
+
332
+ void *handle;
333
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
334
+
335
+ js_value_t *result = NULL;
336
+
337
+ @autoreleasepool {
338
+ UITextField *text_field = (__bridge UITextField *) handle;
339
+
340
+ if (argc == 1) {
341
+ err = js_create_int32(env, (int32_t) text_field.textAlignment, &result);
342
+ assert(err == 0);
343
+ } else {
344
+ int32_t value;
345
+ if (!bare_ui_kit__read_int32(env, argv[1], "text_alignment", &value)) return NULL;
346
+
347
+ text_field.textAlignment = value;
348
+ }
349
+ }
350
+
351
+ return result;
352
+ }
353
+
354
+ static js_value_t *
355
+ bare_ui_kit_text_field_secure_text_entry(js_env_t *env, js_callback_info_t *info) {
356
+ int err;
357
+
358
+ size_t argc = 2;
359
+ js_value_t *argv[2];
360
+
361
+ bare_ui_kit_state_t *state;
362
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
363
+ assert(err == 0);
364
+
365
+ assert(argc == 1 || argc == 2);
366
+
367
+ void *handle;
368
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
369
+
370
+ js_value_t *result = NULL;
371
+
372
+ @autoreleasepool {
373
+ UITextField *text_field = (__bridge UITextField *) handle;
374
+
375
+ if (argc == 1) {
376
+ err = js_get_boolean(env, text_field.secureTextEntry, &result);
377
+ assert(err == 0);
378
+ } else {
379
+ bool value;
380
+ if (!bare_ui_kit__read_bool(env, argv[1], "secure_text_entry", &value)) return NULL;
381
+
382
+ text_field.secureTextEntry = value;
383
+ }
384
+ }
385
+
386
+ return result;
387
+ }
388
+
389
+ static js_value_t *
390
+ bare_ui_kit_text_field_keyboard_type(js_env_t *env, js_callback_info_t *info) {
391
+ int err;
392
+
393
+ size_t argc = 2;
394
+ js_value_t *argv[2];
395
+
396
+ bare_ui_kit_state_t *state;
397
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
398
+ assert(err == 0);
399
+
400
+ assert(argc == 1 || argc == 2);
401
+
402
+ void *handle;
403
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
404
+
405
+ js_value_t *result = NULL;
406
+
407
+ @autoreleasepool {
408
+ UITextField *text_field = (__bridge UITextField *) handle;
409
+
410
+ if (argc == 1) {
411
+ err = js_create_int32(env, (int32_t) text_field.keyboardType, &result);
412
+ assert(err == 0);
413
+ } else {
414
+ int32_t value;
415
+ if (!bare_ui_kit__read_int32(env, argv[1], "keyboard_type", &value)) return NULL;
416
+
417
+ text_field.keyboardType = value;
418
+ }
419
+ }
420
+
421
+ return result;
422
+ }
423
+
424
+ static js_value_t *
425
+ bare_ui_kit_text_field_return_key_type(js_env_t *env, js_callback_info_t *info) {
426
+ int err;
427
+
428
+ size_t argc = 2;
429
+ js_value_t *argv[2];
430
+
431
+ bare_ui_kit_state_t *state;
432
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
433
+ assert(err == 0);
434
+
435
+ assert(argc == 1 || argc == 2);
436
+
437
+ void *handle;
438
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
439
+
440
+ js_value_t *result = NULL;
441
+
442
+ @autoreleasepool {
443
+ UITextField *text_field = (__bridge UITextField *) handle;
444
+
445
+ if (argc == 1) {
446
+ err = js_create_int32(env, (int32_t) text_field.returnKeyType, &result);
447
+ assert(err == 0);
448
+ } else {
449
+ int32_t value;
450
+ if (!bare_ui_kit__read_int32(env, argv[1], "return_key_type", &value)) return NULL;
451
+
452
+ text_field.returnKeyType = value;
453
+ }
454
+ }
455
+
456
+ return result;
457
+ }
458
+
459
+ static js_value_t *
460
+ bare_ui_kit_text_field_autocapitalization_type(js_env_t *env, js_callback_info_t *info) {
461
+ int err;
462
+
463
+ size_t argc = 2;
464
+ js_value_t *argv[2];
465
+
466
+ bare_ui_kit_state_t *state;
467
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
468
+ assert(err == 0);
469
+
470
+ assert(argc == 1 || argc == 2);
471
+
472
+ void *handle;
473
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
474
+
475
+ js_value_t *result = NULL;
476
+
477
+ @autoreleasepool {
478
+ UITextField *text_field = (__bridge UITextField *) handle;
479
+
480
+ if (argc == 1) {
481
+ err = js_create_int32(env, (int32_t) text_field.autocapitalizationType, &result);
482
+ assert(err == 0);
483
+ } else {
484
+ int32_t value;
485
+ if (!bare_ui_kit__read_int32(env, argv[1], "autocapitalization_type", &value)) return NULL;
486
+
487
+ text_field.autocapitalizationType = value;
488
+ }
489
+ }
490
+
491
+ return result;
492
+ }
493
+
494
+ static js_value_t *
495
+ bare_ui_kit_text_field_autocorrection_type(js_env_t *env, js_callback_info_t *info) {
496
+ int err;
497
+
498
+ size_t argc = 2;
499
+ js_value_t *argv[2];
500
+
501
+ bare_ui_kit_state_t *state;
502
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
503
+ assert(err == 0);
504
+
505
+ assert(argc == 1 || argc == 2);
506
+
507
+ void *handle;
508
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
509
+
510
+ js_value_t *result = NULL;
511
+
512
+ @autoreleasepool {
513
+ UITextField *text_field = (__bridge UITextField *) handle;
514
+
515
+ if (argc == 1) {
516
+ err = js_create_int32(env, (int32_t) text_field.autocorrectionType, &result);
517
+ assert(err == 0);
518
+ } else {
519
+ int32_t value;
520
+ if (!bare_ui_kit__read_int32(env, argv[1], "autocorrection_type", &value)) return NULL;
521
+
522
+ text_field.autocorrectionType = value;
523
+ }
524
+ }
525
+
526
+ return result;
527
+ }
528
+
529
+ static js_value_t *
530
+ bare_ui_kit_text_field_enabled(js_env_t *env, js_callback_info_t *info) {
531
+ int err;
532
+
533
+ size_t argc = 2;
534
+ js_value_t *argv[2];
535
+
536
+ bare_ui_kit_state_t *state;
537
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
538
+ assert(err == 0);
539
+
540
+ assert(argc == 1 || argc == 2);
541
+
542
+ void *handle;
543
+ if (bare_foundation_read_tag(env, state->registry, argv[0], "handle", &handle) < 0) return NULL;
544
+
545
+ js_value_t *result = NULL;
546
+
547
+ @autoreleasepool {
548
+ UITextField *text_field = (__bridge UITextField *) handle;
549
+
550
+ if (argc == 1) {
551
+ err = js_get_boolean(env, text_field.enabled, &result);
552
+ assert(err == 0);
553
+ } else {
554
+ bool value;
555
+ if (!bare_ui_kit__read_bool(env, argv[1], "enabled", &value)) return NULL;
556
+
557
+ text_field.enabled = value;
558
+ }
559
+ }
560
+
561
+ return result;
562
+ }