@gjsify/react-native 0.45.0 → 0.47.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 (139) hide show
  1. package/PROPS.md +525 -0
  2. package/README.md +45 -163
  3. package/SUPPORT.md +472 -0
  4. package/lib/esm/accessor.js +1 -0
  5. package/lib/esm/animated/brand.js +1 -0
  6. package/lib/esm/animated/easing.js +1 -0
  7. package/lib/esm/animated/index.js +1 -0
  8. package/lib/esm/animated/properties.js +1 -0
  9. package/lib/esm/animated/timing.js +1 -0
  10. package/lib/esm/animated/value.js +1 -0
  11. package/lib/esm/announce.js +1 -0
  12. package/lib/esm/app-registry.js +1 -1
  13. package/lib/esm/components.js +1 -1
  14. package/lib/esm/generated/own-exports.js +1 -1
  15. package/lib/esm/generated/unsupported-async-storage.js +0 -0
  16. package/lib/esm/generated/unsupported-expo-audio.js +1 -0
  17. package/lib/esm/generated/unsupported-expo-constants.js +1 -0
  18. package/lib/esm/generated/unsupported-expo-font.js +1 -0
  19. package/lib/esm/generated/unsupported-expo-image.js +1 -0
  20. package/lib/esm/generated/unsupported-expo-linking.js +1 -0
  21. package/lib/esm/generated/unsupported-expo-splash-screen.js +1 -0
  22. package/lib/esm/generated/unsupported-expo-status-bar.js +1 -0
  23. package/lib/esm/generated/unsupported-expo-system-ui.js +1 -0
  24. package/lib/esm/generated/unsupported-expo-video.js +1 -0
  25. package/lib/esm/generated/unsupported-expo-web-browser.js +1 -0
  26. package/lib/esm/generated/unsupported-nativewind.js +1 -0
  27. package/lib/esm/generated/unsupported-react-native-gesture-handler.js +1 -0
  28. package/lib/esm/generated/unsupported-react-native-safe-area-context.js +1 -0
  29. package/lib/esm/generated/unsupported-react-native-webview.js +1 -0
  30. package/lib/esm/generated/unsupported-react-native.js +1 -0
  31. package/lib/esm/generated/unsupported-router.js +1 -0
  32. package/lib/esm/generated/unsupported-vector-icons.js +1 -0
  33. package/lib/esm/index.js +1 -1
  34. package/lib/esm/lists/controller.js +1 -1
  35. package/lib/esm/primitives/answers.js +1 -0
  36. package/lib/esm/primitives/defaults.js +1 -0
  37. package/lib/esm/primitives/errors.js +1 -1
  38. package/lib/esm/primitives/handles.js +1 -0
  39. package/lib/esm/primitives/index.js +1 -1
  40. package/lib/esm/primitives/intents.js +1 -1
  41. package/lib/esm/primitives/resolve.js +1 -1
  42. package/lib/esm/primitives/style.js +1 -1
  43. package/lib/esm/primitives/table.js +1 -1
  44. package/lib/esm/prop-table.js +1 -0
  45. package/lib/esm/router/href.js +1 -0
  46. package/lib/esm/router/index.js +1 -1
  47. package/lib/esm/router/navigation.js +1 -1
  48. package/lib/esm/router/tabs.js +1 -1
  49. package/lib/esm/solid/index.js +1 -1
  50. package/lib/esm/stylesheet.js +1 -1
  51. package/lib/esm/support-table.js +1 -1
  52. package/lib/esm/surfaces/async-storage.js +1 -0
  53. package/lib/esm/surfaces/expo-audio.js +1 -0
  54. package/lib/esm/surfaces/expo-constants.js +1 -0
  55. package/lib/esm/surfaces/expo-font.js +1 -0
  56. package/lib/esm/surfaces/expo-image.js +1 -0
  57. package/lib/esm/surfaces/expo-linking.js +1 -0
  58. package/lib/esm/surfaces/expo-splash-screen.js +1 -0
  59. package/lib/esm/surfaces/expo-status-bar.js +1 -0
  60. package/lib/esm/surfaces/expo-system-ui.js +1 -0
  61. package/lib/esm/surfaces/expo-video.js +1 -0
  62. package/lib/esm/surfaces/expo-web-browser.js +1 -0
  63. package/lib/esm/surfaces/icon-map.js +1 -0
  64. package/lib/esm/surfaces/nativewind.js +1 -0
  65. package/lib/esm/surfaces/react-native-gesture-handler.js +1 -0
  66. package/lib/esm/surfaces/react-native-safe-area-context.js +1 -0
  67. package/lib/esm/surfaces/react-native-webview.js +1 -0
  68. package/lib/esm/surfaces/vector-icons.js +1 -0
  69. package/lib/esm/unsupported.js +1 -1
  70. package/lib/types/accessor.d.ts +10 -0
  71. package/lib/types/animated/animated.spec.d.ts +2 -0
  72. package/lib/types/animated/brand.d.ts +8 -0
  73. package/lib/types/animated/easing.d.ts +70 -0
  74. package/lib/types/animated/easing.spec.d.ts +2 -0
  75. package/lib/types/animated/index.d.ts +55 -0
  76. package/lib/types/animated/properties.d.ts +33 -0
  77. package/lib/types/animated/timing.d.ts +37 -0
  78. package/lib/types/animated/value.d.ts +103 -0
  79. package/lib/types/announce.d.ts +18 -0
  80. package/lib/types/components.d.ts +82 -3
  81. package/lib/types/generated/unsupported-async-storage.d.ts +1 -0
  82. package/lib/types/generated/unsupported-expo-audio.d.ts +4 -0
  83. package/lib/types/generated/unsupported-expo-constants.d.ts +2 -0
  84. package/lib/types/generated/unsupported-expo-font.d.ts +4 -0
  85. package/lib/types/generated/unsupported-expo-image.d.ts +3 -0
  86. package/lib/types/generated/unsupported-expo-linking.d.ts +4 -0
  87. package/lib/types/generated/unsupported-expo-splash-screen.d.ts +5 -0
  88. package/lib/types/generated/unsupported-expo-status-bar.d.ts +5 -0
  89. package/lib/types/generated/unsupported-expo-system-ui.d.ts +2 -0
  90. package/lib/types/generated/unsupported-expo-video.d.ts +3 -0
  91. package/lib/types/generated/unsupported-expo-web-browser.d.ts +6 -0
  92. package/lib/types/generated/unsupported-nativewind.d.ts +5 -0
  93. package/lib/types/generated/unsupported-react-native-gesture-handler.d.ts +10 -0
  94. package/lib/types/generated/unsupported-react-native-safe-area-context.d.ts +4 -0
  95. package/lib/types/generated/unsupported-react-native-webview.d.ts +1 -0
  96. package/lib/types/generated/{unsupported-exports.d.ts → unsupported-react-native.d.ts} +0 -2
  97. package/lib/types/generated/unsupported-vector-icons.d.ts +11 -0
  98. package/lib/types/index.d.ts +5 -1
  99. package/lib/types/primitives/answers.d.ts +69 -0
  100. package/lib/types/primitives/defaults.d.ts +52 -0
  101. package/lib/types/primitives/defaults.spec.d.ts +2 -0
  102. package/lib/types/primitives/errors.d.ts +9 -0
  103. package/lib/types/primitives/handles.d.ts +56 -0
  104. package/lib/types/primitives/index.d.ts +8 -2
  105. package/lib/types/primitives/intents.d.ts +36 -0
  106. package/lib/types/primitives/resolve.d.ts +25 -1
  107. package/lib/types/primitives/table.d.ts +63 -1
  108. package/lib/types/prop-table.d.ts +56 -0
  109. package/lib/types/prop-table.spec.d.ts +2 -0
  110. package/lib/types/router/href.d.ts +58 -0
  111. package/lib/types/router/href.spec.d.ts +2 -0
  112. package/lib/types/router/index.d.ts +3 -1
  113. package/lib/types/router/navigation.d.ts +47 -5
  114. package/lib/types/router/tabs.d.ts +35 -0
  115. package/lib/types/solid/index.d.ts +15 -1
  116. package/lib/types/support-table.d.ts +79 -10
  117. package/lib/types/surfaces/async-storage.d.ts +57 -0
  118. package/lib/types/surfaces/expo-audio.d.ts +1 -0
  119. package/lib/types/surfaces/expo-constants.d.ts +11 -0
  120. package/lib/types/surfaces/expo-font.d.ts +34 -0
  121. package/lib/types/surfaces/expo-image.d.ts +1 -0
  122. package/lib/types/surfaces/expo-linking.d.ts +36 -0
  123. package/lib/types/surfaces/expo-splash-screen.d.ts +1 -0
  124. package/lib/types/surfaces/expo-status-bar.d.ts +16 -0
  125. package/lib/types/surfaces/expo-system-ui.d.ts +1 -0
  126. package/lib/types/surfaces/expo-video.d.ts +1 -0
  127. package/lib/types/surfaces/expo-web-browser.d.ts +21 -0
  128. package/lib/types/surfaces/icon-map.d.ts +14 -0
  129. package/lib/types/surfaces/nativewind.d.ts +1 -0
  130. package/lib/types/surfaces/react-native-gesture-handler.d.ts +10 -0
  131. package/lib/types/surfaces/react-native-safe-area-context.d.ts +60 -0
  132. package/lib/types/surfaces/react-native-webview.d.ts +4 -0
  133. package/lib/types/surfaces/surfaces.spec.d.ts +2 -0
  134. package/lib/types/surfaces/vector-icons.d.ts +15 -0
  135. package/lib/types/unsupported.d.ts +12 -3
  136. package/package.json +85 -14
  137. package/lib/esm/generated/unsupported-exports.js +0 -1
  138. package/lib/esm/generated/unsupported-router-exports.js +0 -1
  139. /package/lib/types/generated/{unsupported-router-exports.d.ts → unsupported-router.d.ts} +0 -0
package/PROPS.md ADDED
@@ -0,0 +1,525 @@
1
+ <!-- GENERATED by scripts/generate-exports.mjs — do not edit. -->
2
+
3
+ # What `@gjsify/react-native` does with each prop
4
+
5
+ One section per primitive, generated from `src/primitives/table.ts` — the same data the
6
+ renderer executes and `@gjsify/react-native/prop-table` publishes, so this document cannot
7
+ disagree with what a render does.
8
+
9
+ The **answer** column is `acceptsProp()`'s: `property`, `event`, `style`, `file`, `gesture` and
10
+ `announcement` reach GTK; `ignored` is a DECLARED no-op, which is an answer and not a refusal;
11
+ `refused` throws a `PrimitiveError` at render time. A prop that appears in no row throws too,
12
+ naming the ones that are here.
13
+
14
+ Ask this from a test rather than reading it: `acceptsProp("Text", "onPress")` is `false` and
15
+ `explainProp("Text", "onPress")` is the sentence a render would have thrown (ADR 0039).
16
+
17
+ ## `<View>`
18
+
19
+ widget `GtkBox` · takes no text child.
20
+
21
+ | prop | answer | GTK | why |
22
+ |---|---|---|---|
23
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
24
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
25
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
26
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
27
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
28
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
29
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
30
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
31
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
32
+ | `pointerEvents` | property | `can-target` | — |
33
+ | `testID` | property | `name` | — |
34
+
35
+ ## `<Text>`
36
+
37
+ widget `GtkLabel` · a text child writes `label`.
38
+
39
+ | prop | answer | GTK | why |
40
+ |---|---|---|---|
41
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
42
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
43
+ | `accessibilityLiveRegion` | announcement | `notify::label`, `Gtk.Accessible.announce()` | — |
44
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
45
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
46
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
47
+ | `adjustsFontSizeToFit` | refused | — | GTK has no shrink-to-fit text; a label ellipsizes or wraps. Use `numberOfLines` with `ellipsizeMode` |
48
+ | `allowFontScaling` | ignored | — | text scaling is a desktop-wide GNOME setting, not a per-label opt-in |
49
+ | `ellipsizeMode` | property | `ellipsize` | — |
50
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
51
+ | `maxFontSizeMultiplier` | ignored | — | see `allowFontScaling` |
52
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
53
+ | `numberOfLines` | property | `lines` | — |
54
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
55
+ | `onPress` | refused | — | a `Gtk.Label` emits no `clicked` (measured: `activate-current-link`, `activate-link`, `copy-clipboard`, `move-cursor` and nothing else). Wrap it in a `<Pressable>`, which is a real `Gtk.Button` |
56
+ | `selectable` | property | `selectable` | — |
57
+ | `testID` | property | `name` | — |
58
+
59
+ ## `<Pressable>`
60
+
61
+ widget `GtkButton` · a text child writes `label`.
62
+
63
+ | prop | answer | GTK | why |
64
+ |---|---|---|---|
65
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
66
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
67
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
68
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
69
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
70
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
71
+ | `android_ripple` | ignored | — | an Android-only ripple; Adwaita has its own press feedback |
72
+ | `delayLongPress` | refused | — | see `onLongPress` |
73
+ | `disabled` | property | `sensitive` | — |
74
+ | `hitSlop` | refused | — | GTK hit-tests the allocation and has no way to grow it past the widget. Pad the button (`p-*`), which enlarges the real target |
75
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
76
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
77
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
78
+ | `onLongPress` | refused | — | a long press is a `Gtk.GestureLongPress` controller added to the widget, not a property or a signal on it, so it is not something this layer can route as data |
79
+ | `onPress` | event | `clicked` | — |
80
+ | `onPressIn` | refused | — | press state is the GTK CSS `:active` pseudo-class, not React state (ADR 0032 § 7) — write `active:opacity-70` and GTK animates it with no re-render at all |
81
+ | `onPressOut` | refused | — | see `onPressIn` — `active:` is the mechanism |
82
+ | `pointerEvents` | property | `can-target` | — |
83
+ | `testID` | property | `name` | — |
84
+
85
+ ## `<ScrollView>`
86
+
87
+ widget `GtkScrolledWindow` · children go into `GtkBox` · takes no text child.
88
+
89
+ | prop | answer | GTK | why |
90
+ |---|---|---|---|
91
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
92
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
93
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
94
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
95
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
96
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
97
+ | `contentContainerClassName` | ignored | — | read directly as the content node’s class list |
98
+ | `contentContainerStyle` | ignored | — | read directly as the content node’s style set |
99
+ | `horizontal` | property | `orientation`, `hscrollbar-policy`, `vscrollbar-policy` | — |
100
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
101
+ | `keyboardDismissMode` | ignored | — | see `keyboardShouldPersistTaps` |
102
+ | `keyboardShouldPersistTaps` | ignored | — | there is no on-screen keyboard to dismiss |
103
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
104
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
105
+ | `onScroll` | refused | — | GTK reports scroll position through the `Gtk.Adjustment` objects behind `hadjustment`/`vadjustment` — `notify::value` on an adjustment, not a signal on the scrolled window — so there is no prop to route. Reach the adjustment through a ref |
106
+ | `refreshControl` | refused | — | GTK has no pull-to-refresh idiom and `RefreshControl` is `refused` in the support table for that reason. Give the desktop build a refresh action |
107
+ | `scrollEnabled` | refused | — | a `Gtk.ScrolledWindow` has no switch that stops scrolling — setting both policies to `never` hides the bars AND clamps the child, which is a different thing. Render the content without the ScrollView when it must not scroll |
108
+ | `scrollEventThrottle` | refused | — | see `onScroll` |
109
+ | `showsHorizontalScrollIndicator` | property | `hscrollbar-policy` | — |
110
+ | `showsVerticalScrollIndicator` | property | `vscrollbar-policy` | — |
111
+ | `testID` | property | `name` | — |
112
+
113
+ ## `<ActivityIndicator>`
114
+
115
+ widget `AdwSpinner` · takes no text child.
116
+
117
+ | prop | answer | GTK | why |
118
+ |---|---|---|---|
119
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
120
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
121
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
122
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
123
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
124
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
125
+ | `animating` | property | `visible` | — |
126
+ | `color` | style | `style: color` | — |
127
+ | `hidesWhenStopped` | ignored | — | a stopped `Adw.Spinner` is a hidden one here — there is no property that stops it while it is on screen (measured), so this is already the behaviour |
128
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
129
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
130
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
131
+ | `size` | property | `width-request`, `height-request` | — |
132
+ | `testID` | property | `name` | — |
133
+
134
+ ## `<TextInput>`
135
+
136
+ widget `GtkEntry` · a text child writes `text` · a `ref` receives the `text-input` handle, not the widget.
137
+
138
+ | prop | answer | GTK | why |
139
+ |---|---|---|---|
140
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
141
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
142
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
143
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
144
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
145
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
146
+ | `autoCapitalize` | ignored | — | an on-screen keyboard behaviour; a hardware keyboard has no shift state to preset |
147
+ | `autoComplete` | ignored | — | is Android’s autofill hint, and there is no autofill service on a GTK desktop to hint to — a password manager fills a field through the accessibility bus or a paste, neither of which the widget declares anything for. `keyboardType` is the one hint that does land: it writes `Gtk.Entry:input-purpose`, which an input method reads |
148
+ | `autoCorrect` | ignored | — | an on-screen keyboard behaviour |
149
+ | `autoFocus` | refused | — | focus is `Gtk.Widget.grab_focus()`, which only works once the widget is mapped — an imperative call at a moment this layer does not own. Call it from a ref in an effect |
150
+ | `defaultValue` | property | `text` | — |
151
+ | `editable` | property | `editable` | — |
152
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
153
+ | `keyboardAppearance` | ignored | — | there is no on-screen keyboard to theme |
154
+ | `keyboardType` | property | `input-purpose` | — |
155
+ | `maxLength` | property | `max-length` | — |
156
+ | `multiline` | ignored | — | it chose the widget; it is not also a property |
157
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
158
+ | `onBlur` | refused | — | see `onFocus` — the same controller |
159
+ | `onChangeText` | event | `notify::text` | — |
160
+ | `onFocus` | refused | — | focus arrives through a `Gtk.EventControllerFocus`, a controller rather than a signal on the widget, so it is not a prop this layer can route |
161
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
162
+ | `onSubmitEditing` | event | `activate` | — |
163
+ | `placeholder` | property | `placeholder-text` | — |
164
+ | `returnKeyType` | ignored | — | a desktop keyboard has one Return key and no label to change |
165
+ | `secureTextEntry` | property | `visibility` | — |
166
+ | `submitBehavior` | ignored | — | chooses what the Return key does, and each GTK widget has exactly one answer with nothing to select between: a `Gtk.Entry` always emits `activate` (which is `onSubmitEditing`) and can never insert a newline, and a `Gtk.TextView` always inserts a newline and never submits — which is why `onSubmitEditing` is refused on a multiline input. `multiline` is the prop that picks the behaviour, because it picks the widget |
167
+ | `testID` | property | `name` | — |
168
+ | `textContentType` | ignored | — | is `autoComplete`’s iOS spelling and has the same absent addressee. Note `Gtk.Accessible` does carry an `autocomplete` PROPERTY, and it is a different thing: it describes a widget that completes its own text (a combo box), not a system that fills it in |
169
+ | `value` | property | `text` | — |
170
+
171
+ ## `<TextInput multiline>`
172
+
173
+ widget `GtkTextView` · takes no text child · a `ref` receives the `text-input` handle, not the widget.
174
+
175
+ One React Native prop, two GTK widgets: `multiline` selects this row instead of the one above.
176
+
177
+ | prop | answer | GTK | why |
178
+ |---|---|---|---|
179
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
180
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
181
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
182
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
183
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
184
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
185
+ | `autoCapitalize` | ignored | — | an on-screen keyboard behaviour; a hardware keyboard has no shift state to preset |
186
+ | `autoComplete` | ignored | — | is Android’s autofill hint, and there is no autofill service on a GTK desktop to hint to — a password manager fills a field through the accessibility bus or a paste, neither of which the widget declares anything for. `keyboardType` is the one hint that does land: it writes `Gtk.Entry:input-purpose`, which an input method reads |
187
+ | `autoCorrect` | ignored | — | an on-screen keyboard behaviour |
188
+ | `autoFocus` | refused | — | focus is `Gtk.Widget.grab_focus()`, which only works once the widget is mapped — an imperative call at a moment this layer does not own. Call it from a ref in an effect |
189
+ | `defaultValue` | refused | — | `Gtk.TextView` keeps its content in a `Gtk.TextBuffer` rather than in a property (measured: 61 properties, no `text`), so there is nothing for this layer to set as data. Drop `multiline` for a `Gtk.Entry`, or reach the buffer through a ref |
190
+ | `editable` | property | `editable` | — |
191
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
192
+ | `keyboardAppearance` | ignored | — | there is no on-screen keyboard to theme |
193
+ | `keyboardType` | property | `input-purpose` | — |
194
+ | `maxLength` | refused | — | `Gtk.TextView` installs no `max-length` (measured) — the limit belongs to the buffer |
195
+ | `multiline` | ignored | — | it chose the widget; it is not also a property |
196
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
197
+ | `onBlur` | refused | — | see `onFocus` — the same controller |
198
+ | `onChangeText` | refused | — | `Gtk.TextView` keeps its content in a `Gtk.TextBuffer` rather than in a property (measured: 61 properties, no `text`), so there is nothing for this layer to set as data. Drop `multiline` for a `Gtk.Entry`, or reach the buffer through a ref |
199
+ | `onFocus` | refused | — | focus arrives through a `Gtk.EventControllerFocus`, a controller rather than a signal on the widget, so it is not a prop this layer can route |
200
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
201
+ | `onSubmitEditing` | refused | — | Return inserts a newline in a multiline field; there is nothing to submit |
202
+ | `placeholder` | refused | — | `Gtk.TextView` installs no `placeholder-text` (measured); the Adwaita idiom is a label above the field |
203
+ | `returnKeyType` | ignored | — | a desktop keyboard has one Return key and no label to change |
204
+ | `secureTextEntry` | refused | — | `Gtk.TextView` installs no `visibility` (measured), and a multiline password field is not a thing a desktop offers |
205
+ | `submitBehavior` | ignored | — | chooses what the Return key does, and each GTK widget has exactly one answer with nothing to select between: a `Gtk.Entry` always emits `activate` (which is `onSubmitEditing`) and can never insert a newline, and a `Gtk.TextView` always inserts a newline and never submits — which is why `onSubmitEditing` is refused on a multiline input. `multiline` is the prop that picks the behaviour, because it picks the widget |
206
+ | `testID` | property | `name` | — |
207
+ | `textContentType` | ignored | — | is `autoComplete`’s iOS spelling and has the same absent addressee. Note `Gtk.Accessible` does carry an `autocomplete` PROPERTY, and it is a different thing: it describes a widget that completes its own text (a combo box), not a system that fills it in |
208
+ | `value` | refused | — | `Gtk.TextView` keeps its content in a `Gtk.TextBuffer` rather than in a property (measured: 61 properties, no `text`), so there is nothing for this layer to set as data. Drop `multiline` for a `Gtk.Entry`, or reach the buffer through a ref |
209
+
210
+ ## `<Switch>`
211
+
212
+ widget `GtkSwitch` · takes no text child.
213
+
214
+ | prop | answer | GTK | why |
215
+ |---|---|---|---|
216
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
217
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
218
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
219
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
220
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
221
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
222
+ | `disabled` | property | `sensitive` | — |
223
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
224
+ | `ios_backgroundColor` | ignored | — | an iOS-only fallback colour |
225
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
226
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
227
+ | `onValueChange` | event | `notify::active` | — |
228
+ | `testID` | property | `name` | — |
229
+ | `thumbColor` | refused | — | see `trackColor` |
230
+ | `trackColor` | refused | — | Adwaita paints the switch from the theme’s accent colour, and its track is a CSS `slider`/`trough` subnode rather than a property. Style it from the application stylesheet |
231
+ | `value` | property | `active` | — |
232
+
233
+ ## `<Image>`
234
+
235
+ widget `GtkPicture` · takes no text child.
236
+
237
+ | prop | answer | GTK | why |
238
+ |---|---|---|---|
239
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
240
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
241
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
242
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
243
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
244
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
245
+ | `alt` | property | `alternative-text` | — |
246
+ | `blurRadius` | refused | — | is a per-pixel effect. GTK composites a `Gdk.Paintable` and has no filter property on the widget that draws it — the counterpart is a `Gsk` render node or a `Gtk.Snapshot` subclass, which is a widget of its own rather than a prop on this one |
247
+ | `capInsets` | refused | — | is iOS nine-part stretching. GTK’s counterpart is a CSS `border-image` on a widget’s background, which is a different widget and a different property set |
248
+ | `defaultSource` | refused | — | is the placeholder shown while the real image loads, and `Gtk.Picture` has one file at a time with no load event to swap on (measured: it emits no signals). Render a placeholder widget beside it and remove it yourself |
249
+ | `fadeDuration` | ignored | — | an Android cross-fade on load; there is no load event here to fade from (measured) |
250
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
251
+ | `loadingIndicatorSource` | refused | — | see `defaultSource` |
252
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
253
+ | `onError` | refused | — | is a load event, and `Gtk.Picture` emits NO signals at all (measured: its GType lists none) — it is handed a file or a paintable and draws it, reporting neither progress nor failure. A missing file leaves `paintable` null with no diagnostic, so a callback that never fires would hide exactly the case it exists to report. Load the bytes yourself and set `paintable` through a ref |
254
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
255
+ | `onLoad` | refused | — | is a load event, and `Gtk.Picture` emits NO signals at all (measured: its GType lists none) — it is handed a file or a paintable and draws it, reporting neither progress nor failure. A missing file leaves `paintable` null with no diagnostic, so a callback that never fires would hide exactly the case it exists to report. Load the bytes yourself and set `paintable` through a ref |
256
+ | `onLoadEnd` | refused | — | is a load event, and `Gtk.Picture` emits NO signals at all (measured: its GType lists none) — it is handed a file or a paintable and draws it, reporting neither progress nor failure. A missing file leaves `paintable` null with no diagnostic, so a callback that never fires would hide exactly the case it exists to report. Load the bytes yourself and set `paintable` through a ref |
257
+ | `onLoadStart` | refused | — | is a load event, and `Gtk.Picture` emits NO signals at all (measured: its GType lists none) — it is handed a file or a paintable and draws it, reporting neither progress nor failure. A missing file leaves `paintable` null with no diagnostic, so a callback that never fires would hide exactly the case it exists to report. Load the bytes yourself and set `paintable` through a ref |
258
+ | `onProgress` | refused | — | is a load event, and `Gtk.Picture` emits NO signals at all (measured: its GType lists none) — it is handed a file or a paintable and draws it, reporting neither progress nor failure. A missing file leaves `paintable` null with no diagnostic, so a callback that never fires would hide exactly the case it exists to report. Load the bytes yourself and set `paintable` through a ref |
259
+ | `progressiveRenderingEnabled` | ignored | — | GTK decodes an image in one pass |
260
+ | `resizeMethod` | ignored | — | an Android decoder hint |
261
+ | `resizeMode` | property | `content-fit` | — |
262
+ | `resizeMultiplier` | ignored | — | an Android decoder hint |
263
+ | `source` | file | `file` | — |
264
+ | `testID` | property | `name` | — |
265
+ | `tintColor` | refused | — | is a per-pixel effect. GTK composites a `Gdk.Paintable` and has no filter property on the widget that draws it — the counterpart is a `Gsk` render node or a `Gtk.Snapshot` subclass, which is a widget of its own rather than a prop on this one |
266
+
267
+ ## `<ImageBackground>`
268
+
269
+ widget `GtkOverlay` · children go into `GtkBox` · backdrop `GtkPicture` · takes no text child.
270
+
271
+ | prop | answer | GTK | why |
272
+ |---|---|---|---|
273
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
274
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
275
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
276
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
277
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
278
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
279
+ | `alt` | property | `alternative-text` | — |
280
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
281
+ | `imageRef` | refused | — | hands back the inner `Image`’s instance. This element’s `ref` is the `Gtk.Overlay`; the picture is its main child and `overlay.get_child()` reaches it, so a second ref would be a second way to say the same thing |
282
+ | `imageStyle` | ignored | — | read directly as the picture node’s style set |
283
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
284
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
285
+ | `pointerEvents` | property | `can-target` | — |
286
+ | `resizeMode` | property | `content-fit` | — |
287
+ | `source` | file | `file` | — |
288
+ | `testID` | property | `name` | — |
289
+
290
+ ## `<TouchableOpacity>`
291
+
292
+ widget `GtkButton` · a text child writes `label`.
293
+
294
+ | prop | answer | GTK | why |
295
+ |---|---|---|---|
296
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
297
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
298
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
299
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
300
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
301
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
302
+ | `activeOpacity` | refused | — | sets the pressed appearance, which on GTK is the CSS `:active` pseudo-class rather than a prop (ADR 0032 § 7). Write `active:opacity-70` — it resolves through the same variant mechanism as every other utility, reads the project's own token scale, and GTK animates it with no re-render at all |
303
+ | `delayLongPress` | refused | — | see `onLongPress` |
304
+ | `delayPressIn` | refused | — | see `onPressIn` — there is no press-in event to delay |
305
+ | `delayPressOut` | refused | — | see `onPressIn` |
306
+ | `disabled` | property | `sensitive` | — |
307
+ | `hitSlop` | refused | — | GTK hit-tests the allocation and has no way to grow it past the widget. Pad the element (`p-*`), which enlarges the real target |
308
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
309
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
310
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
311
+ | `onLongPress` | refused | — | a long press is a `Gtk.GestureLongPress` controller added to the widget, not a property or a signal on it, so it is not something this layer can route as data |
312
+ | `onPress` | event | `clicked` | — |
313
+ | `onPressIn` | refused | — | press state is the GTK CSS `:active` pseudo-class, not React state (ADR 0032 § 7) — write `active:opacity-70` and GTK animates it with no re-render at all |
314
+ | `onPressOut` | refused | — | see `onPressIn` — `active:` is the mechanism |
315
+ | `pointerEvents` | property | `can-target` | — |
316
+ | `pressRetentionOffset` | refused | — | see `hitSlop` — GTK hit-tests the allocation and nothing around it |
317
+ | `testID` | property | `name` | — |
318
+ | `touchSoundDisabled` | ignored | — | an Android touch sound; a desktop button makes none |
319
+
320
+ ## `<TouchableHighlight>`
321
+
322
+ widget `GtkButton` · a text child writes `label`.
323
+
324
+ | prop | answer | GTK | why |
325
+ |---|---|---|---|
326
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
327
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
328
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
329
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
330
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
331
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
332
+ | `activeOpacity` | refused | — | sets the pressed appearance, which on GTK is the CSS `:active` pseudo-class rather than a prop (ADR 0032 § 7). Write `active:opacity-70` — it resolves through the same variant mechanism as every other utility, reads the project's own token scale, and GTK animates it with no re-render at all |
333
+ | `delayLongPress` | refused | — | see `onLongPress` |
334
+ | `delayPressIn` | refused | — | see `onPressIn` — there is no press-in event to delay |
335
+ | `delayPressOut` | refused | — | see `onPressIn` |
336
+ | `disabled` | property | `sensitive` | — |
337
+ | `hitSlop` | refused | — | GTK hit-tests the allocation and has no way to grow it past the widget. Pad the element (`p-*`), which enlarges the real target |
338
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
339
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
340
+ | `onHideUnderlay` | refused | — | see `underlayColor` |
341
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
342
+ | `onLongPress` | refused | — | a long press is a `Gtk.GestureLongPress` controller added to the widget, not a property or a signal on it, so it is not something this layer can route as data |
343
+ | `onPress` | event | `clicked` | — |
344
+ | `onPressIn` | refused | — | press state is the GTK CSS `:active` pseudo-class, not React state (ADR 0032 § 7) — write `active:opacity-70` and GTK animates it with no re-render at all |
345
+ | `onPressOut` | refused | — | see `onPressIn` — `active:` is the mechanism |
346
+ | `onShowUnderlay` | refused | — | see `underlayColor` — there is no underlay to show |
347
+ | `pointerEvents` | property | `can-target` | — |
348
+ | `pressRetentionOffset` | refused | — | see `hitSlop` — GTK hit-tests the allocation and nothing around it |
349
+ | `testID` | property | `name` | — |
350
+ | `touchSoundDisabled` | ignored | — | an Android touch sound; a desktop button makes none |
351
+ | `underlayColor` | refused | — | sets the pressed appearance, which on GTK is the CSS `:active` pseudo-class rather than a prop (ADR 0032 § 7). Write `active:bg-<token>` — it resolves through the same variant mechanism as every other utility, reads the project's own token scale, and GTK animates it with no re-render at all |
352
+
353
+ ## `<TouchableWithoutFeedback>`
354
+
355
+ widget `GtkBox` · takes no text child.
356
+
357
+ | prop | answer | GTK | why |
358
+ |---|---|---|---|
359
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
360
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
361
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
362
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
363
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
364
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
365
+ | `delayLongPress` | refused | — | see `onLongPress` |
366
+ | `delayPressIn` | refused | — | see `onPressIn` — there is no press-in event to delay |
367
+ | `delayPressOut` | refused | — | see `onPressIn` |
368
+ | `disabled` | property | `can-target` | — |
369
+ | `hitSlop` | refused | — | GTK hit-tests the allocation and has no way to grow it past the widget. Pad the element (`p-*`), which enlarges the real target |
370
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
371
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
372
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
373
+ | `onLongPress` | refused | — | a long press is a `Gtk.GestureLongPress` controller added to the widget, not a property or a signal on it, so it is not something this layer can route as data |
374
+ | `onPress` | gesture | `Gtk.GestureClick::released` | — |
375
+ | `onPressIn` | refused | — | press state is the GTK CSS `:active` pseudo-class, not React state (ADR 0032 § 7) — write `active:opacity-70` and GTK animates it with no re-render at all |
376
+ | `onPressOut` | refused | — | see `onPressIn` — `active:` is the mechanism |
377
+ | `pointerEvents` | property | `can-target` | — |
378
+ | `pressRetentionOffset` | refused | — | see `hitSlop` — GTK hit-tests the allocation and nothing around it |
379
+ | `testID` | property | `name` | — |
380
+ | `touchSoundDisabled` | ignored | — | an Android touch sound; a desktop button makes none |
381
+
382
+ ## `<Button>`
383
+
384
+ widget `GtkButton` · takes no text child.
385
+
386
+ | prop | answer | GTK | why |
387
+ |---|---|---|---|
388
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
389
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
390
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
391
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
392
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
393
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
394
+ | `color` | refused | — | is the button’s background on Android and its text colour on iOS — one prop, two meanings, and GTK has a third answer: `suggested-action` and `destructive-action` are Adwaita’s own classes for the two cases a colour is usually asking for. Set them from the application stylesheet, or use `<Pressable>` |
395
+ | `disabled` | property | `sensitive` | — |
396
+ | `hasTVPreferredFocus` | ignored | — | an Android TV focus hint |
397
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
398
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
399
+ | `nextFocusDown` | ignored | — | an Android TV focus hint |
400
+ | `nextFocusForward` | ignored | — | an Android TV focus hint |
401
+ | `nextFocusLeft` | ignored | — | an Android TV focus hint |
402
+ | `nextFocusRight` | ignored | — | an Android TV focus hint |
403
+ | `nextFocusUp` | ignored | — | an Android TV focus hint |
404
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
405
+ | `onPress` | event | `clicked` | — |
406
+ | `testID` | property | `name` | — |
407
+ | `title` | property | `label` | — |
408
+ | `touchSoundDisabled` | ignored | — | an Android touch sound; a desktop button makes none |
409
+
410
+ ## `<SafeAreaView>`
411
+
412
+ widget `GtkBox` · takes no text child.
413
+
414
+ | prop | answer | GTK | why |
415
+ |---|---|---|---|
416
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
417
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
418
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
419
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
420
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
421
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
422
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
423
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
424
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
425
+ | `pointerEvents` | property | `can-target` | — |
426
+ | `testID` | property | `name` | — |
427
+
428
+ ## `<Icon>`
429
+
430
+ widget `GtkImage` · takes no text child.
431
+
432
+ | prop | answer | GTK | why |
433
+ |---|---|---|---|
434
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
435
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
436
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
437
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
438
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
439
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
440
+ | `color` | style | `style: color` | — |
441
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
442
+ | `name` | property | `icon-name` | — |
443
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
444
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
445
+ | `size` | property | `pixel-size` | — |
446
+ | `testID` | property | `name` | — |
447
+
448
+ ## `<KeyboardAvoidingView>`
449
+
450
+ widget `GtkBox` · takes no text child.
451
+
452
+ | prop | answer | GTK | why |
453
+ |---|---|---|---|
454
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
455
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
456
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
457
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
458
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
459
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
460
+ | `behavior` | ignored | — | describes how to move out of an on-screen keyboard’s way, and none appears |
461
+ | `contentContainerStyle` | refused | — | styles the inner view React Native adds to do the avoiding, and there is no avoiding here — so there is no second node to style. Put it on `style`, which lands on the one box this element is |
462
+ | `enabled` | ignored | — | see `behavior` — the avoidance is already off |
463
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
464
+ | `keyboardVerticalOffset` | ignored | — | see `behavior` |
465
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
466
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
467
+ | `pointerEvents` | property | `can-target` | — |
468
+ | `testID` | property | `name` | — |
469
+
470
+ ## `<FlatList>`
471
+
472
+ widget `GtkBox` · children go into `GtkScrolledWindow` · takes no text child.
473
+
474
+ | prop | answer | GTK | why |
475
+ |---|---|---|---|
476
+ | `ItemSeparatorComponent` | refused | — | puts a widget BETWEEN rows, and a `Gtk.ListView` has no between — it has rows. `Gtk.ListView:show-separators` draws the Adwaita separator itself; set it through a ref, or give the row its own bottom border with `border-b` |
477
+ | `ListEmptyComponent` | ignored | — | rendered by the component instead of the scroller |
478
+ | `ListFooterComponent` | ignored | — | rendered by the component, after the scroller |
479
+ | `ListHeaderComponent` | ignored | — | rendered by the component, before the scroller |
480
+ | `accessibilityHint` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
481
+ | `accessibilityLabel` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
482
+ | `accessibilityLiveRegion` | refused | — | declares that a screen reader should speak this element when its CONTENT changes. GTK has the announcement — `Gtk.Accessible.announce(message, priority)` since 4.14 — but not the watch: it is an imperative call, and this element’s content is a SUBTREE, which GTK emits no signal for. `<Text>` answers this prop, because its content is one property (`Gtk.Label:label`) and so is both the moment and the message. Elsewhere, call `announce()` on the widget through a ref when you change the content |
483
+ | `accessibilityRole` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
484
+ | `accessibilityState` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
485
+ | `accessible` | refused | — | GTK carries accessibility through `Gtk.Accessible.update_property()`, an imperative call, not through a widget property — so there is nothing for this layer to set as data. `AccessibilityInfo` (tier P3) is the entry that owns this, and GTK’s model maps onto the props well once it exists |
486
+ | `columnWrapperStyle` | refused | — | see `numColumns` |
487
+ | `contentContainerStyle` | refused | — | styles the box React Native puts the rows in, and there is no such box: `Gtk.ListView` builds each row from the factory and owns the space between them. Style the row inside `renderItem`, or the list itself through `style` |
488
+ | `data` | ignored | — | read by the component, which drives the Gio.ListStore from it |
489
+ | `extraData` | ignored | — | read by the component; a change re-renders every bound row |
490
+ | `getItem` | ignored | — | read by the component — VirtualizedList’s accessor form of `data` |
491
+ | `getItemCount` | ignored | — | see `getItem` |
492
+ | `getItemLayout` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |
493
+ | `horizontal` | property | `orientation`, `hscrollbar-policy`, `vscrollbar-policy` | — |
494
+ | `id` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
495
+ | `initialNumToRender` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |
496
+ | `initialScrollIndex` | refused | — | scrolls to a row before the first paint. `Gtk.ListView.scroll_to(position, flags, scroll_info)` is the counterpart and it is an imperative call on a realised view, not a property — reach the view through a ref and call it |
497
+ | `inverted` | refused | — | draws the list bottom-up. GTK has no reversed list view; the honest equivalent is to reverse `data` yourself, which is one line and visible in the code |
498
+ | `keyExtractor` | ignored | — | read by the component, to key the model rows |
499
+ | `keyboardDismissMode` | ignored | — | see `keyboardShouldPersistTaps` |
500
+ | `keyboardShouldPersistTaps` | ignored | — | there is no on-screen keyboard to dismiss |
501
+ | `maxToRenderPerBatch` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |
502
+ | `nativeID` | refused | — | would write `Gtk.Widget:name`, and so does `testID`. Two props for one property is the silent-drop shape the host refuses by name (`signalTaken`), so this layer picks one: use `testID` |
503
+ | `numColumns` | refused | — | lays the rows out in a grid, and a `Gtk.ListView` is one column of rows by construction. `Gtk.GridView` is the widget that does this and it is a different tag with a different model contract, so it is a primitive of its own rather than a prop on this one |
504
+ | `onEndReached` | ignored | — | bound by the component to the scroller’s own Gtk.Adjustment |
505
+ | `onEndReachedThreshold` | ignored | — | see `onEndReached` |
506
+ | `onLayout` | refused | — | GTK reports its allocation through `Gtk.Widget.vfunc_size_allocate`, a SUBCLASS override rather than a signal, so there is no handler to bind. `useWindowDimensions` (tier P2) is the window-level answer |
507
+ | `onRefresh` | refused | — | is pull-to-refresh, which GTK has no idiom for and should not grow one — `RefreshControl` is `refused` in the support table for the same reason. Give the desktop build a refresh action in the header bar |
508
+ | `onRowError` | ignored | — | read by the component, and handed to each row’s own React root |
509
+ | `onScroll` | refused | — | GTK reports scroll position through the `Gtk.Adjustment` objects behind the scroller’s `hadjustment`/`vadjustment` — `notify::value` on an adjustment, not a signal on the widget. `onEndReached` is the one question this layer answers from it; reach the adjustment through a ref for the rest |
510
+ | `onViewableItemsChanged` | refused | — | reports which rows are on screen. `Gtk.ListView` binds and unbinds rows itself and exposes no viewport range — the closest fact is `Gtk.ListItem:position` inside the factory, which is per row rather than a set, so a faithful answer would be a guess assembled from bind order |
511
+ | `refreshControl` | refused | — | is pull-to-refresh, which GTK has no idiom for and should not grow one — `RefreshControl` is `refused` in the support table for the same reason. Give the desktop build a refresh action in the header bar |
512
+ | `refreshing` | refused | — | is pull-to-refresh, which GTK has no idiom for and should not grow one — `RefreshControl` is `refused` in the support table for the same reason. Give the desktop build a refresh action in the header bar |
513
+ | `removeClippedSubviews` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |
514
+ | `renderItem` | ignored | — | read by the item factory |
515
+ | `renderSectionHeader` | ignored | — | read by the item factory |
516
+ | `scrollEventThrottle` | refused | — | see `onScroll` |
517
+ | `sections` | ignored | — | read by the component — SectionList’s form of `data` |
518
+ | `showsHorizontalScrollIndicator` | property | `hscrollbar-policy` | — |
519
+ | `showsVerticalScrollIndicator` | property | `vscrollbar-policy` | — |
520
+ | `stickySectionHeadersEnabled` | refused | — | GTK’s own sticky headers are a `Gtk.ListView:header-factory` over a model that implements `Gtk.SectionModel` (MEASURED: `Gio.ListStore` does not, every selection model and `Gtk.FlattenListModel` do). This layer flattens the sections into one model with header ROWS instead, so a header scrolls with its section — which is what `stickySectionHeadersEnabled={false}` asks for and the only thing it can deliver |
521
+ | `testID` | property | `name` | — |
522
+ | `updateCellsBatchingPeriod` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |
523
+ | `viewabilityConfig` | refused | — | see `onViewableItemsChanged` |
524
+ | `viewabilityConfigCallbackPairs` | refused | — | see `onViewableItemsChanged` |
525
+ | `windowSize` | refused | — | tunes React Native’s own virtualisation, and `Gtk.ListView` does that job itself — it creates and recycles rows through the factory as the viewport moves (measured: 205 of 500 rows set up in a 400×300 window) and installs no property that changes the batching. There is nothing for this to set |