@symbiote-native/angular 2.0.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/babel-register-composed.cjs +0 -8
- package/build/angular/callback-host.d.ts +25 -0
- package/build/angular/callback-host.js +211 -0
- package/build/angular/callback-host.js.map +1 -0
- package/build/angular/change-detection-flush.d.ts +14 -2
- package/build/angular/change-detection-flush.js +54 -6
- package/build/angular/change-detection-flush.js.map +1 -1
- package/build/angular/components/flat-list/index.js +39 -86
- package/build/angular/components/flat-list/index.js.map +1 -1
- package/build/angular/components/image-shared.js +49 -110
- package/build/angular/components/image-shared.js.map +1 -1
- package/build/angular/components/keyboard-avoiding-view/index.js +33 -72
- package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
- package/build/angular/components/modal/index.js +58 -103
- package/build/angular/components/modal/index.js.map +1 -1
- package/build/angular/components/pressable-props.d.ts +2 -0
- package/build/angular/components/section-list/index.js +20 -103
- package/build/angular/components/section-list/index.js.map +1 -1
- package/build/angular/components/touchable-props.d.ts +1 -0
- package/build/angular/components/virtualized-list/directives.js +32 -22
- package/build/angular/components/virtualized-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-list/index.d.ts +7 -1
- package/build/angular/components/virtualized-list/index.js +350 -359
- package/build/angular/components/virtualized-list/index.js.map +1 -1
- package/build/angular/components/virtualized-section-list/directives.js +20 -12
- package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-section-list/index.js +36 -142
- package/build/angular/components/virtualized-section-list/index.js.map +1 -1
- package/build/angular/components.d.ts +1 -1
- package/build/angular/components.js +1 -1
- package/build/angular/components.js.map +1 -1
- package/build/angular/create-portal/index.js +9 -8
- package/build/angular/create-portal/index.js.map +1 -1
- package/build/angular/create-tunnel/index.js +13 -12
- package/build/angular/create-tunnel/index.js.map +1 -1
- package/build/angular/descriptor-to-angular/index.js +6 -6
- package/build/angular/descriptor-to-angular/index.js.map +1 -1
- package/build/angular/diagnostics.d.ts +13 -0
- package/build/angular/diagnostics.js +18 -0
- package/build/angular/diagnostics.js.map +1 -1
- package/build/angular/element-props.d.ts +1 -3
- package/build/angular/elements.d.ts +46 -32
- package/build/angular/elements.js +217 -434
- package/build/angular/elements.js.map +1 -1
- package/build/angular/index.d.ts +3 -1
- package/build/angular/index.js +44 -13
- package/build/angular/index.js.map +1 -1
- package/build/angular/modules/animated/animated-leaf-binder.js +0 -2
- package/build/angular/modules/animated/animated-leaf-binder.js.map +1 -1
- package/build/angular/modules/animated/create-animated-component.js +69 -74
- package/build/angular/modules/animated/create-animated-component.js.map +1 -1
- package/build/angular/modules/animated/index.d.ts +30 -19
- package/build/angular/modules/status-bar/index.js +2 -8
- package/build/angular/modules/status-bar/index.js.map +1 -1
- package/build/angular/primitives/index.d.ts +14 -28
- package/build/angular/primitives/index.js +44 -107
- package/build/angular/primitives/index.js.map +1 -1
- package/build/angular/primitives/shared.d.ts +1 -0
- package/build/angular/primitives/shared.js +47 -32
- package/build/angular/primitives/shared.js.map +1 -1
- package/build/angular/render/index.js +34 -1
- package/build/angular/render/index.js.map +1 -1
- package/build/angular/renderer/index.d.ts +56 -0
- package/build/angular/renderer/index.js +295 -114
- package/build/angular/renderer/index.js.map +1 -1
- package/build/angular/runtime-matching.d.ts +9 -0
- package/build/angular/runtime-matching.js +82 -0
- package/build/angular/runtime-matching.js.map +1 -0
- package/build/angular/services/color-scheme.service.js +4 -4
- package/build/angular/services/color-scheme.service.js.map +1 -1
- package/build/angular/services/window-dimensions.service.js +4 -4
- package/build/angular/services/window-dimensions.service.js.map +1 -1
- package/build/angular/style-host.d.ts +11 -0
- package/build/angular/style-host.js +86 -0
- package/build/angular/style-host.js.map +1 -0
- package/package.json +5 -5
- package/src/callback-host.ts +229 -0
- package/src/change-detection-flush.ts +62 -9
- package/src/components/flat-list/index.ts +2 -1
- package/src/components/keyboard-avoiding-view/index.ts +8 -0
- package/src/components/pressable-props.ts +8 -0
- package/src/components/touchable-props.ts +4 -0
- package/src/components/virtualized-list/index.ts +98 -45
- package/src/components.ts +0 -2
- package/src/diagnostics.ts +18 -0
- package/src/element-props.ts +1 -5
- package/src/elements.ts +159 -38
- package/src/index.ts +47 -14
- package/src/primitives/index.ts +14 -70
- package/src/primitives/shared.ts +21 -6
- package/src/render/index.ts +44 -0
- package/src/renderer/index.ts +347 -104
- package/src/runtime-matching.ts +80 -0
- package/src/style-host.ts +94 -0
- package/tsconfig.angular.base.json +11 -0
|
@@ -32,10 +32,13 @@
|
|
|
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, EventEmitter, Input, Output, Renderer2, forwardRef, inject, } from '@angular/core';
|
|
35
|
+
import { ChangeDetectorRef, Directive, ElementRef, ErrorHandler, EventEmitter, Input, Output, Renderer2, forwardRef, inject, } from '@angular/core';
|
|
36
36
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
37
37
|
import { VALUE_CHANGE_EVENT } from './renderer/value-change';
|
|
38
|
-
import {
|
|
38
|
+
import { registerViewFlush, unregisterViewFlush, } from './change-detection-flush';
|
|
39
|
+
import { SymbioteCallbackHost } from './callback-host';
|
|
40
|
+
import { withholdFromRuntimeMatching } from './runtime-matching';
|
|
41
|
+
import { SymbioteStyleHost } from './style-host';
|
|
39
42
|
import * as i0 from "@angular/core";
|
|
40
43
|
/**
|
|
41
44
|
* The shared half of every element directive: the prop surface all tags accept, and the ONE
|
|
@@ -46,117 +49,23 @@ import * as i0 from "@angular/core";
|
|
|
46
49
|
* — so without this loop a bare tag commits nothing at all. It stays generic on purpose: per-prop
|
|
47
50
|
* forwarding code is a component wrapper by another name, which is what this migration removes.
|
|
48
51
|
* `renderer.setProperty` lands in the adapter's own renderer, which routes the value through the
|
|
49
|
-
* engine's `routeProp` and applies the `id` -> `nativeID`
|
|
52
|
+
* engine's `routeProp` and applies the `id` -> `nativeID` alias.
|
|
50
53
|
*/
|
|
51
54
|
export class SymbioteElement {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// component path's `SymbioteHostPropsDirective`, which has the identical deficit — see
|
|
57
|
-
// `createCallbackWrapper`.
|
|
58
|
-
wrapCallback = createCallbackWrapper(this.detector, this.host.nativeElement);
|
|
59
|
-
testID;
|
|
60
|
-
nativeID;
|
|
61
|
-
id;
|
|
62
|
-
accessible;
|
|
63
|
-
accessibilityLabel;
|
|
64
|
-
accessibilityHint;
|
|
65
|
-
accessibilityRole;
|
|
66
|
-
accessibilityState;
|
|
67
|
-
accessibilityValue;
|
|
68
|
-
accessibilityActions;
|
|
69
|
-
accessibilityLabelledBy;
|
|
70
|
-
importantForAccessibility;
|
|
71
|
-
accessibilityLiveRegion;
|
|
72
|
-
screenReaderFocusable;
|
|
73
|
-
accessibilityViewIsModal;
|
|
74
|
-
accessibilityElementsHidden;
|
|
75
|
-
accessibilityIgnoresInvertColors;
|
|
76
|
-
accessibilityLanguage;
|
|
77
|
-
accessibilityRespondsToUserInteraction;
|
|
78
|
-
accessibilityShowsLargeContentViewer;
|
|
79
|
-
accessibilityLargeContentTitle;
|
|
80
|
-
onAccessibilityAction;
|
|
81
|
-
onAccessibilityTap;
|
|
82
|
-
onMagicTap;
|
|
83
|
-
onAccessibilityEscape;
|
|
84
|
-
// The web aliases. Native reads only `accessibility*`; the engine folds these on the way in.
|
|
85
|
-
role;
|
|
86
|
-
'aria-label';
|
|
87
|
-
'aria-labelledby';
|
|
88
|
-
'aria-live';
|
|
89
|
-
'aria-hidden';
|
|
90
|
-
'aria-busy';
|
|
91
|
-
'aria-checked';
|
|
92
|
-
'aria-disabled';
|
|
93
|
-
'aria-expanded';
|
|
94
|
-
'aria-selected';
|
|
95
|
-
'aria-modal';
|
|
96
|
-
'aria-valuemax';
|
|
97
|
-
'aria-valuemin';
|
|
98
|
-
'aria-valuenow';
|
|
99
|
-
'aria-valuetext';
|
|
100
|
-
// The responder gates return a boolean, which an Angular `(event)` binding cannot carry back to
|
|
101
|
-
// the caller — so the whole family is inputs, never outputs.
|
|
102
|
-
onStartShouldSetResponder;
|
|
103
|
-
onStartShouldSetResponderCapture;
|
|
104
|
-
onMoveShouldSetResponder;
|
|
105
|
-
onMoveShouldSetResponderCapture;
|
|
106
|
-
onResponderGrant;
|
|
107
|
-
onResponderReject;
|
|
108
|
-
onResponderStart;
|
|
109
|
-
onResponderMove;
|
|
110
|
-
onResponderEnd;
|
|
111
|
-
onResponderRelease;
|
|
112
|
-
onResponderTerminate;
|
|
113
|
-
onResponderTerminationRequest;
|
|
114
|
-
pointerEvents;
|
|
115
|
-
hitSlop;
|
|
116
|
-
focusable;
|
|
117
|
-
collapsable;
|
|
118
|
-
removeClippedSubviews;
|
|
119
|
-
renderToHardwareTextureAndroid;
|
|
120
|
-
shouldRasterizeIOS;
|
|
121
|
-
needsOffscreenAlphaCompositing;
|
|
122
|
-
symbioteStyle;
|
|
123
|
-
// Declared, and the reason is the one `element-props.ts` used to give for NOT declaring it —
|
|
124
|
-
// reversed by measurement. `[style]` on an element with no directive input reaches Angular's own
|
|
125
|
-
// CSS styling engine (`ɵɵstyleMap`), which cannot represent an RN StyleProp: an ARRAY decomposes
|
|
126
|
-
// into numeric-index keys and a FUNCTION — the press-state callback this ecosystem writes — dies
|
|
127
|
-
// in `toStylingKeyValueArray` as "ASSERTION ERROR: Unsupported styling type: function", taking
|
|
128
|
-
// the whole enclosing template update with it. Device-reported 2026-09-11: every `ActionButton`
|
|
129
|
-
// in examples/angular painted as an empty bordered box, because the throw aborted the update
|
|
130
|
-
// before its `<text>` child was ever reached.
|
|
131
|
-
//
|
|
132
|
-
// A declared input CLAIMS the binding at compile time, so it never reaches the styling engine —
|
|
133
|
-
// the same mechanism the primitive host COMPONENTS have always relied on
|
|
134
|
-
// (`primitives/shared.ts`), which is why `<Pressable [style]>` worked and its replacement tag did
|
|
135
|
-
// not. `[style.borderWidth.px]` is a different instruction (`ɵɵstyleProp`) and is untouched: it
|
|
136
|
-
// still reaches `Renderer2.setStyle`, which merges per key.
|
|
137
|
-
//
|
|
138
|
-
// The press-state callback rides the BASE type rather than `PressableElement` alone: a subclass
|
|
139
|
-
// cannot widen an inherited property, and only the pressables have a `pressed` to read — so on
|
|
140
|
-
// any other tag the engine resolves it at `pressed: false` and the looseness is in the type, not
|
|
141
|
-
// in what commits.
|
|
142
|
-
style;
|
|
143
|
-
// The flat-bag spelling of the events below. `(press)` and `[onPress]` are both supported and
|
|
144
|
-
// land in the same place; an app that already holds a handler bag binds the props.
|
|
145
|
-
onPress;
|
|
146
|
-
onPressIn;
|
|
147
|
-
onPressOut;
|
|
148
|
-
onPressMove;
|
|
149
|
-
onLongPress;
|
|
150
|
-
onLayout;
|
|
151
|
-
onFocus;
|
|
152
|
-
onBlur;
|
|
55
|
+
constructor() {
|
|
56
|
+
this.renderer = inject(Renderer2);
|
|
57
|
+
this.host = inject(ElementRef);
|
|
58
|
+
}
|
|
153
59
|
ngOnChanges(changes) {
|
|
154
60
|
for (const name of Object.keys(changes)) {
|
|
155
|
-
this.renderer.setProperty(this.host.nativeElement, name,
|
|
61
|
+
this.renderer.setProperty(this.host.nativeElement, name,
|
|
62
|
+
// Unwrapped on purpose: `SymbioteRenderer.setProperty` is where an `on*` value is wrapped
|
|
63
|
+
// now, and it is the call this line makes.
|
|
64
|
+
changes[name]?.currentValue);
|
|
156
65
|
}
|
|
157
66
|
}
|
|
158
|
-
static
|
|
159
|
-
static
|
|
67
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
68
|
+
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", class: "class", onPress: "onPress", onPressIn: "onPressIn", onPressOut: "onPressOut", onPressMove: "onPressMove", onLongPress: "onLongPress", onLayout: "onLayout", onFocus: "onFocus", onBlur: "onBlur" }, usesOnChanges: true, ngImport: i0 }); }
|
|
160
69
|
}
|
|
161
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteElement, decorators: [{
|
|
162
71
|
type: Directive
|
|
@@ -280,10 +189,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
280
189
|
type: Input
|
|
281
190
|
}], needsOffscreenAlphaCompositing: [{
|
|
282
191
|
type: Input
|
|
283
|
-
}], symbioteStyle: [{
|
|
284
|
-
type: Input
|
|
285
192
|
}], style: [{
|
|
286
193
|
type: Input
|
|
194
|
+
}], class: [{
|
|
195
|
+
type: Input
|
|
287
196
|
}], onPress: [{
|
|
288
197
|
type: Input
|
|
289
198
|
}], onPressIn: [{
|
|
@@ -314,9 +223,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
314
223
|
class ReadBackElement extends SymbioteElement {
|
|
315
224
|
constructor() {
|
|
316
225
|
super();
|
|
226
|
+
// ITS OWN, now that the base has none. Three tags reach this class, so the injection is paid where
|
|
227
|
+
// it is read instead of on every element of a screen.
|
|
228
|
+
this.detector = inject(ChangeDetectorRef);
|
|
229
|
+
this.errorHandler = inject(ErrorHandler);
|
|
317
230
|
const node = this.host.nativeElement;
|
|
318
231
|
if (typeof node === 'object' && node !== null) {
|
|
319
|
-
registerViewFlush(node, () => this.
|
|
232
|
+
registerViewFlush(node, () => this.flush());
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// REPORTED, NOT RETHROWN, and it is Angular's own contract rather than a swallow. Every other
|
|
236
|
+
// change detection in an app runs inside `ApplicationRef.tick()`, which catches and hands the
|
|
237
|
+
// error to `ErrorHandler` — `render/index.ts` provides `SymbioteErrorHandler` for exactly that,
|
|
238
|
+
// after an unprovided token once turned every async tick exception into a hard crash. This flush
|
|
239
|
+
// is the ONE change detection that runs outside that boundary: the engine calls it from inside a
|
|
240
|
+
// native event dispatch, where a throw has nowhere to go but `RCTFatal`.
|
|
241
|
+
//
|
|
242
|
+
// Device-diagnosed 2026-09-20 on ApiPlaygroundScreen. `PlaygroundLifecycleLogger` emits from
|
|
243
|
+
// `ngDoCheck`/`ngAfterContentChecked`/`ngAfterViewChecked` and the screen's handler writes a
|
|
244
|
+
// signal its own template reads, so the view re-dirties itself on every pass and
|
|
245
|
+
// `detectChangesInViewWhileDirty` throws NG0103 after MAXIMUM_REFRESH_RERUNS. The scheduler's own
|
|
246
|
+
// ticks were already hitting it and reporting it quietly; the first KEYSTROKE took the same throw
|
|
247
|
+
// through here and killed the app — `Terminating app due to uncaught exception
|
|
248
|
+
// 'RCTFatalException: Unhandled JS Exception: Error: NG0103'`, with no redbox because Release has
|
|
249
|
+
// none. So the app bug is the app's, and a flush that turns a reported error into a fatal one is
|
|
250
|
+
// ours: a keystroke must not be stricter than a tick.
|
|
251
|
+
flush() {
|
|
252
|
+
try {
|
|
253
|
+
this.detector.detectChanges();
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
this.errorHandler.handleError(error);
|
|
320
257
|
}
|
|
321
258
|
}
|
|
322
259
|
ngOnDestroy() {
|
|
@@ -324,48 +261,49 @@ class ReadBackElement extends SymbioteElement {
|
|
|
324
261
|
if (typeof node === 'object' && node !== null)
|
|
325
262
|
unregisterViewFlush(node);
|
|
326
263
|
}
|
|
327
|
-
static
|
|
328
|
-
static
|
|
264
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadBackElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
265
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ReadBackElement, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
|
|
329
266
|
}
|
|
330
267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadBackElement, decorators: [{
|
|
331
268
|
type: Directive
|
|
332
269
|
}], ctorParameters: () => [] });
|
|
270
|
+
// BOTH SPELLINGS ON THE SEVEN DASHLESS TAGS, and it is a correctness fix rather than a convenience.
|
|
271
|
+
//
|
|
272
|
+
// The renderer has always mapped `symbiote-view` onto `view` (`PRIMITIVE_SELECTOR_ALIAS`), because
|
|
273
|
+
// `CUSTOM_ELEMENTS_SCHEMA` admits an unknown element only when the name carries a hyphen — so the
|
|
274
|
+
// hyphenated form is the spelling an app WITHOUT these directives has to use. It is the same tag and
|
|
275
|
+
// commits the same node.
|
|
276
|
+
//
|
|
277
|
+
// It was not the same tag HERE. A selector of `view` alone meant an app that imports
|
|
278
|
+
// `SYMBIOTE_ELEMENTS` and writes `<symbiote-view>` matched nothing: no type check on its props, no
|
|
279
|
+
// declared inputs, none of `SymbioteElement`'s forwarding or callback wrapping — silently, with the
|
|
280
|
+
// tree still looking right. Measured, that shape also ran ~8.6 us per element FASTER, which is what
|
|
281
|
+
// made it look like an optimization instead of a hole (`angular-directive-cost.itest.ts`).
|
|
282
|
+
//
|
|
283
|
+
// Only the seven dashless tags need it: `hyphenatedIntrinsicAliases` skips any tag that already
|
|
284
|
+
// carries a dash, so `symbiote-scroll-view` resolves nowhere on either side and the two halves agree
|
|
285
|
+
// already.
|
|
333
286
|
export class ViewElement extends SymbioteElement {
|
|
334
|
-
static
|
|
335
|
-
static
|
|
287
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
288
|
+
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 }); }
|
|
336
289
|
}
|
|
337
290
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ViewElement, decorators: [{
|
|
338
291
|
type: Directive,
|
|
339
|
-
args: [{ selector: 'view', standalone: true }]
|
|
292
|
+
args: [{ selector: 'view, symbiote-view', standalone: true }]
|
|
340
293
|
}] });
|
|
341
294
|
export class PressableElement extends SymbioteElement {
|
|
342
|
-
|
|
343
|
-
cancelable;
|
|
344
|
-
delayLongPress;
|
|
345
|
-
delayHoverIn;
|
|
346
|
-
delayHoverOut;
|
|
347
|
-
onHoverIn;
|
|
348
|
-
onHoverOut;
|
|
349
|
-
pressRetentionOffset;
|
|
350
|
-
unstable_pressDelay;
|
|
351
|
-
android_ripple;
|
|
352
|
-
android_disableSound;
|
|
353
|
-
hasTVPreferredFocus;
|
|
354
|
-
nextFocusDown;
|
|
355
|
-
nextFocusForward;
|
|
356
|
-
nextFocusLeft;
|
|
357
|
-
nextFocusRight;
|
|
358
|
-
nextFocusUp;
|
|
359
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PressableElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
360
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: PressableElement, isStandalone: true, selector: "pressable", inputs: { disabled: "disabled", cancelable: "cancelable", delayLongPress: "delayLongPress", delayHoverIn: "delayHoverIn", delayHoverOut: "delayHoverOut", onHoverIn: "onHoverIn", onHoverOut: "onHoverOut", pressRetentionOffset: "pressRetentionOffset", unstable_pressDelay: "unstable_pressDelay", android_ripple: "android_ripple", android_disableSound: "android_disableSound", hasTVPreferredFocus: "hasTVPreferredFocus", nextFocusDown: "nextFocusDown", nextFocusForward: "nextFocusForward", nextFocusLeft: "nextFocusLeft", nextFocusRight: "nextFocusRight", nextFocusUp: "nextFocusUp" }, usesInheritance: true, ngImport: i0 });
|
|
295
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PressableElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
296
|
+
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 }); }
|
|
361
297
|
}
|
|
362
298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: PressableElement, decorators: [{
|
|
363
299
|
type: Directive,
|
|
364
|
-
args: [{ selector: 'pressable', standalone: true }]
|
|
300
|
+
args: [{ selector: 'pressable, symbiote-pressable', standalone: true }]
|
|
365
301
|
}], propDecorators: { disabled: [{
|
|
366
302
|
type: Input
|
|
367
303
|
}], cancelable: [{
|
|
368
304
|
type: Input
|
|
305
|
+
}], blockNativeResponder: [{
|
|
306
|
+
type: Input
|
|
369
307
|
}], delayLongPress: [{
|
|
370
308
|
type: Input
|
|
371
309
|
}], delayHoverIn: [{
|
|
@@ -382,6 +320,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
382
320
|
type: Input
|
|
383
321
|
}], android_ripple: [{
|
|
384
322
|
type: Input
|
|
323
|
+
}], testOnly_pressed: [{
|
|
324
|
+
type: Input
|
|
385
325
|
}], android_disableSound: [{
|
|
386
326
|
type: Input
|
|
387
327
|
}], hasTVPreferredFocus: [{
|
|
@@ -400,12 +340,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
400
340
|
// RN's TouchableOpacity is a Pressable that also fades, and both halves are on the engine node —
|
|
401
341
|
// so it takes the same inputs and adds only the fade's own knob.
|
|
402
342
|
export class TouchableOpacityElement extends PressableElement {
|
|
403
|
-
|
|
404
|
-
delayPressIn;
|
|
405
|
-
delayPressOut;
|
|
406
|
-
minPressDuration;
|
|
407
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableOpacityElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
408
|
-
static ɵ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 });
|
|
343
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableOpacityElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
344
|
+
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 }); }
|
|
409
345
|
}
|
|
410
346
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableOpacityElement, decorators: [{
|
|
411
347
|
type: Directive,
|
|
@@ -424,13 +360,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
424
360
|
// press surface plus the two knobs that describe the underlay. `onShowUnderlay`/`onHideUnderlay`
|
|
425
361
|
// need no @Input: they are events, bound as `(showUnderlay)` through the renderer's own listen.
|
|
426
362
|
export class TouchableHighlightElement extends PressableElement {
|
|
427
|
-
|
|
428
|
-
underlayColor;
|
|
429
|
-
delayPressIn;
|
|
430
|
-
delayPressOut;
|
|
431
|
-
minPressDuration;
|
|
432
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableHighlightElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
433
|
-
static ɵ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" }, usesInheritance: true, ngImport: i0 });
|
|
363
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableHighlightElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
364
|
+
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 }); }
|
|
434
365
|
}
|
|
435
366
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableHighlightElement, decorators: [{
|
|
436
367
|
type: Directive,
|
|
@@ -445,16 +376,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
445
376
|
type: Input
|
|
446
377
|
}], minPressDuration: [{
|
|
447
378
|
type: Input
|
|
379
|
+
}], touchSoundDisabled: [{
|
|
380
|
+
type: Input
|
|
448
381
|
}] } });
|
|
449
382
|
// RN's TouchableNativeFeedback is a Pressable that CLONES onto its single child instead of
|
|
450
383
|
// rendering anything (TouchableNativeFeedback.js:339) — so the tag takes the press surface plus the
|
|
451
384
|
// two props that pick the Android ripple drawable. The tag itself commits no native view; the
|
|
452
385
|
// behavior configures the child, which is why `elements.test.ts` reads it as an anchor.
|
|
453
386
|
export class TouchableNativeFeedbackElement extends PressableElement {
|
|
454
|
-
|
|
455
|
-
useForeground;
|
|
456
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableNativeFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
457
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TouchableNativeFeedbackElement, isStandalone: true, selector: "touchable-native-feedback", inputs: { background: "background", useForeground: "useForeground" }, usesInheritance: true, ngImport: i0 });
|
|
387
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableNativeFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
388
|
+
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 }); }
|
|
458
389
|
}
|
|
459
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableNativeFeedbackElement, decorators: [{
|
|
460
391
|
type: Directive,
|
|
@@ -463,17 +394,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
463
394
|
type: Input
|
|
464
395
|
}], useForeground: [{
|
|
465
396
|
type: Input
|
|
397
|
+
}], touchSoundDisabled: [{
|
|
398
|
+
type: Input
|
|
466
399
|
}] } });
|
|
467
400
|
// RN's TouchableWithoutFeedback clones onto its single child the same way
|
|
468
401
|
// (TouchableWithoutFeedback.js:286) and installs no drawable, so it takes the press surface plus the
|
|
469
402
|
// three timing knobs it forwards to Pressability (:186-190) and nothing else. Like the tag above it
|
|
470
403
|
// commits no native view; `elements.test.ts` reads it as an anchor.
|
|
471
404
|
export class TouchableWithoutFeedbackElement extends PressableElement {
|
|
472
|
-
|
|
473
|
-
delayPressOut;
|
|
474
|
-
minPressDuration;
|
|
475
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableWithoutFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
476
|
-
static ɵ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" }, usesInheritance: true, ngImport: i0 });
|
|
405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableWithoutFeedbackElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
406
|
+
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 }); }
|
|
477
407
|
}
|
|
478
408
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TouchableWithoutFeedbackElement, decorators: [{
|
|
479
409
|
type: Directive,
|
|
@@ -484,20 +414,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
484
414
|
type: Input
|
|
485
415
|
}], minPressDuration: [{
|
|
486
416
|
type: Input
|
|
417
|
+
}], touchSoundDisabled: [{
|
|
418
|
+
type: Input
|
|
487
419
|
}] } });
|
|
488
420
|
// RN's Button IS a TouchableOpacity (Button.js:384), and the behavior builds the view and the
|
|
489
421
|
// label under it — so the tag takes the touchable's surface plus the four props Button owns. There
|
|
490
422
|
// is no `style`: RN's Button has no such prop, and the label/background come from `color`.
|
|
491
423
|
export class ButtonElement extends TouchableOpacityElement {
|
|
492
|
-
|
|
493
|
-
color;
|
|
494
|
-
touchSoundDisabled;
|
|
495
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
496
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ButtonElement, isStandalone: true, selector: "button", inputs: { title: "title", color: "color", touchSoundDisabled: "touchSoundDisabled" }, usesInheritance: true, ngImport: i0 });
|
|
424
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
425
|
+
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 }); }
|
|
497
426
|
}
|
|
498
427
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ButtonElement, decorators: [{
|
|
499
428
|
type: Directive,
|
|
500
|
-
args: [{ selector: 'button', standalone: true }]
|
|
429
|
+
args: [{ selector: 'button, symbiote-button', standalone: true }]
|
|
501
430
|
}], propDecorators: { title: [{
|
|
502
431
|
type: Input
|
|
503
432
|
}], color: [{
|
|
@@ -506,25 +435,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
506
435
|
type: Input
|
|
507
436
|
}] } });
|
|
508
437
|
export class TextElement extends SymbioteElement {
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
minimumFontScale;
|
|
518
|
-
allowFontScaling;
|
|
519
|
-
maxFontSizeMultiplier;
|
|
520
|
-
selectionColor;
|
|
521
|
-
disabled;
|
|
522
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
523
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TextElement, isStandalone: true, selector: "text", inputs: { style: "style", numberOfLines: "numberOfLines", ellipsizeMode: "ellipsizeMode", selectable: "selectable", adjustsFontSizeToFit: "adjustsFontSizeToFit", minimumFontScale: "minimumFontScale", allowFontScaling: "allowFontScaling", maxFontSizeMultiplier: "maxFontSizeMultiplier", selectionColor: "selectionColor", disabled: "disabled" }, usesInheritance: true, ngImport: i0 });
|
|
438
|
+
constructor() {
|
|
439
|
+
super(...arguments);
|
|
440
|
+
// Narrows the inherited input to a TEXT style so `fontSize`/`fontWeight` type-check here. The
|
|
441
|
+
// initializer is what TS2612 asks for to accept a redeclaration as deliberate; `declare` would
|
|
442
|
+
// be the other answer and cannot carry a decorator.
|
|
443
|
+
this.style = undefined;
|
|
444
|
+
}
|
|
445
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
446
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: TextElement, isStandalone: true, selector: "text, symbiote-text", inputs: { style: "style", numberOfLines: "numberOfLines", ellipsizeMode: "ellipsizeMode", selectable: "selectable", adjustsFontSizeToFit: "adjustsFontSizeToFit", minimumFontScale: "minimumFontScale", allowFontScaling: "allowFontScaling", maxFontSizeMultiplier: "maxFontSizeMultiplier", selectionColor: "selectionColor", disabled: "disabled" }, usesInheritance: true, ngImport: i0 }); }
|
|
524
447
|
}
|
|
525
448
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextElement, decorators: [{
|
|
526
449
|
type: Directive,
|
|
527
|
-
args: [{ selector: 'text', standalone: true }]
|
|
450
|
+
args: [{ selector: 'text, symbiote-text', standalone: true }]
|
|
528
451
|
}], propDecorators: { style: [{
|
|
529
452
|
type: Input
|
|
530
453
|
}], numberOfLines: [{
|
|
@@ -547,35 +470,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
547
470
|
type: Input
|
|
548
471
|
}] } });
|
|
549
472
|
export class ImageElement extends SymbioteElement {
|
|
550
|
-
|
|
551
|
-
src;
|
|
552
|
-
srcSet;
|
|
553
|
-
alt;
|
|
554
|
-
width;
|
|
555
|
-
height;
|
|
556
|
-
resizeMode;
|
|
557
|
-
resizeMethod;
|
|
558
|
-
defaultSource;
|
|
559
|
-
loadingIndicatorSource;
|
|
560
|
-
blurRadius;
|
|
561
|
-
capInsets;
|
|
562
|
-
crossOrigin;
|
|
563
|
-
referrerPolicy;
|
|
564
|
-
fadeDuration;
|
|
565
|
-
progressiveRenderingEnabled;
|
|
566
|
-
tintColor;
|
|
567
|
-
onLoad;
|
|
568
|
-
onLoadStart;
|
|
569
|
-
onLoadEnd;
|
|
570
|
-
onError;
|
|
571
|
-
onProgress;
|
|
572
|
-
onPartialLoad;
|
|
573
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
574
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ImageElement, isStandalone: true, selector: "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 });
|
|
473
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
474
|
+
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 }); }
|
|
575
475
|
}
|
|
576
476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageElement, decorators: [{
|
|
577
477
|
type: Directive,
|
|
578
|
-
args: [{ selector: 'image', standalone: true }]
|
|
478
|
+
args: [{ selector: 'image, symbiote-image', standalone: true }]
|
|
579
479
|
}], propDecorators: { source: [{
|
|
580
480
|
type: Input
|
|
581
481
|
}], src: [{
|
|
@@ -628,32 +528,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
628
528
|
// (ImageBackground.js:81) — so this directive declares them to make the BINDING legal, and the
|
|
629
529
|
// engine decides which node each lands on.
|
|
630
530
|
export class ImageBackgroundElement extends SymbioteElement {
|
|
631
|
-
|
|
632
|
-
source;
|
|
633
|
-
src;
|
|
634
|
-
srcSet;
|
|
635
|
-
alt;
|
|
636
|
-
width;
|
|
637
|
-
height;
|
|
638
|
-
resizeMode;
|
|
639
|
-
resizeMethod;
|
|
640
|
-
defaultSource;
|
|
641
|
-
loadingIndicatorSource;
|
|
642
|
-
blurRadius;
|
|
643
|
-
capInsets;
|
|
644
|
-
crossOrigin;
|
|
645
|
-
referrerPolicy;
|
|
646
|
-
fadeDuration;
|
|
647
|
-
progressiveRenderingEnabled;
|
|
648
|
-
tintColor;
|
|
649
|
-
onLoad;
|
|
650
|
-
onLoadStart;
|
|
651
|
-
onLoadEnd;
|
|
652
|
-
onError;
|
|
653
|
-
onProgress;
|
|
654
|
-
onPartialLoad;
|
|
655
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageBackgroundElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
656
|
-
static ɵ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 });
|
|
531
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageBackgroundElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
532
|
+
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 }); }
|
|
657
533
|
}
|
|
658
534
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageBackgroundElement, decorators: [{
|
|
659
535
|
type: Directive,
|
|
@@ -708,57 +584,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
708
584
|
type: Input
|
|
709
585
|
}] } });
|
|
710
586
|
export class ScrollViewElement extends SymbioteElement {
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
// other spelling, not a variant of this one.
|
|
714
|
-
scrollEnabled;
|
|
715
|
-
scrollEventThrottle;
|
|
716
|
-
contentContainerStyle;
|
|
717
|
-
contentInset;
|
|
718
|
-
contentInsetAdjustmentBehavior;
|
|
719
|
-
contentOffset;
|
|
720
|
-
scrollIndicatorInsets;
|
|
721
|
-
showsHorizontalScrollIndicator;
|
|
722
|
-
showsVerticalScrollIndicator;
|
|
723
|
-
alwaysBounceHorizontal;
|
|
724
|
-
alwaysBounceVertical;
|
|
725
|
-
bounces;
|
|
726
|
-
bouncesZoom;
|
|
727
|
-
centerContent;
|
|
728
|
-
decelerationRate;
|
|
729
|
-
directionalLockEnabled;
|
|
730
|
-
disableIntervalMomentum;
|
|
731
|
-
endFillColor;
|
|
732
|
-
fadingEdgeLength;
|
|
733
|
-
indicatorStyle;
|
|
734
|
-
invertStickyHeaders;
|
|
735
|
-
keyboardDismissMode;
|
|
736
|
-
keyboardShouldPersistTaps;
|
|
737
|
-
automaticallyAdjustKeyboardInsets;
|
|
738
|
-
maintainVisibleContentPosition;
|
|
739
|
-
maximumZoomScale;
|
|
740
|
-
minimumZoomScale;
|
|
741
|
-
zoomScale;
|
|
742
|
-
nestedScrollEnabled;
|
|
743
|
-
overScrollMode;
|
|
744
|
-
pagingEnabled;
|
|
745
|
-
persistentScrollbar;
|
|
746
|
-
pinchGestureEnabled;
|
|
747
|
-
snapToAlignment;
|
|
748
|
-
snapToEnd;
|
|
749
|
-
snapToInterval;
|
|
750
|
-
snapToOffsets;
|
|
751
|
-
snapToStart;
|
|
752
|
-
stickyHeaderIndices;
|
|
753
|
-
onScroll;
|
|
754
|
-
onScrollBeginDrag;
|
|
755
|
-
onScrollEndDrag;
|
|
756
|
-
onMomentumScrollBegin;
|
|
757
|
-
onMomentumScrollEnd;
|
|
758
|
-
onScrollToTop;
|
|
759
|
-
onContentSizeChange;
|
|
760
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
761
|
-
static ɵ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 });
|
|
587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
588
|
+
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 }); }
|
|
762
589
|
}
|
|
763
590
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollViewElement, decorators: [{
|
|
764
591
|
type: Directive,
|
|
@@ -857,24 +684,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
857
684
|
type: Input
|
|
858
685
|
}] } });
|
|
859
686
|
export class HorizontalScrollViewElement extends ScrollViewElement {
|
|
860
|
-
static
|
|
861
|
-
static
|
|
687
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
688
|
+
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 }); }
|
|
862
689
|
}
|
|
863
690
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollViewElement, decorators: [{
|
|
864
691
|
type: Directive,
|
|
865
692
|
args: [{ selector: 'horizontal-scroll-view', standalone: true }]
|
|
866
693
|
}] });
|
|
867
694
|
export class ScrollContentElement extends SymbioteElement {
|
|
868
|
-
static
|
|
869
|
-
static
|
|
695
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollContentElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
696
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ScrollContentElement, isStandalone: true, selector: "scroll-content", usesInheritance: true, ngImport: i0 }); }
|
|
870
697
|
}
|
|
871
698
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ScrollContentElement, decorators: [{
|
|
872
699
|
type: Directive,
|
|
873
700
|
args: [{ selector: 'scroll-content', standalone: true }]
|
|
874
701
|
}] });
|
|
875
702
|
export class HorizontalScrollContentElement extends SymbioteElement {
|
|
876
|
-
static
|
|
877
|
-
static
|
|
703
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollContentElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
704
|
+
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 }); }
|
|
878
705
|
}
|
|
879
706
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: HorizontalScrollContentElement, decorators: [{
|
|
880
707
|
type: Directive,
|
|
@@ -893,7 +720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
893
720
|
* obvious reading is wrong: the file header's "an `@Output` CONSUMES the binding" holds for a
|
|
894
721
|
* COMPONENT, and an element is the other case — Angular attaches the renderer listener for the
|
|
895
722
|
* event as well, so `Renderer2.listen` still runs and the engine still hears the change. Measured
|
|
896
|
-
* under JIT by deleting this whole hook: every case in `
|
|
723
|
+
* under JIT by deleting this whole hook: every case in `renderer/two-way-value.test.ts` stayed
|
|
897
724
|
* green, delivery included, and exactly ONCE (nothing double-fires when both paths exist).
|
|
898
725
|
*
|
|
899
726
|
* It is kept because the measurement is JIT-only and this adapter has a recorded case of JIT and
|
|
@@ -909,9 +736,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
909
736
|
* an unbound one), not assumed.
|
|
910
737
|
*/
|
|
911
738
|
class ValueChangeElement extends ReadBackElement {
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
739
|
+
constructor() {
|
|
740
|
+
super(...arguments);
|
|
741
|
+
this.valueRenderer = inject(Renderer2);
|
|
742
|
+
this.valueHost = inject(ElementRef);
|
|
743
|
+
}
|
|
915
744
|
ngOnInit() {
|
|
916
745
|
if (!this.hasValueSubscriber())
|
|
917
746
|
return;
|
|
@@ -923,53 +752,19 @@ class ValueChangeElement extends ReadBackElement {
|
|
|
923
752
|
super.ngOnDestroy();
|
|
924
753
|
this.unlistenValue?.();
|
|
925
754
|
}
|
|
926
|
-
static
|
|
927
|
-
static
|
|
755
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValueChangeElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
756
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ValueChangeElement, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
|
|
928
757
|
}
|
|
929
758
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ValueChangeElement, decorators: [{
|
|
930
759
|
type: Directive
|
|
931
760
|
}] });
|
|
932
761
|
export class TextInputElement extends ValueChangeElement {
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
maxLength;
|
|
940
|
-
editable;
|
|
941
|
-
readOnly;
|
|
942
|
-
autoFocus;
|
|
943
|
-
autoCapitalize;
|
|
944
|
-
autoComplete;
|
|
945
|
-
autoCorrect;
|
|
946
|
-
blurOnSubmit;
|
|
947
|
-
submitBehavior;
|
|
948
|
-
cursorColor;
|
|
949
|
-
enterKeyHint;
|
|
950
|
-
returnKeyType;
|
|
951
|
-
inputMode;
|
|
952
|
-
keyboardType;
|
|
953
|
-
inputAccessoryViewID;
|
|
954
|
-
scrollEnabled;
|
|
955
|
-
secureTextEntry;
|
|
956
|
-
selectTextOnFocus;
|
|
957
|
-
selection;
|
|
958
|
-
selectionColor;
|
|
959
|
-
selectionHandleColor;
|
|
960
|
-
showSoftInputOnFocus;
|
|
961
|
-
textAlign;
|
|
962
|
-
textContentType;
|
|
963
|
-
underlineColorAndroid;
|
|
964
|
-
onValueChange;
|
|
965
|
-
onContentSizeChange;
|
|
966
|
-
onEndEditing;
|
|
967
|
-
onKeyPress;
|
|
968
|
-
onSelectionChange;
|
|
969
|
-
onSubmitEditing;
|
|
970
|
-
// NonNullable, not the prop type: `[(value)]="name"` binds a `string`, and an emitter that can
|
|
971
|
-
// also emit `undefined` fails the two-way assignability check ngtsc runs on the event half.
|
|
972
|
-
valueChange = new EventEmitter();
|
|
762
|
+
constructor() {
|
|
763
|
+
super(...arguments);
|
|
764
|
+
// NonNullable, not the prop type: `[(value)]="name"` binds a `string`, and an emitter that can
|
|
765
|
+
// also emit `undefined` fails the two-way assignability check ngtsc runs on the event half.
|
|
766
|
+
this.valueChange = new EventEmitter();
|
|
767
|
+
}
|
|
973
768
|
hasValueSubscriber() {
|
|
974
769
|
return this.valueChange.observed;
|
|
975
770
|
}
|
|
@@ -977,8 +772,8 @@ export class TextInputElement extends ValueChangeElement {
|
|
|
977
772
|
if (typeof value === 'string')
|
|
978
773
|
this.valueChange.emit(value);
|
|
979
774
|
}
|
|
980
|
-
static
|
|
981
|
-
static
|
|
775
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
776
|
+
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 }); }
|
|
982
777
|
}
|
|
983
778
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputElement, decorators: [{
|
|
984
779
|
type: Directive,
|
|
@@ -1047,6 +842,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1047
842
|
type: Input
|
|
1048
843
|
}], onValueChange: [{
|
|
1049
844
|
type: Input
|
|
845
|
+
}], onChangeText: [{
|
|
846
|
+
type: Input
|
|
1050
847
|
}], onContentSizeChange: [{
|
|
1051
848
|
type: Input
|
|
1052
849
|
}], onEndEditing: [{
|
|
@@ -1061,40 +858,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1061
858
|
type: Output
|
|
1062
859
|
}] } });
|
|
1063
860
|
export class MultilineTextInputElement extends TextInputElement {
|
|
1064
|
-
static
|
|
1065
|
-
static
|
|
861
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MultilineTextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
862
|
+
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 }); }
|
|
1066
863
|
}
|
|
1067
864
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MultilineTextInputElement, decorators: [{
|
|
1068
865
|
type: Directive,
|
|
1069
866
|
args: [{ selector: 'text-input-multiline', standalone: true }]
|
|
1070
867
|
}] });
|
|
1071
|
-
// The COMPONENT path's spelling of the pair above — same native views, a tag the behavior registry
|
|
1072
|
-
// deliberately does not carry (`component-names/shared.ts`). Declared so the tag alphabet is
|
|
1073
|
-
// complete; an app writes the plain name.
|
|
1074
|
-
export class ManagedTextInputElement extends TextInputElement {
|
|
1075
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedTextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1076
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ManagedTextInputElement, isStandalone: true, selector: "text-input-managed", usesInheritance: true, ngImport: i0 });
|
|
1077
|
-
}
|
|
1078
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedTextInputElement, decorators: [{
|
|
1079
|
-
type: Directive,
|
|
1080
|
-
args: [{ selector: 'text-input-managed', standalone: true }]
|
|
1081
|
-
}] });
|
|
1082
|
-
export class ManagedMultilineTextInputElement extends TextInputElement {
|
|
1083
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedMultilineTextInputElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1084
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ManagedMultilineTextInputElement, isStandalone: true, selector: "text-input-multiline-managed", usesInheritance: true, ngImport: i0 });
|
|
1085
|
-
}
|
|
1086
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedMultilineTextInputElement, decorators: [{
|
|
1087
|
-
type: Directive,
|
|
1088
|
-
args: [{ selector: 'text-input-multiline-managed', standalone: true }]
|
|
1089
|
-
}] });
|
|
1090
868
|
export class SwitchElement extends ValueChangeElement {
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
ios_backgroundColor;
|
|
1096
|
-
onValueChange;
|
|
1097
|
-
valueChange = new EventEmitter();
|
|
869
|
+
constructor() {
|
|
870
|
+
super(...arguments);
|
|
871
|
+
this.valueChange = new EventEmitter();
|
|
872
|
+
}
|
|
1098
873
|
hasValueSubscriber() {
|
|
1099
874
|
return this.valueChange.observed;
|
|
1100
875
|
}
|
|
@@ -1102,12 +877,12 @@ export class SwitchElement extends ValueChangeElement {
|
|
|
1102
877
|
if (typeof value === 'boolean')
|
|
1103
878
|
this.valueChange.emit(value);
|
|
1104
879
|
}
|
|
1105
|
-
static
|
|
1106
|
-
static
|
|
880
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
881
|
+
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 }); }
|
|
1107
882
|
}
|
|
1108
883
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchElement, decorators: [{
|
|
1109
884
|
type: Directive,
|
|
1110
|
-
args: [{ selector: 'switch', standalone: true }]
|
|
885
|
+
args: [{ selector: 'switch, symbiote-switch', standalone: true }]
|
|
1111
886
|
}], propDecorators: { value: [{
|
|
1112
887
|
type: Input
|
|
1113
888
|
}], disabled: [{
|
|
@@ -1123,14 +898,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1123
898
|
}], valueChange: [{
|
|
1124
899
|
type: Output
|
|
1125
900
|
}] } });
|
|
1126
|
-
export class ManagedSwitchElement extends SwitchElement {
|
|
1127
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedSwitchElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1128
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ManagedSwitchElement, isStandalone: true, selector: "switch-managed", usesInheritance: true, ngImport: i0 });
|
|
1129
|
-
}
|
|
1130
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ManagedSwitchElement, decorators: [{
|
|
1131
|
-
type: Directive,
|
|
1132
|
-
args: [{ selector: 'switch-managed', standalone: true }]
|
|
1133
|
-
}] });
|
|
1134
901
|
/**
|
|
1135
902
|
* `[(ngModel)]` / `formControlName` on a `<text-input>` or a `<switch>`.
|
|
1136
903
|
*
|
|
@@ -1145,9 +912,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1145
912
|
* directive holds no fold of its own.
|
|
1146
913
|
*/
|
|
1147
914
|
class SymbioteValueAccessor {
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
915
|
+
constructor() {
|
|
916
|
+
this.renderer = inject(Renderer2);
|
|
917
|
+
this.host = inject(ElementRef);
|
|
918
|
+
}
|
|
1151
919
|
setProp(name, value) {
|
|
1152
920
|
this.renderer.setProperty(this.host.nativeElement, name, value);
|
|
1153
921
|
}
|
|
@@ -1157,6 +925,21 @@ class SymbioteValueAccessor {
|
|
|
1157
925
|
registerOnChange(fn) {
|
|
1158
926
|
this.unlisten?.();
|
|
1159
927
|
this.unlisten = this.renderer.listen(this.host.nativeElement, VALUE_CHANGE_EVENT, (value) => {
|
|
928
|
+
// THE HALF THE DOM DOES FOR FREE, and without it a controlled input undoes every
|
|
929
|
+
// keystroke. `<text-input>`'s behavior re-commands the native text whenever `props.value`
|
|
930
|
+
// disagrees with what native last reported — that is what makes it controlled — and the
|
|
931
|
+
// read-back flush exists so the app's new value is on the node by the time the commit runs.
|
|
932
|
+
// @angular/forms does not reach the node in that window: `NgModel.ngOnChanges` defers
|
|
933
|
+
// `_updateValue` through `resolvedPromise.then`, so `writeValue` lands a MICROTASK after
|
|
934
|
+
// the flush, and the commit in between still reads the value from before the keystroke.
|
|
935
|
+
//
|
|
936
|
+
// In a browser there is nothing to do here: `input.value` already holds what the user
|
|
937
|
+
// typed. `node.props.value` is the same slot, and nothing else writes it — so the accessor
|
|
938
|
+
// mirrors it, which is the shape rather than a workaround. A later `writeValue` still wins,
|
|
939
|
+
// so an app that transforms or refuses the value keeps doing so, one microtask on.
|
|
940
|
+
//
|
|
941
|
+
// Device-reported 2026-09-20: every character snapped the field back to its mounted text.
|
|
942
|
+
this.setProp('value', value);
|
|
1160
943
|
fn(value);
|
|
1161
944
|
});
|
|
1162
945
|
}
|
|
@@ -1171,8 +954,8 @@ class SymbioteValueAccessor {
|
|
|
1171
954
|
ngOnDestroy() {
|
|
1172
955
|
this.unlisten?.();
|
|
1173
956
|
}
|
|
1174
|
-
static
|
|
1175
|
-
static
|
|
957
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
958
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SymbioteValueAccessor, isStandalone: true, ngImport: i0 }); }
|
|
1176
959
|
}
|
|
1177
960
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SymbioteValueAccessor, decorators: [{
|
|
1178
961
|
type: Directive
|
|
@@ -1181,14 +964,14 @@ export class TextInputValueAccessor extends SymbioteValueAccessor {
|
|
|
1181
964
|
writeDisabled(isDisabled) {
|
|
1182
965
|
this.setProp('editable', !isDisabled);
|
|
1183
966
|
}
|
|
1184
|
-
static
|
|
1185
|
-
static
|
|
967
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
968
|
+
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: [
|
|
1186
969
|
{
|
|
1187
970
|
provide: NG_VALUE_ACCESSOR,
|
|
1188
971
|
useExisting: forwardRef(() => TextInputValueAccessor),
|
|
1189
972
|
multi: true,
|
|
1190
973
|
},
|
|
1191
|
-
], usesInheritance: true, ngImport: i0 });
|
|
974
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
1192
975
|
}
|
|
1193
976
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TextInputValueAccessor, decorators: [{
|
|
1194
977
|
type: Directive,
|
|
@@ -1208,19 +991,19 @@ export class SwitchValueAccessor extends SymbioteValueAccessor {
|
|
|
1208
991
|
writeDisabled(isDisabled) {
|
|
1209
992
|
this.setProp('disabled', isDisabled);
|
|
1210
993
|
}
|
|
1211
|
-
static
|
|
1212
|
-
static
|
|
994
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
995
|
+
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: [
|
|
1213
996
|
{
|
|
1214
997
|
provide: NG_VALUE_ACCESSOR,
|
|
1215
998
|
useExisting: forwardRef(() => SwitchValueAccessor),
|
|
1216
999
|
multi: true,
|
|
1217
1000
|
},
|
|
1218
|
-
], usesInheritance: true, ngImport: i0 });
|
|
1001
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
1219
1002
|
}
|
|
1220
1003
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SwitchValueAccessor, decorators: [{
|
|
1221
1004
|
type: Directive,
|
|
1222
1005
|
args: [{
|
|
1223
|
-
selector: 'switch[ngModel], switch[formControl], switch[formControlName]
|
|
1006
|
+
selector: 'switch[ngModel], switch[formControl], switch[formControlName]',
|
|
1224
1007
|
standalone: true,
|
|
1225
1008
|
providers: [
|
|
1226
1009
|
{
|
|
@@ -1235,12 +1018,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1235
1018
|
// The four spinner props are declared here because that is where the app writes them; the engine's
|
|
1236
1019
|
// behavior redirects them onto the spinner it builds underneath (`slotProps`).
|
|
1237
1020
|
export class ActivityIndicatorElement extends SymbioteElement {
|
|
1238
|
-
|
|
1239
|
-
color;
|
|
1240
|
-
size;
|
|
1241
|
-
hidesWhenStopped;
|
|
1242
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1243
|
-
static ɵ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 });
|
|
1021
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1022
|
+
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 }); }
|
|
1244
1023
|
}
|
|
1245
1024
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorElement, decorators: [{
|
|
1246
1025
|
type: Directive,
|
|
@@ -1258,38 +1037,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1258
1037
|
// written in an app template — declared only so the tag alphabet stays covered, the same as
|
|
1259
1038
|
// `scroll-content`.
|
|
1260
1039
|
export class ActivityIndicatorSpinnerElement extends ActivityIndicatorElement {
|
|
1261
|
-
static
|
|
1262
|
-
static
|
|
1040
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorSpinnerElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1041
|
+
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 }); }
|
|
1263
1042
|
}
|
|
1264
1043
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ActivityIndicatorSpinnerElement, decorators: [{
|
|
1265
1044
|
type: Directive,
|
|
1266
1045
|
args: [{ selector: 'activity-indicator-spinner', standalone: true }]
|
|
1267
1046
|
}] });
|
|
1268
1047
|
export class SafeAreaViewElement extends SymbioteElement {
|
|
1269
|
-
static
|
|
1270
|
-
static
|
|
1048
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeAreaViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1049
|
+
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 }); }
|
|
1271
1050
|
}
|
|
1272
1051
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SafeAreaViewElement, decorators: [{
|
|
1273
1052
|
type: Directive,
|
|
1274
1053
|
args: [{ selector: 'safe-area-view', standalone: true }]
|
|
1275
1054
|
}] });
|
|
1276
1055
|
export class ModalElement extends SymbioteElement {
|
|
1277
|
-
|
|
1278
|
-
transparent;
|
|
1279
|
-
animationType;
|
|
1280
|
-
presentationStyle;
|
|
1281
|
-
supportedOrientations;
|
|
1282
|
-
hardwareAccelerated;
|
|
1283
|
-
statusBarTranslucent;
|
|
1284
|
-
navigationBarTranslucent;
|
|
1285
|
-
allowSwipeDismissal;
|
|
1286
|
-
backdropColor;
|
|
1287
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ModalElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1288
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ModalElement, isStandalone: true, selector: "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 });
|
|
1056
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ModalElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1057
|
+
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 }); }
|
|
1289
1058
|
}
|
|
1290
1059
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ModalElement, decorators: [{
|
|
1291
1060
|
type: Directive,
|
|
1292
|
-
args: [{ selector: 'modal', standalone: true }]
|
|
1061
|
+
args: [{ selector: 'modal, symbiote-modal', standalone: true }]
|
|
1293
1062
|
}], propDecorators: { visible: [{
|
|
1294
1063
|
type: Input
|
|
1295
1064
|
}], transparent: [{
|
|
@@ -1312,18 +1081,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1312
1081
|
type: Input
|
|
1313
1082
|
}] } });
|
|
1314
1083
|
export class RefreshControlElement extends ReadBackElement {
|
|
1315
|
-
|
|
1316
|
-
enabled;
|
|
1317
|
-
colors;
|
|
1318
|
-
tintColor;
|
|
1319
|
-
title;
|
|
1320
|
-
titleColor;
|
|
1321
|
-
size;
|
|
1322
|
-
progressBackgroundColor;
|
|
1323
|
-
progressViewOffset;
|
|
1324
|
-
onRefresh;
|
|
1325
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RefreshControlElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1326
|
-
static ɵ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 });
|
|
1084
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RefreshControlElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1085
|
+
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 }); }
|
|
1327
1086
|
}
|
|
1328
1087
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RefreshControlElement, decorators: [{
|
|
1329
1088
|
type: Directive,
|
|
@@ -1350,12 +1109,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1350
1109
|
type: Input
|
|
1351
1110
|
}] } });
|
|
1352
1111
|
export class StickyHeaderElement extends SymbioteElement {
|
|
1353
|
-
|
|
1354
|
-
nextHeaderLayoutY;
|
|
1355
|
-
scrollAnimatedValue;
|
|
1356
|
-
scrollViewHeight;
|
|
1357
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StickyHeaderElement, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1358
|
-
static ɵ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 });
|
|
1112
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StickyHeaderElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1113
|
+
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 }); }
|
|
1359
1114
|
}
|
|
1360
1115
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: StickyHeaderElement, decorators: [{
|
|
1361
1116
|
type: Directive,
|
|
@@ -1370,9 +1125,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1370
1125
|
type: Input
|
|
1371
1126
|
}] } });
|
|
1372
1127
|
export class InputAccessoryViewElement extends SymbioteElement {
|
|
1373
|
-
|
|
1374
|
-
static
|
|
1375
|
-
static ɵ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 });
|
|
1128
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: InputAccessoryViewElement, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1129
|
+
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 }); }
|
|
1376
1130
|
}
|
|
1377
1131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: InputAccessoryViewElement, decorators: [{
|
|
1378
1132
|
type: Directive,
|
|
@@ -1406,10 +1160,7 @@ export const SYMBIOTE_ELEMENTS = [
|
|
|
1406
1160
|
HorizontalScrollContentElement,
|
|
1407
1161
|
TextInputElement,
|
|
1408
1162
|
MultilineTextInputElement,
|
|
1409
|
-
ManagedTextInputElement,
|
|
1410
|
-
ManagedMultilineTextInputElement,
|
|
1411
1163
|
SwitchElement,
|
|
1412
|
-
ManagedSwitchElement,
|
|
1413
1164
|
ActivityIndicatorElement,
|
|
1414
1165
|
ActivityIndicatorSpinnerElement,
|
|
1415
1166
|
SafeAreaViewElement,
|
|
@@ -1422,7 +1173,39 @@ export const SYMBIOTE_ELEMENTS = [
|
|
|
1422
1173
|
// provided, and `elements.test.ts` subtracts them from its tag-coverage check by name.
|
|
1423
1174
|
TextInputValueAccessor,
|
|
1424
1175
|
SwitchValueAccessor,
|
|
1176
|
+
// Also not a tag: it matches on the callback ATTRIBUTES, so it lands only on the elements that
|
|
1177
|
+
// bind one and carries the `ChangeDetectorRef` their wrapper needs. It rides this list for the same
|
|
1178
|
+
// reason the accessors do, and `elements.test.ts` subtracts it from the tag-coverage check by name.
|
|
1179
|
+
SymbioteCallbackHost,
|
|
1180
|
+
// The other attribute-matched one: it claims `[style]` and `[class]` so an RN style ARRAY never
|
|
1181
|
+
// reaches Angular's styling engine, which cannot represent one and throws. See `style-host.ts`.
|
|
1182
|
+
SymbioteStyleHost,
|
|
1425
1183
|
];
|
|
1184
|
+
// THE DIRECTIVES THAT GO ON MATCHING, and the list is the exceptions rather than the rule.
|
|
1185
|
+
//
|
|
1186
|
+
// A tag directive here is, with four exceptions, nothing but `@Input()` declarations over one
|
|
1187
|
+
// inherited `ngOnChanges` that forwards each of them to the renderer — which is the call
|
|
1188
|
+
// `ɵɵproperty` makes directly on an element nothing claimed. So the instance buys a compile-time
|
|
1189
|
+
// check at ~8.5-9.4 us of run time per element, and `./runtime-matching` keeps the check while
|
|
1190
|
+
// dropping the instance.
|
|
1191
|
+
//
|
|
1192
|
+
// These four cannot go, because they DO something when they are built:
|
|
1193
|
+
//
|
|
1194
|
+
// text-input, text-input-multiline, switch `ValueChangeElement` — listens for the engine's value
|
|
1195
|
+
// event and registers a view flush, which is what stops
|
|
1196
|
+
// a controlled value being undone inside one microtask
|
|
1197
|
+
// refresh-control `ReadBackElement`, the same flush for the same reason
|
|
1198
|
+
//
|
|
1199
|
+
// The two form accessors and `SymbioteCallbackHost` are absent from both lists deliberately: they
|
|
1200
|
+
// match on an ATTRIBUTE rather than a tag, so they already land only where they are needed.
|
|
1201
|
+
withholdFromRuntimeMatching(SYMBIOTE_ELEMENTS.filter(directive => directive !== TextInputElement &&
|
|
1202
|
+
directive !== MultilineTextInputElement &&
|
|
1203
|
+
directive !== SwitchElement &&
|
|
1204
|
+
directive !== RefreshControlElement &&
|
|
1205
|
+
directive !== TextInputValueAccessor &&
|
|
1206
|
+
directive !== SwitchValueAccessor &&
|
|
1207
|
+
directive !== SymbioteCallbackHost &&
|
|
1208
|
+
directive !== SymbioteStyleHost));
|
|
1426
1209
|
const DECLARES_EVERY_PROP = {
|
|
1427
1210
|
view: true,
|
|
1428
1211
|
pressable: true,
|