@symbiote-native/angular 3.2.0 → 3.4.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 (207) hide show
  1. package/babel-register-composed.cjs +2 -0
  2. package/build/angular/accessibility-inputs.d.ts +2 -1
  3. package/build/angular/accessibility-inputs.js +4 -1
  4. package/build/angular/accessibility-inputs.js.map +1 -1
  5. package/build/angular/callback-host.d.ts +1 -1
  6. package/build/angular/callback-host.js +57 -9
  7. package/build/angular/callback-host.js.map +1 -1
  8. package/build/angular/components/checkbox-props.d.ts +2 -0
  9. package/build/angular/components/checkbox-props.js +2 -0
  10. package/build/angular/components/checkbox-props.js.map +1 -0
  11. package/build/angular/components/flat-list/flat-list-handle.d.ts +35 -0
  12. package/build/angular/components/flat-list/flat-list-handle.js +48 -0
  13. package/build/angular/components/flat-list/flat-list-handle.js.map +1 -0
  14. package/build/angular/components/flat-list/flat-list-template.d.ts +1 -1
  15. package/build/angular/components/flat-list/flat-list-template.js +16 -0
  16. package/build/angular/components/flat-list/flat-list-template.js.map +1 -1
  17. package/build/angular/components/flat-list/index.d.ts +6 -30
  18. package/build/angular/components/flat-list/index.js +6 -36
  19. package/build/angular/components/flat-list/index.js.map +1 -1
  20. package/build/angular/components/image-inputs.d.ts +4 -0
  21. package/build/angular/components/image-inputs.js +81 -0
  22. package/build/angular/components/image-inputs.js.map +1 -0
  23. package/build/angular/components/image-props-resolve.d.ts +3 -0
  24. package/build/angular/components/image-props-resolve.js +133 -0
  25. package/build/angular/components/image-props-resolve.js.map +1 -0
  26. package/build/angular/components/image-shared.d.ts +8 -6
  27. package/build/angular/components/image-shared.js +23 -212
  28. package/build/angular/components/image-shared.js.map +1 -1
  29. package/build/angular/components/input-accessory-view-props.d.ts +4 -4
  30. package/build/angular/components/keyboard-avoiding-view/index.d.ts +3 -6
  31. package/build/angular/components/keyboard-avoiding-view/index.js +29 -56
  32. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  33. package/build/angular/components/layout-conformance-props.d.ts +4 -0
  34. package/build/angular/components/layout-conformance-props.js +2 -0
  35. package/build/angular/components/layout-conformance-props.js.map +1 -0
  36. package/build/angular/components/modal/index.d.ts +6 -5
  37. package/build/angular/components/modal/index.js +17 -2
  38. package/build/angular/components/modal/index.js.map +1 -1
  39. package/build/angular/components/refresh-control-props.d.ts +7 -7
  40. package/build/angular/components/scroll-view-props.d.ts +8 -5
  41. package/build/angular/components/section-list/index.d.ts +17 -8
  42. package/build/angular/components/section-list/index.js +37 -28
  43. package/build/angular/components/section-list/index.js.map +1 -1
  44. package/build/angular/components/touchable-props.d.ts +2 -2
  45. package/build/angular/components/virtualized-list/cell-renderer-context.d.ts +12 -0
  46. package/build/angular/components/virtualized-list/cell-renderer-context.js +16 -0
  47. package/build/angular/components/virtualized-list/cell-renderer-context.js.map +1 -0
  48. package/build/angular/components/virtualized-list/directives.d.ts +26 -6
  49. package/build/angular/components/virtualized-list/directives.js +59 -5
  50. package/build/angular/components/virtualized-list/directives.js.map +1 -1
  51. package/build/angular/components/virtualized-list/index.d.ts +19 -15
  52. package/build/angular/components/virtualized-list/index.js +91 -61
  53. package/build/angular/components/virtualized-list/index.js.map +1 -1
  54. package/build/angular/components/virtualized-list/list-bags.d.ts +5 -1
  55. package/build/angular/components/virtualized-list/list-bags.js +31 -19
  56. package/build/angular/components/virtualized-list/list-bags.js.map +1 -1
  57. package/build/angular/components/virtualized-list/list-effects.d.ts +2 -2
  58. package/build/angular/components/virtualized-list/list-effects.js +17 -27
  59. package/build/angular/components/virtualized-list/list-effects.js.map +1 -1
  60. package/build/angular/components/virtualized-list/list-handle.d.ts +4 -1
  61. package/build/angular/components/virtualized-list/list-handle.js +13 -3
  62. package/build/angular/components/virtualized-list/list-handle.js.map +1 -1
  63. package/build/angular/components/virtualized-list/list-inputs.d.ts +19 -5
  64. package/build/angular/components/virtualized-list/list-inputs.js +47 -4
  65. package/build/angular/components/virtualized-list/list-inputs.js.map +1 -1
  66. package/build/angular/components/virtualized-list/list-props.d.ts +9 -3
  67. package/build/angular/components/virtualized-list/list-rows.d.ts +25 -0
  68. package/build/angular/components/virtualized-list/list-rows.js +25 -0
  69. package/build/angular/components/virtualized-list/list-rows.js.map +1 -0
  70. package/build/angular/components/virtualized-list/list-styles.d.ts +4 -0
  71. package/build/angular/components/virtualized-list/list-styles.js +10 -2
  72. package/build/angular/components/virtualized-list/list-styles.js.map +1 -1
  73. package/build/angular/components/virtualized-list/list-template.d.ts +1 -1
  74. package/build/angular/components/virtualized-list/list-template.js +159 -73
  75. package/build/angular/components/virtualized-list/list-template.js.map +1 -1
  76. package/build/angular/components/virtualized-list/nested-scope.d.ts +6 -0
  77. package/build/angular/components/virtualized-list/nested-scope.js +17 -0
  78. package/build/angular/components/virtualized-list/nested-scope.js.map +1 -0
  79. package/build/angular/components/virtualized-section-list/directives.d.ts +21 -9
  80. package/build/angular/components/virtualized-section-list/directives.js +8 -28
  81. package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
  82. package/build/angular/components/virtualized-section-list/index.d.ts +39 -60
  83. package/build/angular/components/virtualized-section-list/index.js +67 -33
  84. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  85. package/build/angular/components/virtualized-section-list/section-cell.d.ts +29 -0
  86. package/build/angular/components/virtualized-section-list/section-cell.js +82 -0
  87. package/build/angular/components/virtualized-section-list/section-cell.js.map +1 -0
  88. package/build/angular/components/virtualized-section-list/section-list-props.d.ts +56 -0
  89. package/build/angular/components/virtualized-section-list/section-list-props.js +3 -0
  90. package/build/angular/components/virtualized-section-list/section-list-props.js.map +1 -0
  91. package/build/angular/components/virtualized-section-list/section-list-template.d.ts +1 -1
  92. package/build/angular/components/virtualized-section-list/section-list-template.js +34 -26
  93. package/build/angular/components/virtualized-section-list/section-list-template.js.map +1 -1
  94. package/build/angular/components.d.ts +8 -3
  95. package/build/angular/components.js +2 -1
  96. package/build/angular/components.js.map +1 -1
  97. package/build/angular/descriptor-to-angular/descriptor-host.d.ts +8 -0
  98. package/build/angular/descriptor-to-angular/descriptor-host.js +38 -0
  99. package/build/angular/descriptor-to-angular/descriptor-host.js.map +1 -0
  100. package/build/angular/descriptor-to-angular/index.d.ts +1 -0
  101. package/build/angular/descriptor-to-angular/index.js +4 -0
  102. package/build/angular/descriptor-to-angular/index.js.map +1 -1
  103. package/build/angular/element-base.d.ts +169 -0
  104. package/build/angular/element-base.js +304 -0
  105. package/build/angular/element-base.js.map +1 -0
  106. package/build/angular/element-props.d.ts +7 -7
  107. package/build/angular/element-text-input-native.d.ts +27 -0
  108. package/build/angular/element-text-input-native.js +52 -0
  109. package/build/angular/element-text-input-native.js.map +1 -0
  110. package/build/angular/elements-controls.d.ts +171 -0
  111. package/build/angular/elements-controls.js +394 -0
  112. package/build/angular/elements-controls.js.map +1 -0
  113. package/build/angular/elements-layout.d.ts +139 -0
  114. package/build/angular/elements-layout.js +276 -0
  115. package/build/angular/elements-layout.js.map +1 -0
  116. package/build/angular/elements-press.d.ts +103 -0
  117. package/build/angular/elements-press.js +239 -0
  118. package/build/angular/elements-press.js.map +1 -0
  119. package/build/angular/elements.d.ts +6 -516
  120. package/build/angular/elements.js +9 -1091
  121. package/build/angular/elements.js.map +1 -1
  122. package/build/angular/host-instance/index.d.ts +2 -0
  123. package/build/angular/host-instance/index.js +4 -4
  124. package/build/angular/host-instance/index.js.map +1 -1
  125. package/build/angular/index.d.ts +17 -9
  126. package/build/angular/index.js +24 -27
  127. package/build/angular/index.js.map +1 -1
  128. package/build/angular/modules/animated/create-animated-component.d.ts +1 -1
  129. package/build/angular/modules/animated/create-animated-component.js +1 -1
  130. package/build/angular/modules/animated/create-animated-component.js.map +1 -1
  131. package/build/angular/modules/animated/index.d.ts +54 -41
  132. package/build/angular/modules/animated/index.js +2 -26
  133. package/build/angular/modules/animated/index.js.map +1 -1
  134. package/build/angular/modules/app-registry/index.d.ts +3 -3
  135. package/build/angular/modules/app-registry/index.js +2 -2
  136. package/build/angular/modules/app-registry/index.js.map +1 -1
  137. package/build/angular/modules/status-bar/index.d.ts +9 -5
  138. package/build/angular/modules/status-bar/index.js +21 -10
  139. package/build/angular/modules/status-bar/index.js.map +1 -1
  140. package/build/angular/native-view-base.d.ts +10 -2
  141. package/build/angular/native-view-base.js +23 -2
  142. package/build/angular/native-view-base.js.map +1 -1
  143. package/build/angular/primitives/index.d.ts +4 -0
  144. package/build/angular/primitives/index.js +12 -0
  145. package/build/angular/primitives/index.js.map +1 -1
  146. package/build/angular/services/color-scheme.service.d.ts +1 -1
  147. package/build/angular/services/index.d.ts +1 -0
  148. package/build/angular/services/index.js +1 -0
  149. package/build/angular/services/index.js.map +1 -1
  150. package/build/angular/services/inject-event.d.ts +6 -0
  151. package/build/angular/services/inject-event.js +24 -0
  152. package/build/angular/services/inject-event.js.map +1 -0
  153. package/package.json +6 -6
  154. package/src/accessibility-inputs.ts +3 -0
  155. package/src/callback-host.ts +56 -8
  156. package/src/components/checkbox-props.ts +12 -0
  157. package/src/components/flat-list/flat-list-handle.ts +64 -0
  158. package/src/components/flat-list/flat-list-template.ts +16 -0
  159. package/src/components/flat-list/index.ts +6 -48
  160. package/src/components/image-inputs.ts +94 -0
  161. package/src/components/image-props-resolve.ts +172 -0
  162. package/src/components/image-shared.ts +26 -291
  163. package/src/components/input-accessory-view-props.ts +12 -8
  164. package/src/components/keyboard-avoiding-view/index.ts +39 -79
  165. package/src/components/layout-conformance-props.ts +8 -0
  166. package/src/components/modal/index.ts +42 -20
  167. package/src/components/refresh-control-props.ts +29 -25
  168. package/src/components/scroll-view-props.ts +84 -76
  169. package/src/components/section-list/index.ts +34 -37
  170. package/src/components/touchable-props.ts +6 -2
  171. package/src/components/virtualized-list/cell-renderer-context.ts +36 -0
  172. package/src/components/virtualized-list/directives.ts +84 -8
  173. package/src/components/virtualized-list/index.ts +118 -85
  174. package/src/components/virtualized-list/list-bags.ts +38 -19
  175. package/src/components/virtualized-list/list-effects.ts +20 -32
  176. package/src/components/virtualized-list/list-handle.ts +17 -4
  177. package/src/components/virtualized-list/list-inputs.ts +47 -0
  178. package/src/components/virtualized-list/list-props.ts +57 -50
  179. package/src/components/virtualized-list/list-rows.ts +66 -0
  180. package/src/components/virtualized-list/list-styles.ts +30 -1
  181. package/src/components/virtualized-list/list-template.ts +159 -73
  182. package/src/components/virtualized-list/nested-scope.ts +22 -0
  183. package/src/components/virtualized-section-list/directives.ts +41 -40
  184. package/src/components/virtualized-section-list/index.ts +114 -118
  185. package/src/components/virtualized-section-list/section-cell.ts +109 -0
  186. package/src/components/virtualized-section-list/section-list-props.ts +79 -0
  187. package/src/components/virtualized-section-list/section-list-template.ts +34 -26
  188. package/src/components.ts +9 -0
  189. package/src/descriptor-to-angular/descriptor-host.ts +27 -0
  190. package/src/descriptor-to-angular/index.ts +5 -0
  191. package/src/element-base.ts +289 -0
  192. package/src/element-props.ts +35 -33
  193. package/src/element-text-input-native.ts +31 -0
  194. package/src/elements-controls.ts +290 -0
  195. package/src/elements-layout.ts +168 -0
  196. package/src/elements-press.ts +153 -0
  197. package/src/elements.ts +76 -788
  198. package/src/host-instance/index.ts +4 -4
  199. package/src/index.ts +78 -23
  200. package/src/modules/animated/index.ts +2 -47
  201. package/src/modules/app-registry/index.ts +3 -1
  202. package/src/modules/status-bar/index.ts +24 -11
  203. package/src/native-view-base.ts +37 -2
  204. package/src/primitives/index.ts +7 -0
  205. package/src/services/color-scheme.service.ts +1 -1
  206. package/src/services/index.ts +1 -0
  207. package/src/services/inject-event.ts +52 -0
@@ -32,1099 +32,14 @@
32
32
  // (`[onPressMove]="fn"`, where `fn` keeps its `ISymbioteEvent` parameter).
33
33
  //
34
34
  // `valueChange` is the ONE exception, and it is forced rather than chosen: see ValueChangeElement.
35
- import { ChangeDetectorRef, Directive, ElementRef, ErrorHandler, EventEmitter, Input, Output, Renderer2, forwardRef, inject, } from '@angular/core';
36
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
37
- import { VALUE_CHANGE_EVENT } from './renderer/value-change';
38
- import { registerViewFlush, unregisterViewFlush, } from './change-detection-flush';
39
35
  import { SymbioteCallbackHost } from './callback-host';
40
36
  import { withholdFromRuntimeMatching } from './runtime-matching';
41
- import * as i0 from "@angular/core";
42
- /**
43
- * The shared half of every element directive: the prop surface all tags accept, and the ONE
44
- * generic forward that puts a claimed binding back on the engine node.
45
- *
46
- * The forward is the deciding fact of this whole route. A binding claimed by a directive input
47
- * never reaches `Renderer2.setProperty` on its own — Angular writes it to the directive instance
48
- * — so without this loop a bare tag commits nothing at all. It stays generic on purpose: per-prop
49
- * forwarding code is a component wrapper by another name, which is what this migration removes.
50
- * `renderer.setProperty` lands in the adapter's own renderer, which routes the value through the
51
- * engine's `routeProp` and applies the `id` -> `nativeID` alias.
52
- */
53
- export class SymbioteElement {
54
- constructor() {
55
- this.renderer = inject(Renderer2);
56
- this.host = inject(ElementRef);
57
- }
58
- ngOnChanges(changes) {
59
- for (const name of Object.keys(changes)) {
60
- this.renderer.setProperty(this.host.nativeElement, name,
61
- // Unwrapped on purpose: `SymbioteRenderer.setProperty` is where an `on*` value is wrapped
62
- // now, and it is the call this line makes.
63
- changes[name]?.currentValue);
64
- }
65
- }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
67
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SymbioteElement, isStandalone: true, inputs: { testID: "testID", nativeID: "nativeID", id: "id", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", onAccessibilityAction: "onAccessibilityAction", onAccessibilityTap: "onAccessibilityTap", onMagicTap: "onMagicTap", onAccessibilityEscape: "onAccessibilityEscape", role: "role", "aria-label": "aria-label", "aria-labelledby": "aria-labelledby", "aria-live": "aria-live", "aria-hidden": "aria-hidden", "aria-busy": "aria-busy", "aria-checked": "aria-checked", "aria-disabled": "aria-disabled", "aria-expanded": "aria-expanded", "aria-selected": "aria-selected", "aria-modal": "aria-modal", "aria-valuemax": "aria-valuemax", "aria-valuemin": "aria-valuemin", "aria-valuenow": "aria-valuenow", "aria-valuetext": "aria-valuetext", onStartShouldSetResponder: "onStartShouldSetResponder", onStartShouldSetResponderCapture: "onStartShouldSetResponderCapture", onMoveShouldSetResponder: "onMoveShouldSetResponder", onMoveShouldSetResponderCapture: "onMoveShouldSetResponderCapture", onResponderGrant: "onResponderGrant", onResponderReject: "onResponderReject", onResponderStart: "onResponderStart", onResponderMove: "onResponderMove", onResponderEnd: "onResponderEnd", onResponderRelease: "onResponderRelease", onResponderTerminate: "onResponderTerminate", onResponderTerminationRequest: "onResponderTerminationRequest", pointerEvents: "pointerEvents", hitSlop: "hitSlop", focusable: "focusable", collapsable: "collapsable", removeClippedSubviews: "removeClippedSubviews", renderToHardwareTextureAndroid: "renderToHardwareTextureAndroid", shouldRasterizeIOS: "shouldRasterizeIOS", needsOffscreenAlphaCompositing: "needsOffscreenAlphaCompositing", style: "style", styleProp: "styleProp", class: "class", onPress: "onPress", onPressIn: "onPressIn", onPressOut: "onPressOut", onPressMove: "onPressMove", onLongPress: "onLongPress", onLayout: "onLayout", onFocus: "onFocus", onBlur: "onBlur" }, usesOnChanges: true, ngImport: i0 }); }
68
- }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteElement, decorators: [{
70
- type: Directive
71
- }], propDecorators: { testID: [{
72
- type: Input
73
- }], nativeID: [{
74
- type: Input
75
- }], id: [{
76
- type: Input
77
- }], accessible: [{
78
- type: Input
79
- }], accessibilityLabel: [{
80
- type: Input
81
- }], accessibilityHint: [{
82
- type: Input
83
- }], accessibilityRole: [{
84
- type: Input
85
- }], accessibilityState: [{
86
- type: Input
87
- }], accessibilityValue: [{
88
- type: Input
89
- }], accessibilityActions: [{
90
- type: Input
91
- }], accessibilityLabelledBy: [{
92
- type: Input
93
- }], importantForAccessibility: [{
94
- type: Input
95
- }], accessibilityLiveRegion: [{
96
- type: Input
97
- }], screenReaderFocusable: [{
98
- type: Input
99
- }], accessibilityViewIsModal: [{
100
- type: Input
101
- }], accessibilityElementsHidden: [{
102
- type: Input
103
- }], accessibilityIgnoresInvertColors: [{
104
- type: Input
105
- }], accessibilityLanguage: [{
106
- type: Input
107
- }], accessibilityRespondsToUserInteraction: [{
108
- type: Input
109
- }], accessibilityShowsLargeContentViewer: [{
110
- type: Input
111
- }], accessibilityLargeContentTitle: [{
112
- type: Input
113
- }], onAccessibilityAction: [{
114
- type: Input
115
- }], onAccessibilityTap: [{
116
- type: Input
117
- }], onMagicTap: [{
118
- type: Input
119
- }], onAccessibilityEscape: [{
120
- type: Input
121
- }], role: [{
122
- type: Input
123
- }], "aria-label": [{
124
- type: Input
125
- }], "aria-labelledby": [{
126
- type: Input
127
- }], "aria-live": [{
128
- type: Input
129
- }], "aria-hidden": [{
130
- type: Input
131
- }], "aria-busy": [{
132
- type: Input
133
- }], "aria-checked": [{
134
- type: Input
135
- }], "aria-disabled": [{
136
- type: Input
137
- }], "aria-expanded": [{
138
- type: Input
139
- }], "aria-selected": [{
140
- type: Input
141
- }], "aria-modal": [{
142
- type: Input
143
- }], "aria-valuemax": [{
144
- type: Input
145
- }], "aria-valuemin": [{
146
- type: Input
147
- }], "aria-valuenow": [{
148
- type: Input
149
- }], "aria-valuetext": [{
150
- type: Input
151
- }], onStartShouldSetResponder: [{
152
- type: Input
153
- }], onStartShouldSetResponderCapture: [{
154
- type: Input
155
- }], onMoveShouldSetResponder: [{
156
- type: Input
157
- }], onMoveShouldSetResponderCapture: [{
158
- type: Input
159
- }], onResponderGrant: [{
160
- type: Input
161
- }], onResponderReject: [{
162
- type: Input
163
- }], onResponderStart: [{
164
- type: Input
165
- }], onResponderMove: [{
166
- type: Input
167
- }], onResponderEnd: [{
168
- type: Input
169
- }], onResponderRelease: [{
170
- type: Input
171
- }], onResponderTerminate: [{
172
- type: Input
173
- }], onResponderTerminationRequest: [{
174
- type: Input
175
- }], pointerEvents: [{
176
- type: Input
177
- }], hitSlop: [{
178
- type: Input
179
- }], focusable: [{
180
- type: Input
181
- }], collapsable: [{
182
- type: Input
183
- }], removeClippedSubviews: [{
184
- type: Input
185
- }], renderToHardwareTextureAndroid: [{
186
- type: Input
187
- }], shouldRasterizeIOS: [{
188
- type: Input
189
- }], needsOffscreenAlphaCompositing: [{
190
- type: Input
191
- }], style: [{
192
- type: Input
193
- }], styleProp: [{
194
- type: Input
195
- }], class: [{
196
- type: Input
197
- }], onPress: [{
198
- type: Input
199
- }], onPressIn: [{
200
- type: Input
201
- }], onPressOut: [{
202
- type: Input
203
- }], onPressMove: [{
204
- type: Input
205
- }], onLongPress: [{
206
- type: Input
207
- }], onLayout: [{
208
- type: Input
209
- }], onFocus: [{
210
- type: Input
211
- }], onBlur: [{
212
- type: Input
213
- }] } });
214
- /**
215
- * The base for a tag whose app callback an engine behavior READS BACK inside the same microtask
216
- * turn — `<text-input>`, `<switch>`, `<refresh-control>`. Zoneless change detection is a macrotask,
217
- * so without this the behavior sees the PRE-event value and undoes the user; the full mechanism,
218
- * and why this is `detectChanges()` on one view rather than `ApplicationRef.tick()`, is in
219
- * `./change-detection-flush`.
220
- *
221
- * The directive is the only thing in the adapter that owns a `ChangeDetectorRef` for the view
222
- * holding the binding, so it hands one to the renderer keyed on its own node.
223
- */
224
- class ReadBackElement extends SymbioteElement {
225
- constructor() {
226
- super();
227
- // ITS OWN, now that the base has none. Three tags reach this class, so the injection is paid where
228
- // it is read instead of on every element of a screen.
229
- this.detector = inject(ChangeDetectorRef);
230
- this.errorHandler = inject(ErrorHandler);
231
- const node = this.host.nativeElement;
232
- if (typeof node === 'object' && node !== null) {
233
- registerViewFlush(node, () => this.flush());
234
- }
235
- }
236
- // REPORTED, NOT RETHROWN — Angular's own contract. Every other change detection runs inside
237
- // `ApplicationRef.tick()`, caught by `ErrorHandler` (`SymbioteErrorHandler`); this flush instead
238
- // runs from a native event dispatch, where an uncaught throw has nowhere to go but `RCTFatal`.
239
- flush() {
240
- try {
241
- this.detector.detectChanges();
242
- }
243
- catch (error) {
244
- this.errorHandler.handleError(error);
245
- }
246
- }
247
- ngOnDestroy() {
248
- const node = this.host.nativeElement;
249
- if (typeof node === 'object' && node !== null)
250
- unregisterViewFlush(node);
251
- }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadBackElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
253
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ReadBackElement, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
254
- }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadBackElement, decorators: [{
256
- type: Directive
257
- }], ctorParameters: () => [] });
258
- // BOTH SPELLINGS ON THE SEVEN DASHLESS TAGS, and it is a correctness fix rather than a convenience.
259
- //
260
- // The renderer has always mapped `symbiote-view` onto `view` (`PRIMITIVE_SELECTOR_ALIAS`), because
261
- // `CUSTOM_ELEMENTS_SCHEMA` admits an unknown element only when the name carries a hyphen — so the
262
- // hyphenated form is the spelling an app WITHOUT these directives has to use. It is the same tag and
263
- // commits the same node.
264
- //
265
- // It was not the same tag HERE. A selector of `view` alone meant an app that imports
266
- // `SYMBIOTE_ELEMENTS` and writes `<symbiote-view>` matched nothing: no type check on its props, no
267
- // declared inputs, none of `SymbioteElement`'s forwarding or callback wrapping — silently, with the
268
- // tree still looking right. Measured, that shape also ran ~8.6 us per element FASTER, which is what
269
- // made it look like an optimization instead of a hole (`angular-directive-cost.itest.ts`).
270
- //
271
- // Only the seven dashless tags need it: `hyphenatedIntrinsicAliases` skips any tag that already
272
- // carries a dash, so `symbiote-scroll-view` resolves nowhere on either side and the two halves agree
273
- // already.
274
- export class ViewElement extends SymbioteElement {
275
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
276
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ViewElement, isStandalone: true, selector: "view, symbiote-view", usesInheritance: true, ngImport: i0 }); }
277
- }
278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ViewElement, decorators: [{
279
- type: Directive,
280
- args: [{ selector: 'view, symbiote-view', standalone: true }]
281
- }] });
282
- export class PressableElement extends SymbioteElement {
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PressableElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
284
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: PressableElement, isStandalone: true, selector: "pressable, symbiote-pressable", inputs: { disabled: "disabled", cancelable: "cancelable", blockNativeResponder: "blockNativeResponder", delayLongPress: "delayLongPress", delayHoverIn: "delayHoverIn", delayHoverOut: "delayHoverOut", onHoverIn: "onHoverIn", onHoverOut: "onHoverOut", pressRetentionOffset: "pressRetentionOffset", unstable_pressDelay: "unstable_pressDelay", android_ripple: "android_ripple", testOnly_pressed: "testOnly_pressed", android_disableSound: "android_disableSound", hasTVPreferredFocus: "hasTVPreferredFocus", nextFocusDown: "nextFocusDown", nextFocusForward: "nextFocusForward", nextFocusLeft: "nextFocusLeft", nextFocusRight: "nextFocusRight", nextFocusUp: "nextFocusUp" }, usesInheritance: true, ngImport: i0 }); }
285
- }
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PressableElement, decorators: [{
287
- type: Directive,
288
- args: [{ selector: 'pressable, symbiote-pressable', standalone: true }]
289
- }], propDecorators: { disabled: [{
290
- type: Input
291
- }], cancelable: [{
292
- type: Input
293
- }], blockNativeResponder: [{
294
- type: Input
295
- }], delayLongPress: [{
296
- type: Input
297
- }], delayHoverIn: [{
298
- type: Input
299
- }], delayHoverOut: [{
300
- type: Input
301
- }], onHoverIn: [{
302
- type: Input
303
- }], onHoverOut: [{
304
- type: Input
305
- }], pressRetentionOffset: [{
306
- type: Input
307
- }], unstable_pressDelay: [{
308
- type: Input
309
- }], android_ripple: [{
310
- type: Input
311
- }], testOnly_pressed: [{
312
- type: Input
313
- }], android_disableSound: [{
314
- type: Input
315
- }], hasTVPreferredFocus: [{
316
- type: Input
317
- }], nextFocusDown: [{
318
- type: Input
319
- }], nextFocusForward: [{
320
- type: Input
321
- }], nextFocusLeft: [{
322
- type: Input
323
- }], nextFocusRight: [{
324
- type: Input
325
- }], nextFocusUp: [{
326
- type: Input
327
- }] } });
328
- // RN's TouchableOpacity is a Pressable that also fades, and both halves are on the engine node —
329
- // so it takes the same inputs and adds only the fade's own knob.
330
- export class TouchableOpacityElement extends PressableElement {
331
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableOpacityElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
332
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TouchableOpacityElement, isStandalone: true, selector: "touchable-opacity", inputs: { activeOpacity: "activeOpacity", delayPressIn: "delayPressIn", delayPressOut: "delayPressOut", minPressDuration: "minPressDuration" }, usesInheritance: true, ngImport: i0 }); }
333
- }
334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableOpacityElement, decorators: [{
335
- type: Directive,
336
- args: [{ selector: 'touchable-opacity', standalone: true }]
337
- }], propDecorators: { activeOpacity: [{
338
- type: Input
339
- }], delayPressIn: [{
340
- type: Input
341
- }], delayPressOut: [{
342
- type: Input
343
- }], minPressDuration: [{
344
- type: Input
345
- }] } });
346
- // RN's TouchableHighlight is a Pressable that swaps its own background while pressed
347
- // (TouchableHighlight.js), and the underlay machine runs on the engine node — so the tag takes the
348
- // press surface plus the two knobs that describe the underlay. `onShowUnderlay`/`onHideUnderlay`
349
- // need no @Input: they are events, bound as `(showUnderlay)` through the renderer's own listen.
350
- export class TouchableHighlightElement extends PressableElement {
351
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableHighlightElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
352
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TouchableHighlightElement, isStandalone: true, selector: "touchable-highlight", inputs: { activeOpacity: "activeOpacity", underlayColor: "underlayColor", delayPressIn: "delayPressIn", delayPressOut: "delayPressOut", minPressDuration: "minPressDuration", touchSoundDisabled: "touchSoundDisabled" }, usesInheritance: true, ngImport: i0 }); }
353
- }
354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableHighlightElement, decorators: [{
355
- type: Directive,
356
- args: [{ selector: 'touchable-highlight', standalone: true }]
357
- }], propDecorators: { activeOpacity: [{
358
- type: Input
359
- }], underlayColor: [{
360
- type: Input
361
- }], delayPressIn: [{
362
- type: Input
363
- }], delayPressOut: [{
364
- type: Input
365
- }], minPressDuration: [{
366
- type: Input
367
- }], touchSoundDisabled: [{
368
- type: Input
369
- }] } });
370
- // RN's TouchableNativeFeedback is a Pressable that CLONES onto its single child instead of
371
- // rendering anything (TouchableNativeFeedback.js:339) — so the tag takes the press surface plus the
372
- // two props that pick the Android ripple drawable. The tag itself commits no native view; the
373
- // behavior configures the child, which is why `elements.test.ts` reads it as an anchor.
374
- export class TouchableNativeFeedbackElement extends PressableElement {
375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableNativeFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
376
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TouchableNativeFeedbackElement, isStandalone: true, selector: "touchable-native-feedback", inputs: { background: "background", useForeground: "useForeground", touchSoundDisabled: "touchSoundDisabled" }, usesInheritance: true, ngImport: i0 }); }
377
- }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableNativeFeedbackElement, decorators: [{
379
- type: Directive,
380
- args: [{ selector: 'touchable-native-feedback', standalone: true }]
381
- }], propDecorators: { background: [{
382
- type: Input
383
- }], useForeground: [{
384
- type: Input
385
- }], touchSoundDisabled: [{
386
- type: Input
387
- }] } });
388
- // RN's TouchableWithoutFeedback clones onto its single child the same way
389
- // (TouchableWithoutFeedback.js:286) and installs no drawable, so it takes the press surface plus the
390
- // three timing knobs it forwards to Pressability (:186-190) and nothing else. Like the tag above it
391
- // commits no native view; `elements.test.ts` reads it as an anchor.
392
- export class TouchableWithoutFeedbackElement extends PressableElement {
393
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableWithoutFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
394
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TouchableWithoutFeedbackElement, isStandalone: true, selector: "touchable-without-feedback", inputs: { delayPressIn: "delayPressIn", delayPressOut: "delayPressOut", minPressDuration: "minPressDuration", touchSoundDisabled: "touchSoundDisabled" }, usesInheritance: true, ngImport: i0 }); }
395
- }
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableWithoutFeedbackElement, decorators: [{
397
- type: Directive,
398
- args: [{ selector: 'touchable-without-feedback', standalone: true }]
399
- }], propDecorators: { delayPressIn: [{
400
- type: Input
401
- }], delayPressOut: [{
402
- type: Input
403
- }], minPressDuration: [{
404
- type: Input
405
- }], touchSoundDisabled: [{
406
- type: Input
407
- }] } });
408
- // RN's Button IS a TouchableOpacity (Button.js:384), and the behavior builds the view and the
409
- // label under it — so the tag takes the touchable's surface plus the four props Button owns. There
410
- // is no `style`: RN's Button has no such prop, and the label/background come from `color`.
411
- export class ButtonElement extends TouchableOpacityElement {
412
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
413
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ButtonElement, isStandalone: true, selector: "button, symbiote-button", inputs: { title: "title", color: "color", touchSoundDisabled: "touchSoundDisabled" }, usesInheritance: true, ngImport: i0 }); }
414
- }
415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonElement, decorators: [{
416
- type: Directive,
417
- args: [{ selector: 'button, symbiote-button', standalone: true }]
418
- }], propDecorators: { title: [{
419
- type: Input
420
- }], color: [{
421
- type: Input
422
- }], touchSoundDisabled: [{
423
- type: Input
424
- }] } });
425
- export class TextElement extends SymbioteElement {
426
- constructor() {
427
- super(...arguments);
428
- // Narrows the inherited input to a TEXT style so `fontSize`/`fontWeight` type-check here. The
429
- // initializer is what TS2612 asks for to accept a redeclaration as deliberate; `declare` would
430
- // be the other answer and cannot carry a decorator.
431
- this.style = undefined;
432
- this.styleProp = undefined;
433
- }
434
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
435
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TextElement, isStandalone: true, selector: "text, symbiote-text", inputs: { style: "style", styleProp: "styleProp", numberOfLines: "numberOfLines", ellipsizeMode: "ellipsizeMode", selectable: "selectable", adjustsFontSizeToFit: "adjustsFontSizeToFit", minimumFontScale: "minimumFontScale", allowFontScaling: "allowFontScaling", maxFontSizeMultiplier: "maxFontSizeMultiplier", selectionColor: "selectionColor", disabled: "disabled" }, usesInheritance: true, ngImport: i0 }); }
436
- }
437
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextElement, decorators: [{
438
- type: Directive,
439
- args: [{ selector: 'text, symbiote-text', standalone: true }]
440
- }], propDecorators: { style: [{
441
- type: Input
442
- }], styleProp: [{
443
- type: Input
444
- }], numberOfLines: [{
445
- type: Input
446
- }], ellipsizeMode: [{
447
- type: Input
448
- }], selectable: [{
449
- type: Input
450
- }], adjustsFontSizeToFit: [{
451
- type: Input
452
- }], minimumFontScale: [{
453
- type: Input
454
- }], allowFontScaling: [{
455
- type: Input
456
- }], maxFontSizeMultiplier: [{
457
- type: Input
458
- }], selectionColor: [{
459
- type: Input
460
- }], disabled: [{
461
- type: Input
462
- }] } });
463
- export class ImageElement extends SymbioteElement {
464
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
465
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ImageElement, isStandalone: true, selector: "image, symbiote-image", inputs: { source: "source", src: "src", srcSet: "srcSet", alt: "alt", width: "width", height: "height", resizeMode: "resizeMode", resizeMethod: "resizeMethod", defaultSource: "defaultSource", loadingIndicatorSource: "loadingIndicatorSource", blurRadius: "blurRadius", capInsets: "capInsets", crossOrigin: "crossOrigin", referrerPolicy: "referrerPolicy", fadeDuration: "fadeDuration", progressiveRenderingEnabled: "progressiveRenderingEnabled", tintColor: "tintColor", onLoad: "onLoad", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd", onError: "onError", onProgress: "onProgress", onPartialLoad: "onPartialLoad" }, usesInheritance: true, ngImport: i0 }); }
466
- }
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageElement, decorators: [{
468
- type: Directive,
469
- args: [{ selector: 'image, symbiote-image', standalone: true }]
470
- }], propDecorators: { source: [{
471
- type: Input
472
- }], src: [{
473
- type: Input
474
- }], srcSet: [{
475
- type: Input
476
- }], alt: [{
477
- type: Input
478
- }], width: [{
479
- type: Input
480
- }], height: [{
481
- type: Input
482
- }], resizeMode: [{
483
- type: Input
484
- }], resizeMethod: [{
485
- type: Input
486
- }], defaultSource: [{
487
- type: Input
488
- }], loadingIndicatorSource: [{
489
- type: Input
490
- }], blurRadius: [{
491
- type: Input
492
- }], capInsets: [{
493
- type: Input
494
- }], crossOrigin: [{
495
- type: Input
496
- }], referrerPolicy: [{
497
- type: Input
498
- }], fadeDuration: [{
499
- type: Input
500
- }], progressiveRenderingEnabled: [{
501
- type: Input
502
- }], tintColor: [{
503
- type: Input
504
- }], onLoad: [{
505
- type: Input
506
- }], onLoadStart: [{
507
- type: Input
508
- }], onLoadEnd: [{
509
- type: Input
510
- }], onError: [{
511
- type: Input
512
- }], onProgress: [{
513
- type: Input
514
- }], onPartialLoad: [{
515
- type: Input
516
- }] } });
517
- // The box, not the image. Every Image prop below rides the engine's `slotPropsExcept` redirect onto
518
- // the absolutely-filled image the behavior builds, exactly as RN's own `...props` spread does
519
- // (ImageBackground.js:81) — so this directive declares them to make the BINDING legal, and the
520
- // engine decides which node each lands on.
521
- export class ImageBackgroundElement extends SymbioteElement {
522
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageBackgroundElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
523
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ImageBackgroundElement, isStandalone: true, selector: "image-background", inputs: { imageStyle: "imageStyle", source: "source", src: "src", srcSet: "srcSet", alt: "alt", width: "width", height: "height", resizeMode: "resizeMode", resizeMethod: "resizeMethod", defaultSource: "defaultSource", loadingIndicatorSource: "loadingIndicatorSource", blurRadius: "blurRadius", capInsets: "capInsets", crossOrigin: "crossOrigin", referrerPolicy: "referrerPolicy", fadeDuration: "fadeDuration", progressiveRenderingEnabled: "progressiveRenderingEnabled", tintColor: "tintColor", onLoad: "onLoad", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd", onError: "onError", onProgress: "onProgress", onPartialLoad: "onPartialLoad" }, usesInheritance: true, ngImport: i0 }); }
524
- }
525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageBackgroundElement, decorators: [{
526
- type: Directive,
527
- args: [{ selector: 'image-background', standalone: true }]
528
- }], propDecorators: { imageStyle: [{
529
- type: Input
530
- }], source: [{
531
- type: Input
532
- }], src: [{
533
- type: Input
534
- }], srcSet: [{
535
- type: Input
536
- }], alt: [{
537
- type: Input
538
- }], width: [{
539
- type: Input
540
- }], height: [{
541
- type: Input
542
- }], resizeMode: [{
543
- type: Input
544
- }], resizeMethod: [{
545
- type: Input
546
- }], defaultSource: [{
547
- type: Input
548
- }], loadingIndicatorSource: [{
549
- type: Input
550
- }], blurRadius: [{
551
- type: Input
552
- }], capInsets: [{
553
- type: Input
554
- }], crossOrigin: [{
555
- type: Input
556
- }], referrerPolicy: [{
557
- type: Input
558
- }], fadeDuration: [{
559
- type: Input
560
- }], progressiveRenderingEnabled: [{
561
- type: Input
562
- }], tintColor: [{
563
- type: Input
564
- }], onLoad: [{
565
- type: Input
566
- }], onLoadStart: [{
567
- type: Input
568
- }], onLoadEnd: [{
569
- type: Input
570
- }], onError: [{
571
- type: Input
572
- }], onProgress: [{
573
- type: Input
574
- }], onPartialLoad: [{
575
- type: Input
576
- }] } });
577
- export class ScrollViewElement extends SymbioteElement {
578
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
579
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ScrollViewElement, isStandalone: true, selector: "scroll-view", inputs: { scrollEnabled: "scrollEnabled", scrollEventThrottle: "scrollEventThrottle", contentContainerStyle: "contentContainerStyle", contentInset: "contentInset", contentInsetAdjustmentBehavior: "contentInsetAdjustmentBehavior", contentOffset: "contentOffset", scrollIndicatorInsets: "scrollIndicatorInsets", showsHorizontalScrollIndicator: "showsHorizontalScrollIndicator", showsVerticalScrollIndicator: "showsVerticalScrollIndicator", alwaysBounceHorizontal: "alwaysBounceHorizontal", alwaysBounceVertical: "alwaysBounceVertical", bounces: "bounces", bouncesZoom: "bouncesZoom", centerContent: "centerContent", decelerationRate: "decelerationRate", directionalLockEnabled: "directionalLockEnabled", disableIntervalMomentum: "disableIntervalMomentum", endFillColor: "endFillColor", fadingEdgeLength: "fadingEdgeLength", indicatorStyle: "indicatorStyle", invertStickyHeaders: "invertStickyHeaders", keyboardDismissMode: "keyboardDismissMode", keyboardShouldPersistTaps: "keyboardShouldPersistTaps", automaticallyAdjustKeyboardInsets: "automaticallyAdjustKeyboardInsets", maintainVisibleContentPosition: "maintainVisibleContentPosition", maximumZoomScale: "maximumZoomScale", minimumZoomScale: "minimumZoomScale", zoomScale: "zoomScale", nestedScrollEnabled: "nestedScrollEnabled", overScrollMode: "overScrollMode", pagingEnabled: "pagingEnabled", persistentScrollbar: "persistentScrollbar", pinchGestureEnabled: "pinchGestureEnabled", snapToAlignment: "snapToAlignment", snapToEnd: "snapToEnd", snapToInterval: "snapToInterval", snapToOffsets: "snapToOffsets", snapToStart: "snapToStart", stickyHeaderIndices: "stickyHeaderIndices", onScroll: "onScroll", onScrollBeginDrag: "onScrollBeginDrag", onScrollEndDrag: "onScrollEndDrag", onMomentumScrollBegin: "onMomentumScrollBegin", onMomentumScrollEnd: "onMomentumScrollEnd", onScrollToTop: "onScrollToTop", onContentSizeChange: "onContentSizeChange" }, usesInheritance: true, ngImport: i0 }); }
580
- }
581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollViewElement, decorators: [{
582
- type: Directive,
583
- args: [{ selector: 'scroll-view', standalone: true }]
584
- }], propDecorators: { scrollEnabled: [{
585
- type: Input
586
- }], scrollEventThrottle: [{
587
- type: Input
588
- }], contentContainerStyle: [{
589
- type: Input
590
- }], contentInset: [{
591
- type: Input
592
- }], contentInsetAdjustmentBehavior: [{
593
- type: Input
594
- }], contentOffset: [{
595
- type: Input
596
- }], scrollIndicatorInsets: [{
597
- type: Input
598
- }], showsHorizontalScrollIndicator: [{
599
- type: Input
600
- }], showsVerticalScrollIndicator: [{
601
- type: Input
602
- }], alwaysBounceHorizontal: [{
603
- type: Input
604
- }], alwaysBounceVertical: [{
605
- type: Input
606
- }], bounces: [{
607
- type: Input
608
- }], bouncesZoom: [{
609
- type: Input
610
- }], centerContent: [{
611
- type: Input
612
- }], decelerationRate: [{
613
- type: Input
614
- }], directionalLockEnabled: [{
615
- type: Input
616
- }], disableIntervalMomentum: [{
617
- type: Input
618
- }], endFillColor: [{
619
- type: Input
620
- }], fadingEdgeLength: [{
621
- type: Input
622
- }], indicatorStyle: [{
623
- type: Input
624
- }], invertStickyHeaders: [{
625
- type: Input
626
- }], keyboardDismissMode: [{
627
- type: Input
628
- }], keyboardShouldPersistTaps: [{
629
- type: Input
630
- }], automaticallyAdjustKeyboardInsets: [{
631
- type: Input
632
- }], maintainVisibleContentPosition: [{
633
- type: Input
634
- }], maximumZoomScale: [{
635
- type: Input
636
- }], minimumZoomScale: [{
637
- type: Input
638
- }], zoomScale: [{
639
- type: Input
640
- }], nestedScrollEnabled: [{
641
- type: Input
642
- }], overScrollMode: [{
643
- type: Input
644
- }], pagingEnabled: [{
645
- type: Input
646
- }], persistentScrollbar: [{
647
- type: Input
648
- }], pinchGestureEnabled: [{
649
- type: Input
650
- }], snapToAlignment: [{
651
- type: Input
652
- }], snapToEnd: [{
653
- type: Input
654
- }], snapToInterval: [{
655
- type: Input
656
- }], snapToOffsets: [{
657
- type: Input
658
- }], snapToStart: [{
659
- type: Input
660
- }], stickyHeaderIndices: [{
661
- type: Input
662
- }], onScroll: [{
663
- type: Input
664
- }], onScrollBeginDrag: [{
665
- type: Input
666
- }], onScrollEndDrag: [{
667
- type: Input
668
- }], onMomentumScrollBegin: [{
669
- type: Input
670
- }], onMomentumScrollEnd: [{
671
- type: Input
672
- }], onScrollToTop: [{
673
- type: Input
674
- }], onContentSizeChange: [{
675
- type: Input
676
- }] } });
677
- export class HorizontalScrollViewElement extends ScrollViewElement {
678
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
679
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: HorizontalScrollViewElement, isStandalone: true, selector: "horizontal-scroll-view", usesInheritance: true, ngImport: i0 }); }
680
- }
681
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollViewElement, decorators: [{
682
- type: Directive,
683
- args: [{ selector: 'horizontal-scroll-view', standalone: true }]
684
- }] });
685
- export class ScrollContentElement extends SymbioteElement {
686
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollContentElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
687
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ScrollContentElement, isStandalone: true, selector: "scroll-content", usesInheritance: true, ngImport: i0 }); }
688
- }
689
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollContentElement, decorators: [{
690
- type: Directive,
691
- args: [{ selector: 'scroll-content', standalone: true }]
692
- }] });
693
- export class HorizontalScrollContentElement extends SymbioteElement {
694
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollContentElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
695
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: HorizontalScrollContentElement, isStandalone: true, selector: "horizontal-scroll-content", usesInheritance: true, ngImport: i0 }); }
696
- }
697
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollContentElement, decorators: [{
698
- type: Directive,
699
- args: [{ selector: 'horizontal-scroll-content', standalone: true }]
700
- }] });
701
- /**
702
- * The `[(value)]` half of a controlled tag — `<switch>` and `<text-input>`.
703
- *
704
- * The one `@Output` in this file, and it is FORCED rather than chosen. `[(value)]` desugars to
705
- * `[value]` + `(valueChange)`, and ngtsc requires both halves to resolve to the SAME target: a
706
- * declared `value` input beside an event no directive claims is NG8007, "the property and event
707
- * halves are not bound to the same target". So the sugar this adapter documents cannot work without
708
- * the output existing, whatever the file header says about events in general.
709
- *
710
- * The bridge below is NOT what makes the binding work today, and the comment says so because the
711
- * obvious reading is wrong: the file header's "an `@Output` CONSUMES the binding" holds for a
712
- * COMPONENT, and an element is the other case — Angular attaches the renderer listener for the
713
- * event as well, so `Renderer2.listen` still runs and the engine still hears the change. Measured
714
- * under JIT by deleting this whole hook: every case in `renderer/two-way-value.test.ts` stayed
715
- * green, delivery included, and exactly ONCE (nothing double-fires when both paths exist).
716
- *
717
- * It is kept because the measurement is JIT-only and this adapter has a recorded case of JIT and
718
- * AOT resolving a binding differently (`test-harness-false-greens.md` §21). If AOT routes the event
719
- * exclusively to the output, this hook is the only thing keeping `[(value)]` alive; if it routes to
720
- * both, it is one extra listener on a control an app explicitly bound. Delete it once something
721
- * executes the LINKED artifact and shows the renderer listener is attached there too.
722
- *
723
- * Opened only when something is SUBSCRIBED: the prop's PRESENCE is what a behavior reads to decide
724
- * it is controlled, so a `<switch>` given a handler nobody asked for changes how it snaps back.
725
- * `.observed` is readable from `ngOnInit` because Angular subscribes outputs in the creation pass,
726
- * before the update pass runs the hook — observed directly (true for the two bound tags, false for
727
- * an unbound one), not assumed.
728
- */
729
- class ValueChangeElement extends ReadBackElement {
730
- constructor() {
731
- super(...arguments);
732
- this.valueRenderer = inject(Renderer2);
733
- this.valueHost = inject(ElementRef);
734
- }
735
- ngOnInit() {
736
- if (!this.hasValueSubscriber())
737
- return;
738
- this.unlistenValue = this.valueRenderer.listen(this.valueHost.nativeElement, VALUE_CHANGE_EVENT, (value) => {
739
- this.emitValue(value);
740
- });
741
- }
742
- ngOnDestroy() {
743
- super.ngOnDestroy();
744
- this.unlistenValue?.();
745
- }
746
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValueChangeElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
747
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ValueChangeElement, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
748
- }
749
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValueChangeElement, decorators: [{
750
- type: Directive
751
- }] });
752
- export class TextInputElement extends ValueChangeElement {
753
- constructor() {
754
- super(...arguments);
755
- // NonNullable, not the prop type: `[(value)]="name"` binds a `string`, and an emitter that can
756
- // also emit `undefined` fails the two-way assignability check ngtsc runs on the event half.
757
- this.valueChange = new EventEmitter();
758
- }
759
- hasValueSubscriber() {
760
- return this.valueChange.observed;
761
- }
762
- emitValue(value) {
763
- if (typeof value === 'string')
764
- this.valueChange.emit(value);
765
- }
766
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
767
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TextInputElement, isStandalone: true, selector: "text-input", inputs: { value: "value", defaultValue: "defaultValue", placeholder: "placeholder", placeholderTextColor: "placeholderTextColor", multiline: "multiline", numberOfLines: "numberOfLines", maxLength: "maxLength", editable: "editable", readOnly: "readOnly", autoFocus: "autoFocus", autoCapitalize: "autoCapitalize", autoComplete: "autoComplete", autoCorrect: "autoCorrect", blurOnSubmit: "blurOnSubmit", submitBehavior: "submitBehavior", cursorColor: "cursorColor", enterKeyHint: "enterKeyHint", returnKeyType: "returnKeyType", inputMode: "inputMode", keyboardType: "keyboardType", inputAccessoryViewID: "inputAccessoryViewID", scrollEnabled: "scrollEnabled", secureTextEntry: "secureTextEntry", selectTextOnFocus: "selectTextOnFocus", selection: "selection", selectionColor: "selectionColor", selectionHandleColor: "selectionHandleColor", showSoftInputOnFocus: "showSoftInputOnFocus", textAlign: "textAlign", textContentType: "textContentType", underlineColorAndroid: "underlineColorAndroid", onValueChange: "onValueChange", onChangeText: "onChangeText", onContentSizeChange: "onContentSizeChange", onEndEditing: "onEndEditing", onKeyPress: "onKeyPress", onSelectionChange: "onSelectionChange", onSubmitEditing: "onSubmitEditing" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 }); }
768
- }
769
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputElement, decorators: [{
770
- type: Directive,
771
- args: [{ selector: 'text-input', standalone: true }]
772
- }], propDecorators: { value: [{
773
- type: Input
774
- }], defaultValue: [{
775
- type: Input
776
- }], placeholder: [{
777
- type: Input
778
- }], placeholderTextColor: [{
779
- type: Input
780
- }], multiline: [{
781
- type: Input
782
- }], numberOfLines: [{
783
- type: Input
784
- }], maxLength: [{
785
- type: Input
786
- }], editable: [{
787
- type: Input
788
- }], readOnly: [{
789
- type: Input
790
- }], autoFocus: [{
791
- type: Input
792
- }], autoCapitalize: [{
793
- type: Input
794
- }], autoComplete: [{
795
- type: Input
796
- }], autoCorrect: [{
797
- type: Input
798
- }], blurOnSubmit: [{
799
- type: Input
800
- }], submitBehavior: [{
801
- type: Input
802
- }], cursorColor: [{
803
- type: Input
804
- }], enterKeyHint: [{
805
- type: Input
806
- }], returnKeyType: [{
807
- type: Input
808
- }], inputMode: [{
809
- type: Input
810
- }], keyboardType: [{
811
- type: Input
812
- }], inputAccessoryViewID: [{
813
- type: Input
814
- }], scrollEnabled: [{
815
- type: Input
816
- }], secureTextEntry: [{
817
- type: Input
818
- }], selectTextOnFocus: [{
819
- type: Input
820
- }], selection: [{
821
- type: Input
822
- }], selectionColor: [{
823
- type: Input
824
- }], selectionHandleColor: [{
825
- type: Input
826
- }], showSoftInputOnFocus: [{
827
- type: Input
828
- }], textAlign: [{
829
- type: Input
830
- }], textContentType: [{
831
- type: Input
832
- }], underlineColorAndroid: [{
833
- type: Input
834
- }], onValueChange: [{
835
- type: Input
836
- }], onChangeText: [{
837
- type: Input
838
- }], onContentSizeChange: [{
839
- type: Input
840
- }], onEndEditing: [{
841
- type: Input
842
- }], onKeyPress: [{
843
- type: Input
844
- }], onSelectionChange: [{
845
- type: Input
846
- }], onSubmitEditing: [{
847
- type: Input
848
- }], valueChange: [{
849
- type: Output
850
- }] } });
851
- export class MultilineTextInputElement extends TextInputElement {
852
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MultilineTextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
853
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: MultilineTextInputElement, isStandalone: true, selector: "text-input-multiline", usesInheritance: true, ngImport: i0 }); }
854
- }
855
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MultilineTextInputElement, decorators: [{
856
- type: Directive,
857
- args: [{ selector: 'text-input-multiline', standalone: true }]
858
- }] });
859
- export class SwitchElement extends ValueChangeElement {
860
- constructor() {
861
- super(...arguments);
862
- this.valueChange = new EventEmitter();
863
- }
864
- hasValueSubscriber() {
865
- return this.valueChange.observed;
866
- }
867
- emitValue(value) {
868
- if (typeof value === 'boolean')
869
- this.valueChange.emit(value);
870
- }
871
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
872
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SwitchElement, isStandalone: true, selector: "switch, symbiote-switch", inputs: { value: "value", disabled: "disabled", trackColor: "trackColor", thumbColor: "thumbColor", ios_backgroundColor: "ios_backgroundColor", onValueChange: "onValueChange" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 }); }
873
- }
874
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchElement, decorators: [{
875
- type: Directive,
876
- args: [{ selector: 'switch, symbiote-switch', standalone: true }]
877
- }], propDecorators: { value: [{
878
- type: Input
879
- }], disabled: [{
880
- type: Input
881
- }], trackColor: [{
882
- type: Input
883
- }], thumbColor: [{
884
- type: Input
885
- }], ios_backgroundColor: [{
886
- type: Input
887
- }], onValueChange: [{
888
- type: Input
889
- }], valueChange: [{
890
- type: Output
891
- }] } });
892
- /**
893
- * `[(ngModel)]` / `formControlName` on a `<text-input>` or a `<switch>`.
894
- *
895
- * The wrappers provided `NG_VALUE_ACCESSOR` themselves; a tag has no class for @angular/forms to
896
- * call into, so the accessor moves onto a directive of its own rather than being dropped — the
897
- * shape Angular's own `DefaultValueAccessor` takes for `<input>`. Providing it unconditionally is
898
- * safe: @angular/forms looks the accessor up only when an `ngModel` / `formControl*` directive sits
899
- * on the SAME element, so a plain `<switch [(value)]>` never reaches it.
900
- *
901
- * Everything below goes through `Renderer2`, which is the adapter's own — `setProperty` lands in
902
- * `routeProp` and `listen('valueChange')` is already unwrapped to a bare value there, so this
903
- * directive holds no fold of its own.
904
- */
905
- class SymbioteValueAccessor {
906
- constructor() {
907
- this.renderer = inject(Renderer2);
908
- this.host = inject(ElementRef);
909
- }
910
- setProp(name, value) {
911
- this.renderer.setProperty(this.host.nativeElement, name, value);
912
- }
913
- writeValue(value) {
914
- this.setProp('value', value ?? undefined);
915
- }
916
- registerOnChange(fn) {
917
- this.unlisten?.();
918
- this.unlisten = this.renderer.listen(this.host.nativeElement, VALUE_CHANGE_EVENT, (value) => {
919
- // THE HALF THE DOM DOES FOR FREE, and without it a controlled input undoes every
920
- // keystroke. `<text-input>`'s behavior re-commands the native text whenever `props.value`
921
- // disagrees with what native last reported — that is what makes it controlled — and the
922
- // read-back flush exists so the app's new value is on the node by the time the commit runs.
923
- // @angular/forms does not reach the node in that window: `NgModel.ngOnChanges` defers
924
- // `_updateValue` through `resolvedPromise.then`, so `writeValue` lands a MICROTASK after
925
- // the flush, and the commit in between still reads the value from before the keystroke.
926
- //
927
- // In a browser there is nothing to do here: `input.value` already holds what the user
928
- // typed. `node.props.value` is the same slot, and nothing else writes it — so the accessor
929
- // mirrors it, which is the shape rather than a workaround. A later `writeValue` still wins,
930
- // so an app that transforms or refuses the value keeps doing so, one microtask on.
931
- //
932
- // Without this, every character snaps the field back to its mounted text.
933
- this.setProp('value', value);
934
- fn(value);
935
- });
936
- }
937
- // Native has no blur-driven "touched" signal distinct from `blur`, and RN's own onBlur is what an
938
- // app binds — so touched is driven off the same event rather than a second channel.
939
- registerOnTouched(fn) {
940
- this.setProp('onBlur', () => fn());
941
- }
942
- setDisabledState(isDisabled) {
943
- this.writeDisabled(isDisabled);
944
- }
945
- ngOnDestroy() {
946
- this.unlisten?.();
947
- }
948
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
949
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SymbioteValueAccessor, isStandalone: true, ngImport: i0 }); }
950
- }
951
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteValueAccessor, decorators: [{
952
- type: Directive
953
- }] });
954
- export class TextInputValueAccessor extends SymbioteValueAccessor {
955
- writeDisabled(isDisabled) {
956
- this.setProp('editable', !isDisabled);
957
- }
958
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
959
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TextInputValueAccessor, isStandalone: true, selector: "text-input[ngModel], text-input[formControl], text-input[formControlName], text-input-multiline[ngModel], text-input-multiline[formControl], text-input-multiline[formControlName]", providers: [
960
- {
961
- provide: NG_VALUE_ACCESSOR,
962
- useExisting: forwardRef(() => TextInputValueAccessor),
963
- multi: true,
964
- },
965
- ], usesInheritance: true, ngImport: i0 }); }
966
- }
967
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputValueAccessor, decorators: [{
968
- type: Directive,
969
- args: [{
970
- selector: 'text-input[ngModel], text-input[formControl], text-input[formControlName], text-input-multiline[ngModel], text-input-multiline[formControl], text-input-multiline[formControlName]',
971
- standalone: true,
972
- providers: [
973
- {
974
- provide: NG_VALUE_ACCESSOR,
975
- useExisting: forwardRef(() => TextInputValueAccessor),
976
- multi: true,
977
- },
978
- ],
979
- }]
980
- }] });
981
- export class SwitchValueAccessor extends SymbioteValueAccessor {
982
- writeDisabled(isDisabled) {
983
- this.setProp('disabled', isDisabled);
984
- }
985
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
986
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SwitchValueAccessor, isStandalone: true, selector: "switch[ngModel], switch[formControl], switch[formControlName]", providers: [
987
- {
988
- provide: NG_VALUE_ACCESSOR,
989
- useExisting: forwardRef(() => SwitchValueAccessor),
990
- multi: true,
991
- },
992
- ], usesInheritance: true, ngImport: i0 }); }
993
- }
994
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchValueAccessor, decorators: [{
995
- type: Directive,
996
- args: [{
997
- selector: 'switch[ngModel], switch[formControl], switch[formControlName]',
998
- standalone: true,
999
- providers: [
1000
- {
1001
- provide: NG_VALUE_ACCESSOR,
1002
- useExisting: forwardRef(() => SwitchValueAccessor),
1003
- multi: true,
1004
- },
1005
- ],
1006
- }]
1007
- }] });
1008
- // The HOST — RN's centering RCTView (ActivityIndicator.js:112), which is the tag an app writes.
1009
- // The four spinner props are declared here because that is where the app writes them; the engine's
1010
- // behavior redirects them onto the spinner it builds underneath (`slotProps`).
1011
- export class ActivityIndicatorElement extends SymbioteElement {
1012
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1013
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ActivityIndicatorElement, isStandalone: true, selector: "activity-indicator", inputs: { animating: "animating", color: "color", size: "size", hidesWhenStopped: "hidesWhenStopped" }, usesInheritance: true, ngImport: i0 }); }
1014
- }
1015
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorElement, decorators: [{
1016
- type: Directive,
1017
- args: [{ selector: 'activity-indicator', standalone: true }]
1018
- }], propDecorators: { animating: [{
1019
- type: Input
1020
- }], color: [{
1021
- type: Input
1022
- }], size: [{
1023
- type: Input
1024
- }], hidesWhenStopped: [{
1025
- type: Input
1026
- }] } });
1027
- // The native spinner. Built by the behavior's `buildStructure` and by the wrapper's render fn, never
1028
- // written in an app template — declared only so the tag alphabet stays covered, the same as
1029
- // `scroll-content`.
1030
- export class ActivityIndicatorSpinnerElement extends ActivityIndicatorElement {
1031
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorSpinnerElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1032
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ActivityIndicatorSpinnerElement, isStandalone: true, selector: "activity-indicator-spinner", usesInheritance: true, ngImport: i0 }); }
1033
- }
1034
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorSpinnerElement, decorators: [{
1035
- type: Directive,
1036
- args: [{ selector: 'activity-indicator-spinner', standalone: true }]
1037
- }] });
1038
- export class SafeAreaViewElement extends SymbioteElement {
1039
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeAreaViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1040
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SafeAreaViewElement, isStandalone: true, selector: "safe-area-view", usesInheritance: true, ngImport: i0 }); }
1041
- }
1042
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeAreaViewElement, decorators: [{
1043
- type: Directive,
1044
- args: [{ selector: 'safe-area-view', standalone: true }]
1045
- }] });
1046
- export class ModalElement extends SymbioteElement {
1047
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ModalElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1048
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ModalElement, isStandalone: true, selector: "modal, symbiote-modal", inputs: { visible: "visible", transparent: "transparent", animationType: "animationType", presentationStyle: "presentationStyle", supportedOrientations: "supportedOrientations", hardwareAccelerated: "hardwareAccelerated", statusBarTranslucent: "statusBarTranslucent", navigationBarTranslucent: "navigationBarTranslucent", allowSwipeDismissal: "allowSwipeDismissal", backdropColor: "backdropColor" }, usesInheritance: true, ngImport: i0 }); }
1049
- }
1050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ModalElement, decorators: [{
1051
- type: Directive,
1052
- args: [{ selector: 'modal, symbiote-modal', standalone: true }]
1053
- }], propDecorators: { visible: [{
1054
- type: Input
1055
- }], transparent: [{
1056
- type: Input
1057
- }], animationType: [{
1058
- type: Input
1059
- }], presentationStyle: [{
1060
- type: Input
1061
- }], supportedOrientations: [{
1062
- type: Input
1063
- }], hardwareAccelerated: [{
1064
- type: Input
1065
- }], statusBarTranslucent: [{
1066
- type: Input
1067
- }], navigationBarTranslucent: [{
1068
- type: Input
1069
- }], allowSwipeDismissal: [{
1070
- type: Input
1071
- }], backdropColor: [{
1072
- type: Input
1073
- }] } });
1074
- export class RefreshControlElement extends ReadBackElement {
1075
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RefreshControlElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1076
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: RefreshControlElement, isStandalone: true, selector: "refresh-control", inputs: { refreshing: "refreshing", enabled: "enabled", colors: "colors", tintColor: "tintColor", title: "title", titleColor: "titleColor", size: "size", progressBackgroundColor: "progressBackgroundColor", progressViewOffset: "progressViewOffset", onRefresh: "onRefresh" }, usesInheritance: true, ngImport: i0 }); }
1077
- }
1078
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RefreshControlElement, decorators: [{
1079
- type: Directive,
1080
- args: [{ selector: 'refresh-control', standalone: true }]
1081
- }], propDecorators: { refreshing: [{
1082
- type: Input
1083
- }], enabled: [{
1084
- type: Input
1085
- }], colors: [{
1086
- type: Input
1087
- }], tintColor: [{
1088
- type: Input
1089
- }], title: [{
1090
- type: Input
1091
- }], titleColor: [{
1092
- type: Input
1093
- }], size: [{
1094
- type: Input
1095
- }], progressBackgroundColor: [{
1096
- type: Input
1097
- }], progressViewOffset: [{
1098
- type: Input
1099
- }], onRefresh: [{
1100
- type: Input
1101
- }] } });
1102
- export class StickyHeaderElement extends SymbioteElement {
1103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StickyHeaderElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1104
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: StickyHeaderElement, isStandalone: true, selector: "sticky-header", inputs: { inverted: "inverted", nextHeaderLayoutY: "nextHeaderLayoutY", scrollAnimatedValue: "scrollAnimatedValue", scrollViewHeight: "scrollViewHeight" }, usesInheritance: true, ngImport: i0 }); }
1105
- }
1106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StickyHeaderElement, decorators: [{
1107
- type: Directive,
1108
- args: [{ selector: 'sticky-header', standalone: true }]
1109
- }], propDecorators: { inverted: [{
1110
- type: Input
1111
- }], nextHeaderLayoutY: [{
1112
- type: Input
1113
- }], scrollAnimatedValue: [{
1114
- type: Input
1115
- }], scrollViewHeight: [{
1116
- type: Input
1117
- }] } });
1118
- export class InputAccessoryViewElement extends SymbioteElement {
1119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: InputAccessoryViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1120
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: InputAccessoryViewElement, isStandalone: true, selector: "input-accessory-view", inputs: { backgroundColor: "backgroundColor" }, usesInheritance: true, ngImport: i0 }); }
1121
- }
1122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: InputAccessoryViewElement, decorators: [{
1123
- type: Directive,
1124
- args: [{ selector: 'input-accessory-view', standalone: true }]
1125
- }], propDecorators: { backgroundColor: [{
1126
- type: Input
1127
- }] } });
37
+ import { SymbioteElement } from './element-base';
38
+ import { ButtonElement, CheckboxElement, PressableElement, TextElement, TouchableHighlightElement, TouchableNativeFeedbackElement, TouchableOpacityElement, TouchableWithoutFeedbackElement, ViewElement, } from './elements-press';
39
+ import { HorizontalScrollContentElement, HorizontalScrollViewElement, ImageBackgroundElement, ImageElement, ScrollContentElement, ScrollViewElement, } from './elements-layout';
40
+ import { ActivityIndicatorElement, ActivityIndicatorSpinnerElement, InputAccessoryViewElement, LayoutConformanceElement, ModalElement, MultilineTextInputElement, RefreshControlElement, SafeAreaViewElement, StickyHeaderElement, SwitchElement, SwitchValueAccessor, TextInputElement, TextInputValueAccessor, } from './elements-controls';
41
+ // Классы живут в соседних модулях по ответственности, этот файл остаётся их единой точкой входа
42
+ export { ActivityIndicatorElement, ActivityIndicatorSpinnerElement, ButtonElement, CheckboxElement, HorizontalScrollContentElement, HorizontalScrollViewElement, ImageBackgroundElement, ImageElement, InputAccessoryViewElement, LayoutConformanceElement, ModalElement, MultilineTextInputElement, PressableElement, RefreshControlElement, SafeAreaViewElement, ScrollContentElement, ScrollViewElement, StickyHeaderElement, SwitchElement, SwitchValueAccessor, SymbioteElement, TextElement, TextInputElement, TextInputValueAccessor, TouchableHighlightElement, TouchableNativeFeedbackElement, TouchableOpacityElement, TouchableWithoutFeedbackElement, ViewElement, };
1128
43
  /**
1129
44
  * Every element directive, as ONE symbol an app puts in `imports`. Angular flattens a nested array
1130
45
  * there, so the line does not grow as the tag alphabet does — and a per-component `imports` line is
@@ -1142,6 +57,7 @@ export const SYMBIOTE_ELEMENTS = [
1142
57
  TouchableNativeFeedbackElement,
1143
58
  TouchableWithoutFeedbackElement,
1144
59
  ButtonElement,
60
+ CheckboxElement,
1145
61
  TextElement,
1146
62
  ImageElement,
1147
63
  ImageBackgroundElement,
@@ -1155,6 +71,7 @@ export const SYMBIOTE_ELEMENTS = [
1155
71
  ActivityIndicatorElement,
1156
72
  ActivityIndicatorSpinnerElement,
1157
73
  SafeAreaViewElement,
74
+ LayoutConformanceElement,
1158
75
  ModalElement,
1159
76
  RefreshControlElement,
1160
77
  StickyHeaderElement,
@@ -1190,6 +107,7 @@ const DECLARES_EVERY_PROP = {
1190
107
  pressable: true,
1191
108
  touchableOpacity: true,
1192
109
  touchableHighlight: true,
110
+ checkbox: true,
1193
111
  text: true,
1194
112
  image: true,
1195
113
  imageBackground: true,