@symbiote-native/angular 0.8.0 → 2.0.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 (256) hide show
  1. package/README.md +13 -10
  2. package/babel-register-composed.cjs +58 -18
  3. package/bin/symbiote-angular-dev.cjs +16 -4
  4. package/build/angular/anchor-host-registry.js +1 -15
  5. package/build/angular/anchor-host-registry.js.map +1 -1
  6. package/build/angular/change-detection-flush.d.ts +31 -0
  7. package/build/angular/change-detection-flush.js +110 -0
  8. package/build/angular/change-detection-flush.js.map +1 -0
  9. package/build/angular/components/activity-indicator-props.d.ts +2 -0
  10. package/build/angular/components/activity-indicator-props.js +2 -0
  11. package/build/angular/components/activity-indicator-props.js.map +1 -0
  12. package/build/angular/components/button-props.d.ts +2 -0
  13. package/build/angular/components/button-props.js +2 -0
  14. package/build/angular/components/button-props.js.map +1 -0
  15. package/build/angular/components/flat-list/index.d.ts +2 -1
  16. package/build/angular/components/flat-list/index.js +22 -10
  17. package/build/angular/components/flat-list/index.js.map +1 -1
  18. package/build/angular/components/image-background-props.d.ts +6 -0
  19. package/build/angular/components/image-background-props.js +2 -0
  20. package/build/angular/components/image-background-props.js.map +1 -0
  21. package/build/angular/components/{image/shared.d.ts → image-shared.d.ts} +4 -4
  22. package/build/angular/components/{image/shared.js → image-shared.js} +39 -28
  23. package/build/angular/components/image-shared.js.map +1 -0
  24. package/build/angular/components/input-accessory-view-props.d.ts +7 -0
  25. package/build/angular/components/input-accessory-view-props.js +9 -0
  26. package/build/angular/components/input-accessory-view-props.js.map +1 -0
  27. package/build/angular/components/keyboard-avoiding-view/index.d.ts +2 -1
  28. package/build/angular/components/keyboard-avoiding-view/index.js +28 -27
  29. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  30. package/build/angular/components/modal/index.d.ts +2 -0
  31. package/build/angular/components/modal/index.js +33 -20
  32. package/build/angular/components/modal/index.js.map +1 -1
  33. package/build/angular/components/pressable-props.d.ts +32 -0
  34. package/build/angular/components/pressable-props.js +11 -0
  35. package/build/angular/components/pressable-props.js.map +1 -0
  36. package/build/angular/components/refresh-control-props.d.ts +16 -0
  37. package/build/angular/components/refresh-control-props.js +14 -0
  38. package/build/angular/components/refresh-control-props.js.map +1 -0
  39. package/build/angular/components/safe-area-view-props.d.ts +7 -0
  40. package/build/angular/components/safe-area-view-props.js +11 -0
  41. package/build/angular/components/safe-area-view-props.js.map +1 -0
  42. package/build/angular/components/scroll-view-props.d.ts +76 -0
  43. package/build/angular/components/scroll-view-props.js +18 -0
  44. package/build/angular/components/scroll-view-props.js.map +1 -0
  45. package/build/angular/components/section-list/index.d.ts +3 -0
  46. package/build/angular/components/section-list/index.js +10 -1
  47. package/build/angular/components/section-list/index.js.map +1 -1
  48. package/build/angular/components/text-input-props.d.ts +45 -0
  49. package/build/angular/components/text-input-props.js +18 -0
  50. package/build/angular/components/text-input-props.js.map +1 -0
  51. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.d.ts +6 -0
  52. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js +2 -0
  53. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js.map +1 -0
  54. package/build/angular/components/touchable-props.d.ts +14 -0
  55. package/build/angular/components/touchable-props.js +13 -0
  56. package/build/angular/components/touchable-props.js.map +1 -0
  57. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.d.ts +3 -0
  58. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js +2 -0
  59. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js.map +1 -0
  60. package/build/angular/components/virtualized-list/index.d.ts +8 -1
  61. package/build/angular/components/virtualized-list/index.js +373 -278
  62. package/build/angular/components/virtualized-list/index.js.map +1 -1
  63. package/build/angular/components/virtualized-section-list/index.d.ts +3 -0
  64. package/build/angular/components/virtualized-section-list/index.js +10 -1
  65. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  66. package/build/angular/components.d.ts +21 -27
  67. package/build/angular/components.js +13 -15
  68. package/build/angular/components.js.map +1 -1
  69. package/build/angular/create-portal/index.d.ts +11 -2
  70. package/build/angular/create-portal/index.js +37 -11
  71. package/build/angular/create-portal/index.js.map +1 -1
  72. package/build/angular/create-tunnel/index.js +1 -1
  73. package/build/angular/element-props.d.ts +53 -0
  74. package/build/angular/element-props.js +2 -0
  75. package/build/angular/element-props.js.map +1 -0
  76. package/build/angular/elements.d.ts +528 -0
  77. package/build/angular/elements.js +1444 -0
  78. package/build/angular/elements.js.map +1 -0
  79. package/build/angular/gate-demand.d.ts +37 -0
  80. package/build/angular/gate-demand.js +84 -0
  81. package/build/angular/gate-demand.js.map +1 -0
  82. package/build/angular/host-instance/index.js +1 -1
  83. package/build/angular/index.d.ts +5 -2
  84. package/build/angular/index.js +16 -1
  85. package/build/angular/index.js.map +1 -1
  86. package/build/angular/modules/animated/create-animated-component.d.ts +6 -6
  87. package/build/angular/modules/animated/create-animated-component.js +73 -81
  88. package/build/angular/modules/animated/create-animated-component.js.map +1 -1
  89. package/build/angular/modules/animated/index.js +1 -1
  90. package/build/angular/modules/animated/index.js.map +1 -1
  91. package/build/angular/modules/image/index.d.ts +3 -0
  92. package/build/angular/modules/image/index.js +16 -0
  93. package/build/angular/modules/image/index.js.map +1 -0
  94. package/build/angular/primitives/index.d.ts +28 -16
  95. package/build/angular/primitives/index.js +77 -31
  96. package/build/angular/primitives/index.js.map +1 -1
  97. package/build/angular/primitives/shared.d.ts +2 -3
  98. package/build/angular/primitives/shared.js +8 -53
  99. package/build/angular/primitives/shared.js.map +1 -1
  100. package/build/angular/register.d.ts +1 -0
  101. package/build/angular/register.js +16 -0
  102. package/build/angular/register.js.map +1 -0
  103. package/build/angular/render/index.js +4 -2
  104. package/build/angular/render/index.js.map +1 -1
  105. package/build/angular/renderer/index.js +207 -60
  106. package/build/angular/renderer/index.js.map +1 -1
  107. package/build/angular/renderer/value-change.d.ts +2 -0
  108. package/build/angular/renderer/value-change.js +9 -0
  109. package/build/angular/renderer/value-change.js.map +1 -0
  110. package/metro-config.cjs +23 -5
  111. package/metro-css-parser.cjs +2 -1
  112. package/package.json +17 -7
  113. package/src/anchor-host-registry.ts +1 -15
  114. package/src/change-detection-flush.ts +120 -0
  115. package/src/components/activity-indicator-props.ts +21 -0
  116. package/src/components/button-props.ts +26 -0
  117. package/src/components/flat-list/index.ts +12 -4
  118. package/src/components/image-background-props.ts +24 -0
  119. package/src/components/{image/shared.ts → image-shared.ts} +57 -26
  120. package/src/components/input-accessory-view-props.ts +21 -0
  121. package/src/components/keyboard-avoiding-view/index.ts +27 -16
  122. package/src/components/modal/index.ts +32 -11
  123. package/src/components/pressable-props.ts +73 -0
  124. package/src/components/refresh-control-props.ts +43 -0
  125. package/src/components/safe-area-view-props.ts +28 -0
  126. package/src/components/scroll-view-props.ts +109 -0
  127. package/src/components/section-list/index.ts +18 -0
  128. package/src/components/text-input-props.ts +72 -0
  129. package/src/components/touchable-native-feedback/touchable-native-feedback-props.ts +23 -0
  130. package/src/components/touchable-props.ts +30 -0
  131. package/src/components/touchable-without-feedback/touchable-without-feedback-props.ts +21 -0
  132. package/src/components/virtualized-list/index.ts +254 -153
  133. package/src/components/virtualized-section-list/index.ts +18 -0
  134. package/src/components.ts +86 -35
  135. package/src/create-portal/index.ts +39 -9
  136. package/src/create-tunnel/index.ts +1 -1
  137. package/src/diagnostics.ts +1 -1
  138. package/src/element-props.ts +90 -0
  139. package/src/elements.ts +919 -0
  140. package/src/gate-demand.ts +109 -0
  141. package/src/host-instance/index.ts +1 -1
  142. package/src/index.ts +54 -15
  143. package/src/modules/animated/create-animated-component.ts +73 -59
  144. package/src/modules/animated/index.ts +1 -1
  145. package/src/modules/image/index.ts +18 -0
  146. package/src/primitives/index.ts +47 -16
  147. package/src/primitives/shared.ts +11 -44
  148. package/src/register.ts +15 -0
  149. package/src/render/index.ts +4 -2
  150. package/src/renderer/index.ts +239 -80
  151. package/src/renderer/value-change.ts +8 -0
  152. package/build/angular/components/activity-indicator/index.android.d.ts +0 -13
  153. package/build/angular/components/activity-indicator/index.android.js +0 -29
  154. package/build/angular/components/activity-indicator/index.android.js.map +0 -1
  155. package/build/angular/components/activity-indicator/index.d.ts +0 -1
  156. package/build/angular/components/activity-indicator/index.ios.d.ts +0 -9
  157. package/build/angular/components/activity-indicator/index.ios.js +0 -26
  158. package/build/angular/components/activity-indicator/index.ios.js.map +0 -1
  159. package/build/angular/components/activity-indicator/index.js +0 -4
  160. package/build/angular/components/activity-indicator/index.js.map +0 -1
  161. package/build/angular/components/activity-indicator/shared.d.ts +0 -67
  162. package/build/angular/components/activity-indicator/shared.js +0 -260
  163. package/build/angular/components/activity-indicator/shared.js.map +0 -1
  164. package/build/angular/components/button.d.ts +0 -65
  165. package/build/angular/components/button.js +0 -351
  166. package/build/angular/components/button.js.map +0 -1
  167. package/build/angular/components/image/index.android.d.ts +0 -15
  168. package/build/angular/components/image/index.android.js +0 -91
  169. package/build/angular/components/image/index.android.js.map +0 -1
  170. package/build/angular/components/image/index.d.ts +0 -1
  171. package/build/angular/components/image/index.ios.d.ts +0 -15
  172. package/build/angular/components/image/index.ios.js +0 -91
  173. package/build/angular/components/image/index.ios.js.map +0 -1
  174. package/build/angular/components/image/index.js +0 -3
  175. package/build/angular/components/image/index.js.map +0 -1
  176. package/build/angular/components/image/shared.js.map +0 -1
  177. package/build/angular/components/image-background.d.ts +0 -82
  178. package/build/angular/components/image-background.js +0 -434
  179. package/build/angular/components/image-background.js.map +0 -1
  180. package/build/angular/components/input-accessory-view/index.d.ts +0 -65
  181. package/build/angular/components/input-accessory-view/index.js +0 -290
  182. package/build/angular/components/input-accessory-view/index.js.map +0 -1
  183. package/build/angular/components/pressable/index.d.ts +0 -129
  184. package/build/angular/components/pressable/index.js +0 -473
  185. package/build/angular/components/pressable/index.js.map +0 -1
  186. package/build/angular/components/refresh-control/index.d.ts +0 -90
  187. package/build/angular/components/refresh-control/index.js +0 -380
  188. package/build/angular/components/refresh-control/index.js.map +0 -1
  189. package/build/angular/components/safe-area-view/index.d.ts +0 -62
  190. package/build/angular/components/safe-area-view/index.js +0 -287
  191. package/build/angular/components/safe-area-view/index.js.map +0 -1
  192. package/build/angular/components/scroll-view/index.android.d.ts +0 -20
  193. package/build/angular/components/scroll-view/index.android.js +0 -262
  194. package/build/angular/components/scroll-view/index.android.js.map +0 -1
  195. package/build/angular/components/scroll-view/index.d.ts +0 -3
  196. package/build/angular/components/scroll-view/index.ios.d.ts +0 -8
  197. package/build/angular/components/scroll-view/index.ios.js +0 -92
  198. package/build/angular/components/scroll-view/index.ios.js.map +0 -1
  199. package/build/angular/components/scroll-view/index.js +0 -6
  200. package/build/angular/components/scroll-view/index.js.map +0 -1
  201. package/build/angular/components/scroll-view/projection.d.ts +0 -67
  202. package/build/angular/components/scroll-view/projection.js +0 -560
  203. package/build/angular/components/scroll-view/projection.js.map +0 -1
  204. package/build/angular/components/scroll-view/shared.d.ts +0 -239
  205. package/build/angular/components/scroll-view/shared.js +0 -832
  206. package/build/angular/components/scroll-view/shared.js.map +0 -1
  207. package/build/angular/components/scroll-view/sticky-header.d.ts +0 -40
  208. package/build/angular/components/scroll-view/sticky-header.js +0 -224
  209. package/build/angular/components/scroll-view/sticky-header.js.map +0 -1
  210. package/build/angular/components/switch/index.android.d.ts +0 -24
  211. package/build/angular/components/switch/index.android.js +0 -112
  212. package/build/angular/components/switch/index.android.js.map +0 -1
  213. package/build/angular/components/switch/index.d.ts +0 -1
  214. package/build/angular/components/switch/index.ios.d.ts +0 -23
  215. package/build/angular/components/switch/index.ios.js +0 -111
  216. package/build/angular/components/switch/index.ios.js.map +0 -1
  217. package/build/angular/components/switch/index.js +0 -4
  218. package/build/angular/components/switch/index.js.map +0 -1
  219. package/build/angular/components/switch/shared.d.ts +0 -49
  220. package/build/angular/components/switch/shared.js +0 -191
  221. package/build/angular/components/switch/shared.js.map +0 -1
  222. package/build/angular/components/text-input.d.ts +0 -161
  223. package/build/angular/components/text-input.js +0 -659
  224. package/build/angular/components/text-input.js.map +0 -1
  225. package/build/angular/components/touchable/index.d.ts +0 -276
  226. package/build/angular/components/touchable/index.js +0 -1422
  227. package/build/angular/components/touchable/index.js.map +0 -1
  228. package/build/angular/components/touchable-native-feedback/index.d.ts +0 -86
  229. package/build/angular/components/touchable-native-feedback/index.js +0 -407
  230. package/build/angular/components/touchable-native-feedback/index.js.map +0 -1
  231. package/src/components/activity-indicator/index.android.ts +0 -23
  232. package/src/components/activity-indicator/index.ios.ts +0 -21
  233. package/src/components/activity-indicator/index.ts +0 -4
  234. package/src/components/activity-indicator/shared.ts +0 -225
  235. package/src/components/button.ts +0 -220
  236. package/src/components/image/index.android.ts +0 -99
  237. package/src/components/image/index.ios.ts +0 -99
  238. package/src/components/image/index.ts +0 -3
  239. package/src/components/image-background.ts +0 -290
  240. package/src/components/input-accessory-view/index.ts +0 -240
  241. package/src/components/pressable/index.ts +0 -462
  242. package/src/components/refresh-control/index.ts +0 -340
  243. package/src/components/safe-area-view/index.ts +0 -231
  244. package/src/components/scroll-view/index.android.ts +0 -205
  245. package/src/components/scroll-view/index.ios.ts +0 -81
  246. package/src/components/scroll-view/index.ts +0 -7
  247. package/src/components/scroll-view/projection.ts +0 -713
  248. package/src/components/scroll-view/shared.ts +0 -1066
  249. package/src/components/scroll-view/sticky-header.ts +0 -267
  250. package/src/components/switch/index.android.ts +0 -113
  251. package/src/components/switch/index.ios.ts +0 -112
  252. package/src/components/switch/index.ts +0 -4
  253. package/src/components/switch/shared.ts +0 -284
  254. package/src/components/text-input.ts +0 -613
  255. package/src/components/touchable/index.ts +0 -913
  256. package/src/components/touchable-native-feedback/index.ts +0 -317
@@ -0,0 +1,43 @@
1
+ // The `<refresh-control>` tag's prop surface. The tag is matched by `RefreshControlElement`
2
+ // (`../elements`) and carries the controlled-spinner handshake as an engine behavior
3
+ // (`registerRefreshControlBehavior` — mirror what native last reported, command it back when the
4
+ // app's `refreshing` disagrees, RefreshControl.js:145-166), so the wrapper that ran that in Angular
5
+ // was deleted 2026-09-11.
6
+ //
7
+ // WHERE it goes is the ScrollView's decision, not this tag's: write it as an ordinary FIRST CHILD
8
+ // on both platforms and the scroll-view behavior re-parents it — iOS a sibling before the content
9
+ // container, Android the `AndroidSwipeRefreshLayout` WRAPPING the scroll view.
10
+ //
11
+ // The type stays for a component forwarding a bag, and because `IAngularRefreshControlProps` is
12
+ // public API.
13
+
14
+ import type {
15
+ IAccessibilityProps,
16
+ IAriaProps,
17
+ } from '@symbiote-native/components';
18
+ import type { IStyleProp, IViewStyle } from '@symbiote-native/engine';
19
+
20
+ export interface IAngularRefreshControlProps
21
+ extends IAccessibilityProps, IAriaProps {
22
+ refreshing: boolean;
23
+ // `id` — RN's W3C alias for `nativeID`, folded by the spec entry's ID_ALIAS.
24
+ id?: string;
25
+ // RN's onRefresh is `() => void | Promise<void>`, the handler may be async; the promise is
26
+ // fire-and-forget (native already starts refreshing on the gesture).
27
+ onRefresh?: () => void | Promise<void>;
28
+ tintColor?: string;
29
+ title?: string;
30
+ titleColor?: string;
31
+ progressViewOffset?: number;
32
+ // Android-only spinner styling (RN RefreshControlPropsAndroid): `colors` are the indicator's
33
+ // animated stroke colors, `progressBackgroundColor` the disc behind it, `size` the diameter
34
+ // preset. AndroidSwipeRefreshLayout reads them; PullToRefreshView on iOS ignores unknown props.
35
+ colors?: readonly string[];
36
+ progressBackgroundColor?: string;
37
+ size?: 'default' | 'large';
38
+ // Android-only native prop forwarded to AndroidSwipeRefreshLayout; iOS native never reads it.
39
+ enabled?: boolean;
40
+ // The Android scroll-view wrap injects the layout half of the style onto this host; iOS leaves it
41
+ // unset (the RefreshControl is a childless sibling). Harmless to forward on both.
42
+ style?: IStyleProp<IViewStyle>;
43
+ }
@@ -0,0 +1,28 @@
1
+ // The `<safe-area-view>` tag's prop surface. The tag is matched by `SafeAreaViewElement`
2
+ // (`../elements`) and commits a single `SafeAreaView` native view whose host insets its children to
3
+ // the safe area; there is no JS-side translation to do, so the wrapper that used to fold
4
+ // aria/role and forward a host bag was deleted 2026-09-10 — the engine's own aria fold and the
5
+ // renderer's `id` -> `nativeID` alias cover both, on every path.
6
+ //
7
+ // The type stays for a component forwarding a bag, and because `IAngularSafeAreaViewProps` is
8
+ // public API. Mirrors React's ISafeAreaViewProps minus children, which Angular takes via
9
+ // `<ng-content>`.
10
+
11
+ import type {
12
+ IAccessibilityProps,
13
+ IAriaProps,
14
+ } from '@symbiote-native/components';
15
+ import type {
16
+ IStyleProp,
17
+ ISymbioteEvent,
18
+ IViewStyle,
19
+ } from '@symbiote-native/engine';
20
+
21
+ export interface IAngularSafeAreaViewProps
22
+ extends IAccessibilityProps, IAriaProps {
23
+ style?: IStyleProp<IViewStyle>;
24
+ // `id` — accepted here and folded to `nativeID` by the renderer, matching upstream, whose
25
+ // SafeAreaView takes the full ViewProps surface.
26
+ id?: string;
27
+ onLayout?: (event: ISymbioteEvent) => void;
28
+ }
@@ -0,0 +1,109 @@
1
+ // The `<scroll-view>` / `<horizontal-scroll-view>` tag's prop surface — the axis is the TAG you
2
+ // write, not a `horizontal` binding, because Android resolves a different native class per axis.
3
+ //
4
+ // The wrapper was deleted 2026-09-11 and nothing replaced it in the adapter: the ENGINE owns the
5
+ // whole shape now (`core/components/src/behaviors/scroll-view/`). `buildStructure` builds the
6
+ // content node the children go under, `slotProps` routes `contentContainerStyle` onto it as its
7
+ // `style`, `payloadFold` composes the two base styles, and the sticky machinery pins by DOCUMENT
8
+ // ORDER through the `<sticky-header>` tag — so the Angular projection bridge that used to wrap
9
+ // projected children by index is gone with it, along with its renderer hooks.
10
+ //
11
+ // A `<refresh-control>` is an ordinary FIRST CHILD on both platforms; the behavior re-parents it
12
+ // per platform (iOS a sibling before the content, Android the swipe layout WRAPPING the scroll
13
+ // view), which is why the adapter no longer has an `.ios`/`.android` split here.
14
+ //
15
+ // The imperative surface comes from `buildScrollViewHandle` (`@symbiote-native/components`) over
16
+ // the node a template ref hands back.
17
+
18
+ import type {
19
+ IAccessibilityProps,
20
+ IAriaProps,
21
+ } from '@symbiote-native/components';
22
+ import type {
23
+ IStyleProp,
24
+ ISymbioteEvent,
25
+ IViewStyle,
26
+ } from '@symbiote-native/engine';
27
+
28
+ export type { IScrollViewHandle } from '@symbiote-native/components';
29
+
30
+ type IScrollHandler = (event: ISymbioteEvent) => void;
31
+ type IContentSizeHandler = (width: number, height: number) => void;
32
+
33
+ export interface IAngularScrollViewProps
34
+ extends IAccessibilityProps, IAriaProps {
35
+ style?: IStyleProp<IViewStyle>;
36
+ // A bare string resolves through the shared style registry, like `class` on the host node.
37
+ contentContainerStyle?: IStyleProp<IViewStyle> | string;
38
+ scrollEnabled?: boolean;
39
+ showsVerticalScrollIndicator?: boolean;
40
+ showsHorizontalScrollIndicator?: boolean;
41
+ pagingEnabled?: boolean;
42
+ bounces?: boolean;
43
+ decelerationRate?: 'normal' | 'fast' | number;
44
+ scrollEventThrottle?: number;
45
+ contentInset?: {
46
+ top?: number;
47
+ left?: number;
48
+ bottom?: number;
49
+ right?: number;
50
+ };
51
+ contentOffset?: { x: number; y: number };
52
+ removeClippedSubviews?: boolean;
53
+ snapToInterval?: number;
54
+ snapToOffsets?: number[];
55
+ snapToAlignment?: 'start' | 'center' | 'end';
56
+ snapToStart?: boolean;
57
+ snapToEnd?: boolean;
58
+ disableIntervalMomentum?: boolean;
59
+ // Sticky headers: RN implements stickiness PURELY IN JS — the native scroll view does not honor
60
+ // an index array. The engine's behavior resolves the indices against its own content children.
61
+ stickyHeaderIndices?: number[];
62
+ invertStickyHeaders?: boolean;
63
+ keyboardDismissMode?: 'none' | 'on-drag' | 'interactive';
64
+ keyboardShouldPersistTaps?: boolean | 'always' | 'never' | 'handled';
65
+ maintainVisibleContentPosition?: {
66
+ minIndexForVisible: number;
67
+ autoscrollToTopThreshold?: number;
68
+ };
69
+ // iOS-only forwarding props (harmless on Android: its manager ignores unknown props).
70
+ alwaysBounceHorizontal?: boolean;
71
+ alwaysBounceVertical?: boolean;
72
+ centerContent?: boolean;
73
+ scrollIndicatorInsets?: {
74
+ top?: number;
75
+ left?: number;
76
+ bottom?: number;
77
+ right?: number;
78
+ };
79
+ indicatorStyle?: 'default' | 'black' | 'white';
80
+ directionalLockEnabled?: boolean;
81
+ automaticallyAdjustKeyboardInsets?: boolean;
82
+ contentInsetAdjustmentBehavior?:
83
+ 'automatic' | 'scrollableAxes' | 'never' | 'always';
84
+ minimumZoomScale?: number;
85
+ maximumZoomScale?: number;
86
+ zoomScale?: number;
87
+ bouncesZoom?: boolean;
88
+ pinchGestureEnabled?: boolean;
89
+ // Android-only forwarding props (harmless on iOS).
90
+ nestedScrollEnabled?: boolean;
91
+ overScrollMode?: 'auto' | 'always' | 'never';
92
+ fadingEdgeLength?: number;
93
+ persistentScrollbar?: boolean;
94
+ endFillColor?: string;
95
+ onLayout?: IScrollHandler;
96
+ onScroll?: IScrollHandler;
97
+ onScrollBeginDrag?: IScrollHandler;
98
+ onScrollEndDrag?: IScrollHandler;
99
+ onMomentumScrollBegin?: IScrollHandler;
100
+ onMomentumScrollEnd?: IScrollHandler;
101
+ // iOS-only: user tapped the status bar to scroll to top. Inert on Android.
102
+ onScrollToTop?: IScrollHandler;
103
+ // Synthesized in JS from the content view's onLayout (RN _handleContentOnLayout); deduped.
104
+ onContentSizeChange?: IContentSizeHandler;
105
+ onAccessibilityAction?: (event: ISymbioteEvent) => void;
106
+ onAccessibilityTap?: (event: ISymbioteEvent) => void;
107
+ onMagicTap?: (event: ISymbioteEvent) => void;
108
+ onAccessibilityEscape?: (event: ISymbioteEvent) => void;
109
+ }
@@ -100,6 +100,13 @@ export {
100
100
  VListHeaderDirective,
101
101
  VListSeparatorDirective,
102
102
  } from '../virtualized-list';
103
+ import {
104
+ gateWanted,
105
+ injectGateDemandAbove,
106
+ provideGateDemand,
107
+ type IGateDemand,
108
+ type IGatedAccessibilityEvent,
109
+ } from '../../gate-demand';
103
110
 
104
111
  // SectionList's public surface is exactly VirtualizedSectionList's (RN layers them one-for-one), so
105
112
  // the prop type is shared verbatim — no SectionList-only field exists.
@@ -123,6 +130,7 @@ export type ISectionListInputs<ItemT> = Omit<
123
130
  @Component({
124
131
  selector: 'SectionList',
125
132
  standalone: true,
133
+ viewProviders: [provideGateDemand(() => SectionList)],
126
134
  hostDirectives: [
127
135
  { directive: SymbioteStyleInputDirective, inputs: ['style'] },
128
136
  ],
@@ -381,6 +389,16 @@ export class SectionList<ItemT = unknown>
381
389
  @Output() readonly accessibilityTap = new EventEmitter<ISymbioteEvent>();
382
390
  @Output() readonly magicTap = new EventEmitter<ISymbioteEvent>();
383
391
  @Output() readonly accessibilityEscape = new EventEmitter<ISymbioteEvent>();
392
+
393
+ // This wrapper binds the four gated accessibility events on the component it renders, which
394
+ // Angular forces to be unconditional and which would light that component's gates on every
395
+ // instance. It answers for them instead — see `gate-demand.ts`.
396
+ private readonly gateDemandAbove = injectGateDemandAbove();
397
+
398
+ wantsGate(name: IGatedAccessibilityEvent): boolean {
399
+ return gateWanted(this.gateDemandAbove, name, this[name]);
400
+ }
401
+
384
402
  @Input() role?: IAriaProps['role'];
385
403
  @Input() ariaLabel?: string;
386
404
  @Input() ariaLabelledBy?: string;
@@ -0,0 +1,72 @@
1
+ // The `<text-input>` / `<text-input-multiline>` tag's prop surface. The tags are matched by
2
+ // `TextInputElement` / `MultilineTextInputElement` (`../elements`) and carry the controlled-input
3
+ // machine as an engine behavior (`registerTextInputBehavior`), so the wrapper that used to run the
4
+ // handshake, the imperative handle and the autoFocus command in Angular was deleted 2026-09-11.
5
+ //
6
+ // Which of the two intrinsics a `<text-input multiline>` commits is the ENGINE's decision
7
+ // (`intrinsicWhen` on the spec entry), not a template branch — the wrapper's `@if`/`@else` over two
8
+ // hand-picked hosts is what that replaces.
9
+ //
10
+ // The imperative surface (`focus` / `blur` / `clear` / `isFocused` / `setSelection`) comes from the
11
+ // engine node itself, reached through a template ref, the same way every other adapter reaches it.
12
+ // `[(ngModel)]` / `formControl*` is `TextInputValueAccessor` (`../elements`), which is where the
13
+ // wrapper's `NG_VALUE_ACCESSOR` went.
14
+ //
15
+ // The type stays for a component forwarding a bag, and because `IAngularTextInputProps` is public
16
+ // API.
17
+
18
+ import type {
19
+ IAccessibilityProps,
20
+ IAriaProps,
21
+ IEnterKeyHint,
22
+ IInputMode,
23
+ ISubmitBehavior,
24
+ ITextInputEventHandler,
25
+ ITextInputSelection,
26
+ } from '@symbiote-native/components';
27
+ import type { IStyleProp, ITextStyle } from '@symbiote-native/engine';
28
+
29
+ export interface IAngularTextInputProps
30
+ extends IAccessibilityProps, IAriaProps {
31
+ value?: string;
32
+ defaultValue?: string;
33
+ placeholder?: string;
34
+ placeholderTextColor?: string;
35
+ editable?: boolean;
36
+ keyboardType?: string;
37
+ secureTextEntry?: boolean;
38
+ maxLength?: number;
39
+ multiline?: boolean;
40
+ selection?: ITextInputSelection;
41
+ autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';
42
+ autoCorrect?: boolean;
43
+ autoComplete?: string;
44
+ textContentType?: string;
45
+ autoFocus?: boolean;
46
+ showSoftInputOnFocus?: boolean;
47
+ returnKeyType?: string;
48
+ selectTextOnFocus?: boolean;
49
+ scrollEnabled?: boolean;
50
+ numberOfLines?: number;
51
+ textAlign?: 'left' | 'center' | 'right';
52
+ blurOnSubmit?: boolean;
53
+ inputMode?: IInputMode;
54
+ enterKeyHint?: IEnterKeyHint;
55
+ readOnly?: boolean;
56
+ submitBehavior?: ISubmitBehavior;
57
+ cursorColor?: string;
58
+ selectionColor?: string;
59
+ selectionHandleColor?: string;
60
+ underlineColorAndroid?: string;
61
+ inputAccessoryViewID?: string;
62
+ style?: IStyleProp<ITextStyle>;
63
+ onValueChange?: (text: string) => void;
64
+ onChange?: ITextInputEventHandler;
65
+ onFocus?: ITextInputEventHandler;
66
+ onBlur?: ITextInputEventHandler;
67
+ onEndEditing?: ITextInputEventHandler;
68
+ onSubmitEditing?: ITextInputEventHandler;
69
+ onKeyPress?: ITextInputEventHandler;
70
+ onSelectionChange?: ITextInputEventHandler;
71
+ onContentSizeChange?: ITextInputEventHandler;
72
+ }
@@ -0,0 +1,23 @@
1
+ // The prop surface of `<touchable-native-feedback>`, for Angular.
2
+ //
3
+ // No component left to type — the element IS the tag, matched by `TouchableNativeFeedbackElement`
4
+ // (`../../elements.ts`), and RN's own TNF renders nothing (TouchableNativeFeedback.js:289,339); the
5
+ // engine behavior clones these props onto the single child. This stays exported because an app that
6
+ // wraps the tag in its own component types the bag it forwards against something.
7
+ //
8
+ // Declared here rather than shared, over the Angular Pressable INPUT surface: children arrive
9
+ // through content projection, not as a prop, which is the split
10
+ // <prop_types_split_agnostic_vs_per_adapter> describes. `style` is absent because RN's TNF declares
11
+ // none — the drawable is the whole visual, and a `style` on this tag would sit on a node that never
12
+ // commits.
13
+ import type { INativeFeedbackBackground } from '@symbiote-native/components';
14
+
15
+ import type { IAngularPressableInputs } from '../pressable-props';
16
+
17
+ export type IAngularTouchableNativeFeedbackProps = Omit<
18
+ IAngularPressableInputs,
19
+ 'style'
20
+ > & {
21
+ background?: INativeFeedbackBackground;
22
+ useForeground?: boolean;
23
+ };
@@ -0,0 +1,30 @@
1
+ // The prop surfaces of `<touchable-opacity>` and `<touchable-highlight>`, for Angular.
2
+ //
3
+ // No components left to type — the elements ARE the tags, matched by `TouchableOpacityElement` and
4
+ // `TouchableHighlightElement` (`../elements`), and both machines run on the engine node
5
+ // (`registerTouchableOpacityBehavior` / `registerTouchableHighlightBehavior`): the opacity fade is
6
+ // an engine-side style layer over the responder, and the underlay swap is the same `activeStyle`
7
+ // channel a `:active` rule uses. The wrappers that ran those in Angular were deleted 2026-09-11.
8
+ //
9
+ // Declared per-adapter over the Angular Pressable INPUT surface, since children arrive through
10
+ // content projection rather than as a field — the split
11
+ // <prop_types_split_agnostic_vs_per_adapter> describes. Mirrors React/Vue's ITouchableBaseProps.
12
+
13
+ import type { IPressTimingProps } from '@symbiote-native/components';
14
+ import type { IStyleProp, IViewStyle } from '@symbiote-native/engine';
15
+
16
+ import type { IAngularPressableInputs } from './pressable-props';
17
+
18
+ type IAngularTouchableBaseProps = Omit<IAngularPressableInputs, 'style'> &
19
+ IPressTimingProps & {
20
+ style?: IStyleProp<IViewStyle>;
21
+ };
22
+
23
+ export type IAngularTouchableOpacityProps = IAngularTouchableBaseProps & {
24
+ activeOpacity?: number;
25
+ };
26
+
27
+ export type IAngularTouchableHighlightProps = IAngularTouchableBaseProps & {
28
+ activeOpacity?: number;
29
+ underlayColor?: string;
30
+ };
@@ -0,0 +1,21 @@
1
+ // The prop surface of `<touchable-without-feedback>`, for Angular.
2
+ //
3
+ // No component left to type — the element IS the tag, matched by `TouchableWithoutFeedbackElement`
4
+ // (`../../elements.ts`), and RN's own TWF renders nothing (TouchableWithoutFeedback.js:229,286); the
5
+ // engine behavior clones these props onto the single child. This stays exported because an app that
6
+ // wraps the tag in its own component types the bag it forwards against something.
7
+ //
8
+ // Declared here rather than shared, over the Angular Pressable INPUT surface: children arrive
9
+ // through content projection, not as a prop, which is the split
10
+ // <prop_types_split_agnostic_vs_per_adapter> describes. `style` is absent because RN's TWF never
11
+ // clones it — the prop is declared upstream (:122, tagged "FIXME: not in doc") and left out of
12
+ // `elementProps`, so on the tag it would sit on a node that never commits.
13
+ import type { IPressTimingProps } from '@symbiote-native/components';
14
+
15
+ import type { IAngularPressableInputs } from '../pressable-props';
16
+
17
+ export type IAngularTouchableWithoutFeedbackProps = Omit<
18
+ IAngularPressableInputs,
19
+ 'style'
20
+ > &
21
+ IPressTimingProps;