@symbiote-native/angular 1.0.0 → 2.0.1

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 (248) hide show
  1. package/README.md +13 -10
  2. package/babel-register-composed.cjs +41 -19
  3. package/bin/symbiote-angular-dev.cjs +16 -4
  4. package/build/angular/anchor-host-registry.js +1 -17
  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} +1 -1
  22. package/build/angular/components/{image/shared.js → image-shared.js} +7 -2
  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.js +11 -17
  28. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  29. package/build/angular/components/modal/index.d.ts +1 -0
  30. package/build/angular/components/modal/index.js +19 -12
  31. package/build/angular/components/modal/index.js.map +1 -1
  32. package/build/angular/components/pressable-props.d.ts +32 -0
  33. package/build/angular/components/pressable-props.js +11 -0
  34. package/build/angular/components/pressable-props.js.map +1 -0
  35. package/build/angular/components/refresh-control-props.d.ts +16 -0
  36. package/build/angular/components/refresh-control-props.js +14 -0
  37. package/build/angular/components/refresh-control-props.js.map +1 -0
  38. package/build/angular/components/safe-area-view-props.d.ts +7 -0
  39. package/build/angular/components/safe-area-view-props.js +11 -0
  40. package/build/angular/components/safe-area-view-props.js.map +1 -0
  41. package/build/angular/components/scroll-view-props.d.ts +76 -0
  42. package/build/angular/components/scroll-view-props.js +18 -0
  43. package/build/angular/components/scroll-view-props.js.map +1 -0
  44. package/build/angular/components/text-input-props.d.ts +45 -0
  45. package/build/angular/components/text-input-props.js +18 -0
  46. package/build/angular/components/text-input-props.js.map +1 -0
  47. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.d.ts +6 -0
  48. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js +2 -0
  49. package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js.map +1 -0
  50. package/build/angular/components/touchable-props.d.ts +14 -0
  51. package/build/angular/components/touchable-props.js +13 -0
  52. package/build/angular/components/touchable-props.js.map +1 -0
  53. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.d.ts +3 -0
  54. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js +2 -0
  55. package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js.map +1 -0
  56. package/build/angular/components/virtualized-list/index.d.ts +5 -1
  57. package/build/angular/components/virtualized-list/index.js +366 -280
  58. package/build/angular/components/virtualized-list/index.js.map +1 -1
  59. package/build/angular/components.d.ts +20 -26
  60. package/build/angular/components.js +12 -14
  61. package/build/angular/components.js.map +1 -1
  62. package/build/angular/create-portal/index.d.ts +2 -2
  63. package/build/angular/create-portal/index.js +5 -5
  64. package/build/angular/create-tunnel/index.js +1 -1
  65. package/build/angular/element-props.d.ts +53 -0
  66. package/build/angular/element-props.js +2 -0
  67. package/build/angular/element-props.js.map +1 -0
  68. package/build/angular/elements.d.ts +528 -0
  69. package/build/angular/elements.js +1444 -0
  70. package/build/angular/elements.js.map +1 -0
  71. package/build/angular/host-instance/index.js +1 -1
  72. package/build/angular/index.d.ts +4 -2
  73. package/build/angular/index.js +15 -1
  74. package/build/angular/index.js.map +1 -1
  75. package/build/angular/modules/animated/create-animated-component.d.ts +5 -6
  76. package/build/angular/modules/animated/create-animated-component.js +60 -73
  77. package/build/angular/modules/animated/create-animated-component.js.map +1 -1
  78. package/build/angular/modules/animated/index.js +1 -1
  79. package/build/angular/modules/animated/index.js.map +1 -1
  80. package/build/angular/modules/image/index.d.ts +3 -0
  81. package/build/angular/modules/image/index.js +16 -0
  82. package/build/angular/modules/image/index.js.map +1 -0
  83. package/build/angular/primitives/index.d.ts +18 -18
  84. package/build/angular/primitives/index.js +40 -36
  85. package/build/angular/primitives/index.js.map +1 -1
  86. package/build/angular/primitives/shared.d.ts +2 -3
  87. package/build/angular/primitives/shared.js +8 -53
  88. package/build/angular/primitives/shared.js.map +1 -1
  89. package/build/angular/register.d.ts +1 -1
  90. package/build/angular/register.js +12 -31
  91. package/build/angular/register.js.map +1 -1
  92. package/build/angular/render/index.js +3 -3
  93. package/build/angular/render/index.js.map +1 -1
  94. package/build/angular/renderer/index.js +113 -67
  95. package/build/angular/renderer/index.js.map +1 -1
  96. package/build/angular/renderer/value-change.d.ts +2 -0
  97. package/build/angular/renderer/value-change.js +9 -0
  98. package/build/angular/renderer/value-change.js.map +1 -0
  99. package/metro-config.cjs +54 -20
  100. package/metro-css-parser.cjs +2 -1
  101. package/package.json +5 -14
  102. package/src/anchor-host-registry.ts +1 -17
  103. package/src/change-detection-flush.ts +120 -0
  104. package/src/components/activity-indicator-props.ts +21 -0
  105. package/src/components/button-props.ts +26 -0
  106. package/src/components/flat-list/index.ts +12 -4
  107. package/src/components/image-background-props.ts +24 -0
  108. package/src/components/{image/shared.ts → image-shared.ts} +6 -1
  109. package/src/components/input-accessory-view-props.ts +21 -0
  110. package/src/components/keyboard-avoiding-view/index.ts +6 -9
  111. package/src/components/modal/index.ts +15 -7
  112. package/src/components/pressable-props.ts +73 -0
  113. package/src/components/refresh-control-props.ts +43 -0
  114. package/src/components/safe-area-view-props.ts +28 -0
  115. package/src/components/scroll-view-props.ts +109 -0
  116. package/src/components/text-input-props.ts +72 -0
  117. package/src/components/touchable-native-feedback/touchable-native-feedback-props.ts +23 -0
  118. package/src/components/touchable-props.ts +30 -0
  119. package/src/components/touchable-without-feedback/touchable-without-feedback-props.ts +21 -0
  120. package/src/components/virtualized-list/index.ts +239 -156
  121. package/src/components.ts +84 -35
  122. package/src/create-portal/index.ts +5 -5
  123. package/src/create-tunnel/index.ts +1 -1
  124. package/src/diagnostics.ts +1 -1
  125. package/src/element-props.ts +90 -0
  126. package/src/elements.ts +919 -0
  127. package/src/host-instance/index.ts +1 -1
  128. package/src/index.ts +52 -15
  129. package/src/modules/animated/create-animated-component.ts +50 -55
  130. package/src/modules/animated/index.ts +1 -1
  131. package/src/modules/image/index.ts +18 -0
  132. package/src/primitives/index.ts +22 -18
  133. package/src/primitives/shared.ts +11 -44
  134. package/src/register.ts +12 -40
  135. package/src/render/index.ts +3 -3
  136. package/src/renderer/index.ts +122 -73
  137. package/src/renderer/value-change.ts +8 -0
  138. package/babel-lower-host-primitives.cjs +0 -636
  139. package/build/angular/components/activity-indicator/index.android.d.ts +0 -13
  140. package/build/angular/components/activity-indicator/index.android.js +0 -29
  141. package/build/angular/components/activity-indicator/index.android.js.map +0 -1
  142. package/build/angular/components/activity-indicator/index.d.ts +0 -1
  143. package/build/angular/components/activity-indicator/index.ios.d.ts +0 -9
  144. package/build/angular/components/activity-indicator/index.ios.js +0 -26
  145. package/build/angular/components/activity-indicator/index.ios.js.map +0 -1
  146. package/build/angular/components/activity-indicator/index.js +0 -4
  147. package/build/angular/components/activity-indicator/index.js.map +0 -1
  148. package/build/angular/components/activity-indicator/shared.d.ts +0 -67
  149. package/build/angular/components/activity-indicator/shared.js +0 -260
  150. package/build/angular/components/activity-indicator/shared.js.map +0 -1
  151. package/build/angular/components/button.d.ts +0 -68
  152. package/build/angular/components/button.js +0 -360
  153. package/build/angular/components/button.js.map +0 -1
  154. package/build/angular/components/image/index.android.d.ts +0 -15
  155. package/build/angular/components/image/index.android.js +0 -83
  156. package/build/angular/components/image/index.android.js.map +0 -1
  157. package/build/angular/components/image/index.d.ts +0 -1
  158. package/build/angular/components/image/index.ios.d.ts +0 -15
  159. package/build/angular/components/image/index.ios.js +0 -83
  160. package/build/angular/components/image/index.ios.js.map +0 -1
  161. package/build/angular/components/image/index.js +0 -3
  162. package/build/angular/components/image/index.js.map +0 -1
  163. package/build/angular/components/image/shared.js.map +0 -1
  164. package/build/angular/components/image-background.d.ts +0 -85
  165. package/build/angular/components/image-background.js +0 -443
  166. package/build/angular/components/image-background.js.map +0 -1
  167. package/build/angular/components/input-accessory-view/index.d.ts +0 -66
  168. package/build/angular/components/input-accessory-view/index.js +0 -287
  169. package/build/angular/components/input-accessory-view/index.js.map +0 -1
  170. package/build/angular/components/pressable/index.d.ts +0 -134
  171. package/build/angular/components/pressable/index.js +0 -514
  172. package/build/angular/components/pressable/index.js.map +0 -1
  173. package/build/angular/components/refresh-control/index.d.ts +0 -91
  174. package/build/angular/components/refresh-control/index.js +0 -382
  175. package/build/angular/components/refresh-control/index.js.map +0 -1
  176. package/build/angular/components/safe-area-view/index.d.ts +0 -64
  177. package/build/angular/components/safe-area-view/index.js +0 -287
  178. package/build/angular/components/safe-area-view/index.js.map +0 -1
  179. package/build/angular/components/scroll-view/index.android.d.ts +0 -20
  180. package/build/angular/components/scroll-view/index.android.js +0 -262
  181. package/build/angular/components/scroll-view/index.android.js.map +0 -1
  182. package/build/angular/components/scroll-view/index.d.ts +0 -3
  183. package/build/angular/components/scroll-view/index.ios.d.ts +0 -8
  184. package/build/angular/components/scroll-view/index.ios.js +0 -92
  185. package/build/angular/components/scroll-view/index.ios.js.map +0 -1
  186. package/build/angular/components/scroll-view/index.js +0 -6
  187. package/build/angular/components/scroll-view/index.js.map +0 -1
  188. package/build/angular/components/scroll-view/projection.d.ts +0 -67
  189. package/build/angular/components/scroll-view/projection.js +0 -560
  190. package/build/angular/components/scroll-view/projection.js.map +0 -1
  191. package/build/angular/components/scroll-view/shared.d.ts +0 -241
  192. package/build/angular/components/scroll-view/shared.js +0 -848
  193. package/build/angular/components/scroll-view/shared.js.map +0 -1
  194. package/build/angular/components/scroll-view/sticky-header.d.ts +0 -40
  195. package/build/angular/components/scroll-view/sticky-header.js +0 -224
  196. package/build/angular/components/scroll-view/sticky-header.js.map +0 -1
  197. package/build/angular/components/switch/index.android.d.ts +0 -24
  198. package/build/angular/components/switch/index.android.js +0 -112
  199. package/build/angular/components/switch/index.android.js.map +0 -1
  200. package/build/angular/components/switch/index.d.ts +0 -1
  201. package/build/angular/components/switch/index.ios.d.ts +0 -23
  202. package/build/angular/components/switch/index.ios.js +0 -111
  203. package/build/angular/components/switch/index.ios.js.map +0 -1
  204. package/build/angular/components/switch/index.js +0 -4
  205. package/build/angular/components/switch/index.js.map +0 -1
  206. package/build/angular/components/switch/shared.d.ts +0 -49
  207. package/build/angular/components/switch/shared.js +0 -191
  208. package/build/angular/components/switch/shared.js.map +0 -1
  209. package/build/angular/components/text-input.d.ts +0 -167
  210. package/build/angular/components/text-input.js +0 -684
  211. package/build/angular/components/text-input.js.map +0 -1
  212. package/build/angular/components/touchable/index.d.ts +0 -283
  213. package/build/angular/components/touchable/index.js +0 -1453
  214. package/build/angular/components/touchable/index.js.map +0 -1
  215. package/build/angular/components/touchable-native-feedback/index.d.ts +0 -87
  216. package/build/angular/components/touchable-native-feedback/index.js +0 -409
  217. package/build/angular/components/touchable-native-feedback/index.js.map +0 -1
  218. package/build/angular/state-style.d.ts +0 -9
  219. package/build/angular/state-style.js +0 -39
  220. package/build/angular/state-style.js.map +0 -1
  221. package/metro-transformer.cjs +0 -69
  222. package/src/components/activity-indicator/index.android.ts +0 -23
  223. package/src/components/activity-indicator/index.ios.ts +0 -21
  224. package/src/components/activity-indicator/index.ts +0 -4
  225. package/src/components/activity-indicator/shared.ts +0 -225
  226. package/src/components/button.ts +0 -237
  227. package/src/components/image/index.android.ts +0 -95
  228. package/src/components/image/index.ios.ts +0 -95
  229. package/src/components/image/index.ts +0 -3
  230. package/src/components/image-background.ts +0 -308
  231. package/src/components/input-accessory-view/index.ts +0 -246
  232. package/src/components/pressable/index.ts +0 -522
  233. package/src/components/refresh-control/index.ts +0 -349
  234. package/src/components/safe-area-view/index.ts +0 -247
  235. package/src/components/scroll-view/index.android.ts +0 -205
  236. package/src/components/scroll-view/index.ios.ts +0 -81
  237. package/src/components/scroll-view/index.ts +0 -7
  238. package/src/components/scroll-view/projection.ts +0 -713
  239. package/src/components/scroll-view/shared.ts +0 -1093
  240. package/src/components/scroll-view/sticky-header.ts +0 -267
  241. package/src/components/switch/index.android.ts +0 -113
  242. package/src/components/switch/index.ios.ts +0 -112
  243. package/src/components/switch/index.ts +0 -4
  244. package/src/components/switch/shared.ts +0 -284
  245. package/src/components/text-input.ts +0 -669
  246. package/src/components/touchable/index.ts +0 -956
  247. package/src/components/touchable-native-feedback/index.ts +0 -327
  248. package/src/state-style.ts +0 -39
@@ -1,684 +0,0 @@
1
- // TextInput, the Angular lifecycle half. The folds/maps (value->text, the W3C/alias resolution)
2
- // and the controlled-write predicate live in @symbiote-native/components/state, the render (intrinsic
3
- // + native-prop mapping) in @symbiote-native/components/view, both shared verbatim with the React and
4
- // Vue adapters. Here Angular supplies only the lifecycle: renderTextInput picks ONE of two host
5
- // intrinsics at runtime (symbiote-text-input-managed / …-multiline-managed) via `@if`/`@else`,
6
- // each wired through the shared `SymbioteHostPropsDirective` (`[symbioteHostProps]="hostProps"`,
7
- // `../primitives/shared.ts`) so the flat resolved prop bag doesn't need enumerating as individual
8
- // `[prop]` bindings; a @ViewChild reading that directive (by its `#host` template ref, across
9
- // either branch) exposes `.node` — the host BY IDENTITY (so imperative commands hit the engine's
10
- // WeakMap mirror). A plain field holds the acknowledged event count, ngOnChanges runs the
11
- // controlled-write command, ngAfterViewInit drives the mount autoFocus, and the class itself is
12
- // the imperative handle (ITextInputHandle). The Angular twin of React's useRef/useState +
13
- // useLayoutEffect + useImperativeHandle and Vue's shallowRef + watch(flush:'post') + expose().
14
- //
15
- // Two Angular-specific seams. (1) Events: Angular forbids [onX] property bindings, so the host's
16
- // change/focus/blur + the remaining native events ride the structural (event) channel and route
17
- // to real @Output() EventEmitters (valueChange is DERIVED from change, never a native event —
18
- // React/Vue fold both into one onValueChange(text, event) callback, but Angular's EventEmitter
19
- // only carries one value, so valueChange stays text-only to keep [(value)] banana-in-a-box
20
- // working; `change` stays a second, separate @Output() for the raw event). The
21
- // non-function props travel the flat-bag path via the host-props directive. (2) Commit timing:
22
- // Angular's change detection is async/batched (zoneless), so a native command wired at lifecycle
23
- // time has no Fabric tag yet; the controlled write + autoFocus defer through whenCommitted, the
24
- // same gotcha Vue hits. The controlled handshake hinges on commanding native back with the
25
- // ACKNOWLEDGED event count (setTextAndSelection), never a plain prop re-push — see
26
- // @symbiote-native/components/state/text-input.
27
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, inject, Input, Output, ViewChild, } from '@angular/core';
28
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
29
- import { foldText, eventCountFromChange, textFromChange, shouldCommandText, renderTextInput, resolveAccessibilityProps, resolveTextInputProps, INITIAL_EVENT_COUNT, SELECTION_NONE, } from '@symbiote-native/components';
30
- import { blurTextInput, dispatchViewCommand, dlog, isSymbioteEvent, isSymbioteNode, setInputBlurred, setInputFocused, whenCommitted, } from '@symbiote-native/engine';
31
- import { anchorHostStyle, ManagedMultilineTextInputHost, SymbioteHostPropsDirective, SymbioteStyleInputDirective, ManagedTextInputHost, } from '../primitives';
32
- import { gateWanted, injectGateDemand, } from '../gate-demand';
33
- import * as i0 from "@angular/core";
34
- import * as i1 from "../primitives/shared";
35
- export class TextInput {
36
- value;
37
- defaultValue;
38
- placeholder;
39
- placeholderTextColor;
40
- editable;
41
- keyboardType;
42
- secureTextEntry;
43
- maxLength;
44
- multiline;
45
- selection;
46
- autoCapitalize;
47
- autoCorrect;
48
- autoComplete;
49
- textContentType;
50
- autoFocus;
51
- showSoftInputOnFocus;
52
- returnKeyType;
53
- selectTextOnFocus;
54
- scrollEnabled;
55
- numberOfLines;
56
- textAlign;
57
- blurOnSubmit;
58
- inputMode;
59
- enterKeyHint;
60
- readOnly;
61
- submitBehavior;
62
- cursorColor;
63
- selectionColor;
64
- selectionHandleColor;
65
- underlineColorAndroid;
66
- inputAccessoryViewID;
67
- style;
68
- testID;
69
- nativeID;
70
- // The event lifecycle as real Angular events: `(valueChange)="onText($event)"`, not
71
- // `[onValueChange]="onText"`. `focus`/`blur` collide with this same class's OWN imperative
72
- // `focus()`/`blur()` handle methods (ITextInputHandle — the RN ref API a parent calls via
73
- // `@ViewChild(TextInput)`), so those two alias their public @Output() binding name back to
74
- // `focus`/`blur` while the class member itself is named `focusEvent`/`blurEvent` — the same
75
- // `@Output(bindingName) memberName` alias this file already uses for `@Input('aria-label')`.
76
- // `value`/`valueChange` names match Switch/Slider exactly, so `[(value)]="text"` (banana-in-a-box)
77
- // works here too — see `valueChange`'s single-arg (text-only) signature above.
78
- valueChange = new EventEmitter();
79
- change = new EventEmitter();
80
- focusEvent = new EventEmitter();
81
- blurEvent = new EventEmitter();
82
- endEditing = new EventEmitter();
83
- submitEditing = new EventEmitter();
84
- keyPress = new EventEmitter();
85
- selectionChange = new EventEmitter();
86
- contentSizeChange = new EventEmitter();
87
- accessibilityAction = new EventEmitter();
88
- accessibilityTap = new EventEmitter();
89
- magicTap = new EventEmitter();
90
- accessibilityEscape = new EventEmitter();
91
- // Null unless a wrapper renders this TextInput in its own template. See `../gate-demand.ts`.
92
- gateDemand = injectGateDemand();
93
- accessible;
94
- accessibilityLabel;
95
- accessibilityHint;
96
- accessibilityRole;
97
- accessibilityState;
98
- accessibilityValue;
99
- accessibilityActions;
100
- accessibilityLabelledBy;
101
- importantForAccessibility;
102
- accessibilityLiveRegion;
103
- screenReaderFocusable;
104
- accessibilityViewIsModal;
105
- accessibilityElementsHidden;
106
- accessibilityIgnoresInvertColors;
107
- accessibilityLanguage;
108
- accessibilityRespondsToUserInteraction;
109
- accessibilityShowsLargeContentViewer;
110
- accessibilityLargeContentTitle;
111
- role;
112
- ariaLabel;
113
- ariaLabelledBy;
114
- ariaLive;
115
- ariaHidden;
116
- ariaBusy;
117
- ariaChecked;
118
- ariaDisabled;
119
- ariaExpanded;
120
- ariaSelected;
121
- hostRef;
122
- // This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
123
- // onto (see anchorHostStyle's doc comment) — NOT `hostRef` above, which targets the real inner
124
- // symbiote-text-input-managed(-multiline-managed) one level down.
125
- elementRef = inject(ElementRef);
126
- // Only setDisabledState() needs this: it mutates `editable` from OUTSIDE Angular's own binding
127
- // path (@angular/forms calling in directly), which doesn't itself schedule a tick under zoneless CD.
128
- changeDetector = inject(ChangeDetectorRef);
129
- // The count native last acknowledged; the controlled write / clear / setSelection echo it so
130
- // native's eventLag lands on 0 and the write applies. A plain field (read live by the imperative
131
- // handle), the Angular twin of React's useState / Vue's ref.
132
- mostRecentEventCount = INITIAL_EVENT_COUNT;
133
- // The last text native holds, as far as JS knows. Seeded on the first `value` change (the `text`
134
- // prop already carries the mount value down via createNode, so the FIRST controlled value is not
135
- // a divergence and must NOT re-command); later divergences flow through setTextAndSelection.
136
- lastNativeText;
137
- // JS-side focus state, mirrored from the focus/blur events for isFocused(): native exposes no
138
- // synchronous focus getter (RN's TextInputState holds the same).
139
- focused = false;
140
- cancelAutoFocus;
141
- // Mirrors SimpleChange.firstChange for the writeValue() path below (@angular/forms' own initial
142
- // write, distinct from ngOnChanges' firstChange, which never fires for a forms-driven write).
143
- isFirstFormWrite = true;
144
- get isMultiline() {
145
- return this.multiline === true;
146
- }
147
- get hostProps() {
148
- return renderTextInput({
149
- multiline: this.isMultiline,
150
- text: foldText(this.value, this.defaultValue),
151
- mostRecentEventCount: this.mostRecentEventCount,
152
- selection: this.selection,
153
- folded: this.foldedNativeProps,
154
- passthrough: this.buildPassthrough(),
155
- }).props;
156
- }
157
- ngOnChanges(changes) {
158
- const valueChange = changes['value'];
159
- if (valueChange === undefined)
160
- return;
161
- if (valueChange.firstChange) {
162
- // The initial value already reached native via createNode's hostProps — seed
163
- // lastNativeText instead of re-commanding it (see commitControlledValue's own comment on
164
- // why a redundant re-push isn't just wasteful — it can race a keystroke).
165
- this.lastNativeText = foldText(this.value, this.defaultValue);
166
- return;
167
- }
168
- this.commitControlledValue();
169
- }
170
- // ControlValueAccessor — @angular/forms calls these straight into this component, bypassing
171
- // template bindings/ngOnChanges entirely. `isFirstFormWrite` mirrors SimpleChange.firstChange:
172
- // the initial value already reached native via createNode's hostProps, so it must seed
173
- // lastNativeText, not re-command (see commitControlledValue's own comment on why a redundant
174
- // re-push isn't just wasteful — it can race a keystroke).
175
- writeValue(value) {
176
- this.value = value ?? undefined;
177
- if (this.isFirstFormWrite) {
178
- this.isFirstFormWrite = false;
179
- this.lastNativeText = foldText(this.value, this.defaultValue);
180
- return;
181
- }
182
- this.commitControlledValue();
183
- }
184
- registerOnChange(fn) {
185
- this.valueChange.subscribe(fn);
186
- }
187
- registerOnTouched(fn) {
188
- this.blurEvent.subscribe(() => fn());
189
- }
190
- setDisabledState(isDisabled) {
191
- this.editable = !isDisabled;
192
- this.changeDetector.markForCheck();
193
- }
194
- // autoFocus is driven in JS, not as a native prop: once the node is committed, command `focus`
195
- // down once (RN does the same via TextInputState.focusInput). Under Angular's async-batched
196
- // commit the node has no Fabric tag at ngAfterViewInit, so whenCommitted defers the command to
197
- // the commit that assigns the tag; cancelled on destroy so an un-committed pending focus leaks.
198
- ngAfterViewInit() {
199
- if (this.autoFocus !== true)
200
- return;
201
- const node = this.hostNode;
202
- if (node === undefined)
203
- return;
204
- dlog('TextInput autoFocus -> focus command');
205
- this.cancelAutoFocus = whenCommitted(node, () => dispatchViewCommand(node, 'focus', []));
206
- }
207
- ngOnDestroy() {
208
- this.cancelAutoFocus?.();
209
- }
210
- handleChange(event) {
211
- if (!isSymbioteEvent(event))
212
- return;
213
- // Event seam: the controlled handshake hinges on the change payload carrying `text`
214
- // (+ `eventCount`). iOS and Android Fabric can key these differently, so log the actual shape.
215
- dlog(`TextInput change keys=[${Object.keys(event.nativeEvent).join(',')}] ` +
216
- `text=${JSON.stringify(event.nativeEvent.text)} count=${JSON.stringify(event.nativeEvent.eventCount)}`);
217
- const text = textFromChange(event);
218
- if (text !== undefined) {
219
- // Record the text first, then the count, so the count never runs ahead of the text it
220
- // stands for. The host re-pushes the count on the parent's value-driven CD, never here:
221
- // pushing the stale `text` prop now (eventLag 0) would revert the keystroke.
222
- this.lastNativeText = text;
223
- this.valueChange.emit(text);
224
- }
225
- const count = eventCountFromChange(event);
226
- if (count !== undefined)
227
- this.mostRecentEventCount = count;
228
- this.change.emit(event);
229
- }
230
- handleFocus(event) {
231
- if (!isSymbioteEvent(event))
232
- return;
233
- this.focused = true;
234
- // Track focus app-wide so Keyboard.dismiss can blur this input without a ref.
235
- const node = this.hostNode;
236
- if (node !== undefined)
237
- setInputFocused(node);
238
- this.focusEvent.emit(event);
239
- }
240
- handleBlur(event) {
241
- if (!isSymbioteEvent(event))
242
- return;
243
- this.focused = false;
244
- const node = this.hostNode;
245
- if (node !== undefined)
246
- setInputBlurred(node);
247
- this.blurEvent.emit(event);
248
- }
249
- // Forward an engine event onto the matching @Output(), narrowing the template's untyped $event
250
- // first. Angular blocks [onX] property bindings, so every native event flows through (event).
251
- emit(emitter, event) {
252
- if (isSymbioteEvent(event))
253
- emitter.emit(event);
254
- }
255
- // `undefined` means `setEventListener` never sees a function, so the gate stays dark. A demand
256
- // from above overrides `.observed` for the same reason it does on Pressable: a wrapper's binding
257
- // is not a subscriber (`../gate-demand.ts`).
258
- gatedAccessibilityHandler(name) {
259
- const emitter = this[name];
260
- return gateWanted(this.gateDemand, name, emitter)
261
- ? event => this.emit(emitter, event)
262
- : undefined;
263
- }
264
- // Forwarded from the engine node so a TextInput ref is not poorer than any other host ref — an
265
- // instance exposing only the five methods below CLOSES the node off (see ITextInputHandle's own
266
- // comment). No Angular-specific state to add: these four pass straight through.
267
- measure(callback) {
268
- this.hostNode?.measure(callback);
269
- }
270
- measureInWindow(callback) {
271
- this.hostNode?.measureInWindow(callback);
272
- }
273
- measureLayout(relativeToNativeNode, onSuccess, onFail) {
274
- this.hostNode?.measureLayout(relativeToNativeNode, onSuccess, onFail);
275
- }
276
- setNativeProps(nativeProps) {
277
- this.hostNode?.setNativeProps(nativeProps);
278
- }
279
- // The imperative API RN exposes on a TextInput ref; in Angular the component instance IS the
280
- // handle (a parent reads it via @ViewChild(TextInput) and calls these). focus/blur drive native
281
- // view commands; clear and setSelection reuse setTextAndSelection (the same stale-safe path as a
282
- // controlled write) echoing the acknowledged event count.
283
- focus() {
284
- const node = this.hostNode;
285
- if (node !== undefined)
286
- dispatchViewCommand(node, 'focus', []);
287
- }
288
- blur() {
289
- // Routes through TextInputState so the app-wide focus tracking clears too.
290
- blurTextInput(this.hostNode ?? null);
291
- }
292
- clear() {
293
- const node = this.hostNode;
294
- if (node === undefined)
295
- return;
296
- dispatchViewCommand(node, 'setTextAndSelection', [
297
- this.mostRecentEventCount,
298
- '',
299
- 0,
300
- 0,
301
- ]);
302
- this.lastNativeText = '';
303
- }
304
- isFocused() {
305
- return this.focused;
306
- }
307
- setSelection(start, end) {
308
- const node = this.hostNode;
309
- if (node === undefined)
310
- return;
311
- const current = this.lastNativeText ?? '';
312
- dispatchViewCommand(node, 'setTextAndSelection', [
313
- this.mostRecentEventCount,
314
- current,
315
- start,
316
- end,
317
- ]);
318
- }
319
- // Controlled write: when JS-side `value` diverges from what native reported, command the new
320
- // text down with the acknowledged count; a plain prop re-push would race the user's keystrokes.
321
- // whenCommitted defers it past the async commit so the node's Fabric tag exists; the predicate
322
- // narrows `value` to string and makes the call a no-op unless the text diverged.
323
- commitControlledValue() {
324
- const node = this.hostNode;
325
- if (node === undefined)
326
- return;
327
- const value = this.value;
328
- if (!shouldCommandText(this.lastNativeText, value))
329
- return;
330
- const selStart = this.selection?.start ?? SELECTION_NONE;
331
- const selEnd = this.selection?.end ?? this.selection?.start ?? SELECTION_NONE;
332
- const count = this.mostRecentEventCount;
333
- dlog(`TextInput setTextAndSelection count=${count} text=${JSON.stringify(value)}`);
334
- this.lastNativeText = value;
335
- whenCommitted(node, () => dispatchViewCommand(node, 'setTextAndSelection', [
336
- count,
337
- value,
338
- selStart,
339
- selEnd,
340
- ]));
341
- }
342
- buildPassthrough() {
343
- return {
344
- ...this.foldedAccessibility,
345
- accessible: this.accessible,
346
- // NOT template bindings, unlike every other event on this component's two host tags. These
347
- // four are `on*`-GATED Fabric events (`.claude/rules/fabric-boolean-event-gates.md`): native
348
- // fires them only when the committed payload carries a FUNCTION at that key, and a template
349
- // `(accessibilityAction)="..."` binding is present unconditionally — so it lit all four gates
350
- // on every TextInput in every app whether or not anything listened. Routed through the flat
351
- // bag instead, the same shape Pressable uses.
352
- onAccessibilityAction: this.gatedAccessibilityHandler('accessibilityAction'),
353
- onAccessibilityTap: this.gatedAccessibilityHandler('accessibilityTap'),
354
- onMagicTap: this.gatedAccessibilityHandler('magicTap'),
355
- onAccessibilityEscape: this.gatedAccessibilityHandler('accessibilityEscape'),
356
- testID: this.testID,
357
- nativeID: this.nativeID,
358
- placeholder: this.placeholder,
359
- placeholderTextColor: this.placeholderTextColor,
360
- maxLength: this.maxLength,
361
- secureTextEntry: this.secureTextEntry,
362
- autoCapitalize: this.autoCapitalize,
363
- autoCorrect: this.autoCorrect,
364
- selectTextOnFocus: this.selectTextOnFocus,
365
- scrollEnabled: this.scrollEnabled,
366
- numberOfLines: this.numberOfLines,
367
- textAlign: this.textAlign,
368
- inputAccessoryViewID: this.inputAccessoryViewID,
369
- style: [anchorHostStyle(this.elementRef), this.style],
370
- };
371
- }
372
- get foldedNativeProps() {
373
- return resolveTextInputProps({
374
- inputMode: this.inputMode,
375
- keyboardType: this.keyboardType,
376
- enterKeyHint: this.enterKeyHint,
377
- returnKeyType: this.returnKeyType,
378
- readOnly: this.readOnly,
379
- editable: this.editable,
380
- submitBehavior: this.submitBehavior,
381
- blurOnSubmit: this.blurOnSubmit,
382
- multiline: this.isMultiline,
383
- cursorColor: this.cursorColor,
384
- selectionColor: this.selectionColor,
385
- selectionHandleColor: this.selectionHandleColor,
386
- autoComplete: this.autoComplete,
387
- textContentType: this.textContentType,
388
- showSoftInputOnFocus: this.showSoftInputOnFocus,
389
- underlineColorAndroid: this.underlineColorAndroid,
390
- });
391
- }
392
- // Fold the web aria-*/role aliases into the canonical accessibility* props once per render, so
393
- // the host node never sees an aria-* key (native ignores them) — the shared transform every
394
- // adapter runs. TextInput is its own host element (not a View wrapper), so it folds a11y here.
395
- get foldedAccessibility() {
396
- return resolveAccessibilityProps({
397
- accessibilityLabel: this.accessibilityLabel,
398
- accessibilityHint: this.accessibilityHint,
399
- accessibilityRole: this.accessibilityRole,
400
- accessibilityState: this.accessibilityState,
401
- accessibilityValue: this.accessibilityValue,
402
- accessibilityActions: this.accessibilityActions,
403
- accessibilityLabelledBy: this.accessibilityLabelledBy,
404
- importantForAccessibility: this.importantForAccessibility,
405
- accessibilityLiveRegion: this.accessibilityLiveRegion,
406
- screenReaderFocusable: this.screenReaderFocusable,
407
- accessibilityViewIsModal: this.accessibilityViewIsModal,
408
- accessibilityElementsHidden: this.accessibilityElementsHidden,
409
- accessibilityIgnoresInvertColors: this.accessibilityIgnoresInvertColors,
410
- accessibilityLanguage: this.accessibilityLanguage,
411
- accessibilityRespondsToUserInteraction: this.accessibilityRespondsToUserInteraction,
412
- accessibilityShowsLargeContentViewer: this.accessibilityShowsLargeContentViewer,
413
- accessibilityLargeContentTitle: this.accessibilityLargeContentTitle,
414
- role: this.role,
415
- 'aria-label': this.ariaLabel,
416
- 'aria-labelledby': this.ariaLabelledBy,
417
- 'aria-live': this.ariaLive,
418
- 'aria-hidden': this.ariaHidden,
419
- 'aria-busy': this.ariaBusy,
420
- 'aria-checked': this.ariaChecked,
421
- 'aria-disabled': this.ariaDisabled,
422
- 'aria-expanded': this.ariaExpanded,
423
- 'aria-selected': this.ariaSelected,
424
- });
425
- }
426
- get hostNode() {
427
- const native = this.hostRef?.node;
428
- return isSymbioteNode(native) ? native : undefined;
429
- }
430
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
431
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: TextInput, isStandalone: true, selector: "TextInput", inputs: { value: "value", defaultValue: "defaultValue", placeholder: "placeholder", placeholderTextColor: "placeholderTextColor", editable: "editable", keyboardType: "keyboardType", secureTextEntry: "secureTextEntry", maxLength: "maxLength", multiline: "multiline", selection: "selection", autoCapitalize: "autoCapitalize", autoCorrect: "autoCorrect", autoComplete: "autoComplete", textContentType: "textContentType", autoFocus: "autoFocus", showSoftInputOnFocus: "showSoftInputOnFocus", returnKeyType: "returnKeyType", selectTextOnFocus: "selectTextOnFocus", scrollEnabled: "scrollEnabled", numberOfLines: "numberOfLines", textAlign: "textAlign", blurOnSubmit: "blurOnSubmit", inputMode: "inputMode", enterKeyHint: "enterKeyHint", readOnly: "readOnly", submitBehavior: "submitBehavior", cursorColor: "cursorColor", selectionColor: "selectionColor", selectionHandleColor: "selectionHandleColor", underlineColorAndroid: "underlineColorAndroid", inputAccessoryViewID: "inputAccessoryViewID", style: "style", testID: "testID", nativeID: "nativeID", 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", role: "role", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLive: ["aria-live", "ariaLive"], ariaHidden: ["aria-hidden", "ariaHidden"], ariaBusy: ["aria-busy", "ariaBusy"], ariaChecked: ["aria-checked", "ariaChecked"], ariaDisabled: ["aria-disabled", "ariaDisabled"], ariaExpanded: ["aria-expanded", "ariaExpanded"], ariaSelected: ["aria-selected", "ariaSelected"] }, outputs: { valueChange: "valueChange", change: "change", focusEvent: "focus", blurEvent: "blur", endEditing: "endEditing", submitEditing: "submitEditing", keyPress: "keyPress", selectionChange: "selectionChange", contentSizeChange: "contentSizeChange", accessibilityAction: "accessibilityAction", accessibilityTap: "accessibilityTap", magicTap: "magicTap", accessibilityEscape: "accessibilityEscape" }, providers: [
432
- {
433
- provide: NG_VALUE_ACCESSOR,
434
- useExisting: forwardRef(() => TextInput),
435
- multi: true,
436
- },
437
- ], viewQueries: [{ propertyName: "hostRef", first: true, predicate: ["host"], descendants: true, read: SymbioteHostPropsDirective }], usesOnChanges: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
438
- @if (isMultiline) {
439
- <symbiote-text-input-multiline-managed
440
- #host
441
- [symbioteHostProps]="hostProps"
442
- (change)="handleChange($event)"
443
- (focus)="handleFocus($event)"
444
- (blur)="handleBlur($event)"
445
- (selectionChange)="emit(selectionChange, $event)"
446
- (submitEditing)="emit(submitEditing, $event)"
447
- (keyPress)="emit(keyPress, $event)"
448
- (endEditing)="emit(endEditing, $event)"
449
- (contentSizeChange)="emit(contentSizeChange, $event)"
450
- ></symbiote-text-input-multiline-managed>
451
- } @else {
452
- <symbiote-text-input-managed
453
- #host
454
- [symbioteHostProps]="hostProps"
455
- (change)="handleChange($event)"
456
- (focus)="handleFocus($event)"
457
- (blur)="handleBlur($event)"
458
- (selectionChange)="emit(selectionChange, $event)"
459
- (submitEditing)="emit(submitEditing, $event)"
460
- (keyPress)="emit(keyPress, $event)"
461
- (endEditing)="emit(endEditing, $event)"
462
- (contentSizeChange)="emit(contentSizeChange, $event)"
463
- ></symbiote-text-input-managed>
464
- }
465
- `, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: ManagedTextInputHost, selector: "symbiote-text-input-managed" }, { kind: "component", type: ManagedMultilineTextInputHost, selector: "symbiote-text-input-multiline-managed" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
466
- }
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInput, decorators: [{
468
- type: Component,
469
- args: [{
470
- selector: 'TextInput',
471
- standalone: true,
472
- hostDirectives: [
473
- { directive: SymbioteStyleInputDirective, inputs: ['style'] },
474
- ],
475
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
476
- imports: [
477
- SymbioteHostPropsDirective,
478
- ManagedTextInputHost,
479
- ManagedMultilineTextInputHost,
480
- ],
481
- changeDetection: ChangeDetectionStrategy.OnPush,
482
- providers: [
483
- {
484
- provide: NG_VALUE_ACCESSOR,
485
- useExisting: forwardRef(() => TextInput),
486
- multi: true,
487
- },
488
- ],
489
- template: `
490
- @if (isMultiline) {
491
- <symbiote-text-input-multiline-managed
492
- #host
493
- [symbioteHostProps]="hostProps"
494
- (change)="handleChange($event)"
495
- (focus)="handleFocus($event)"
496
- (blur)="handleBlur($event)"
497
- (selectionChange)="emit(selectionChange, $event)"
498
- (submitEditing)="emit(submitEditing, $event)"
499
- (keyPress)="emit(keyPress, $event)"
500
- (endEditing)="emit(endEditing, $event)"
501
- (contentSizeChange)="emit(contentSizeChange, $event)"
502
- ></symbiote-text-input-multiline-managed>
503
- } @else {
504
- <symbiote-text-input-managed
505
- #host
506
- [symbioteHostProps]="hostProps"
507
- (change)="handleChange($event)"
508
- (focus)="handleFocus($event)"
509
- (blur)="handleBlur($event)"
510
- (selectionChange)="emit(selectionChange, $event)"
511
- (submitEditing)="emit(submitEditing, $event)"
512
- (keyPress)="emit(keyPress, $event)"
513
- (endEditing)="emit(endEditing, $event)"
514
- (contentSizeChange)="emit(contentSizeChange, $event)"
515
- ></symbiote-text-input-managed>
516
- }
517
- `,
518
- }]
519
- }], propDecorators: { value: [{
520
- type: Input
521
- }], defaultValue: [{
522
- type: Input
523
- }], placeholder: [{
524
- type: Input
525
- }], placeholderTextColor: [{
526
- type: Input
527
- }], editable: [{
528
- type: Input
529
- }], keyboardType: [{
530
- type: Input
531
- }], secureTextEntry: [{
532
- type: Input
533
- }], maxLength: [{
534
- type: Input
535
- }], multiline: [{
536
- type: Input
537
- }], selection: [{
538
- type: Input
539
- }], autoCapitalize: [{
540
- type: Input
541
- }], autoCorrect: [{
542
- type: Input
543
- }], autoComplete: [{
544
- type: Input
545
- }], textContentType: [{
546
- type: Input
547
- }], autoFocus: [{
548
- type: Input
549
- }], showSoftInputOnFocus: [{
550
- type: Input
551
- }], returnKeyType: [{
552
- type: Input
553
- }], selectTextOnFocus: [{
554
- type: Input
555
- }], scrollEnabled: [{
556
- type: Input
557
- }], numberOfLines: [{
558
- type: Input
559
- }], textAlign: [{
560
- type: Input
561
- }], blurOnSubmit: [{
562
- type: Input
563
- }], inputMode: [{
564
- type: Input
565
- }], enterKeyHint: [{
566
- type: Input
567
- }], readOnly: [{
568
- type: Input
569
- }], submitBehavior: [{
570
- type: Input
571
- }], cursorColor: [{
572
- type: Input
573
- }], selectionColor: [{
574
- type: Input
575
- }], selectionHandleColor: [{
576
- type: Input
577
- }], underlineColorAndroid: [{
578
- type: Input
579
- }], inputAccessoryViewID: [{
580
- type: Input
581
- }], style: [{
582
- type: Input
583
- }], testID: [{
584
- type: Input
585
- }], nativeID: [{
586
- type: Input
587
- }], valueChange: [{
588
- type: Output
589
- }], change: [{
590
- type: Output
591
- }], focusEvent: [{
592
- type: Output,
593
- args: ['focus']
594
- }], blurEvent: [{
595
- type: Output,
596
- args: ['blur']
597
- }], endEditing: [{
598
- type: Output
599
- }], submitEditing: [{
600
- type: Output
601
- }], keyPress: [{
602
- type: Output
603
- }], selectionChange: [{
604
- type: Output
605
- }], contentSizeChange: [{
606
- type: Output
607
- }], accessibilityAction: [{
608
- type: Output
609
- }], accessibilityTap: [{
610
- type: Output
611
- }], magicTap: [{
612
- type: Output
613
- }], accessibilityEscape: [{
614
- type: Output
615
- }], accessible: [{
616
- type: Input
617
- }], accessibilityLabel: [{
618
- type: Input
619
- }], accessibilityHint: [{
620
- type: Input
621
- }], accessibilityRole: [{
622
- type: Input
623
- }], accessibilityState: [{
624
- type: Input
625
- }], accessibilityValue: [{
626
- type: Input
627
- }], accessibilityActions: [{
628
- type: Input
629
- }], accessibilityLabelledBy: [{
630
- type: Input
631
- }], importantForAccessibility: [{
632
- type: Input
633
- }], accessibilityLiveRegion: [{
634
- type: Input
635
- }], screenReaderFocusable: [{
636
- type: Input
637
- }], accessibilityViewIsModal: [{
638
- type: Input
639
- }], accessibilityElementsHidden: [{
640
- type: Input
641
- }], accessibilityIgnoresInvertColors: [{
642
- type: Input
643
- }], accessibilityLanguage: [{
644
- type: Input
645
- }], accessibilityRespondsToUserInteraction: [{
646
- type: Input
647
- }], accessibilityShowsLargeContentViewer: [{
648
- type: Input
649
- }], accessibilityLargeContentTitle: [{
650
- type: Input
651
- }], role: [{
652
- type: Input
653
- }], ariaLabel: [{
654
- type: Input,
655
- args: ['aria-label']
656
- }], ariaLabelledBy: [{
657
- type: Input,
658
- args: ['aria-labelledby']
659
- }], ariaLive: [{
660
- type: Input,
661
- args: ['aria-live']
662
- }], ariaHidden: [{
663
- type: Input,
664
- args: ['aria-hidden']
665
- }], ariaBusy: [{
666
- type: Input,
667
- args: ['aria-busy']
668
- }], ariaChecked: [{
669
- type: Input,
670
- args: ['aria-checked']
671
- }], ariaDisabled: [{
672
- type: Input,
673
- args: ['aria-disabled']
674
- }], ariaExpanded: [{
675
- type: Input,
676
- args: ['aria-expanded']
677
- }], ariaSelected: [{
678
- type: Input,
679
- args: ['aria-selected']
680
- }], hostRef: [{
681
- type: ViewChild,
682
- args: ['host', { read: SymbioteHostPropsDirective }]
683
- }] } });
684
- //# sourceMappingURL=text-input.js.map