@symbiote-native/angular 0.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/babel-register-composed.cjs +58 -18
- package/bin/symbiote-angular-dev.cjs +16 -4
- package/build/angular/anchor-host-registry.js +1 -15
- package/build/angular/anchor-host-registry.js.map +1 -1
- package/build/angular/change-detection-flush.d.ts +31 -0
- package/build/angular/change-detection-flush.js +110 -0
- package/build/angular/change-detection-flush.js.map +1 -0
- package/build/angular/components/activity-indicator-props.d.ts +2 -0
- package/build/angular/components/activity-indicator-props.js +2 -0
- package/build/angular/components/activity-indicator-props.js.map +1 -0
- package/build/angular/components/button-props.d.ts +2 -0
- package/build/angular/components/button-props.js +2 -0
- package/build/angular/components/button-props.js.map +1 -0
- package/build/angular/components/flat-list/index.d.ts +2 -1
- package/build/angular/components/flat-list/index.js +22 -10
- package/build/angular/components/flat-list/index.js.map +1 -1
- package/build/angular/components/image-background-props.d.ts +6 -0
- package/build/angular/components/image-background-props.js +2 -0
- package/build/angular/components/image-background-props.js.map +1 -0
- package/build/angular/components/{image/shared.d.ts → image-shared.d.ts} +4 -4
- package/build/angular/components/{image/shared.js → image-shared.js} +39 -28
- package/build/angular/components/image-shared.js.map +1 -0
- package/build/angular/components/input-accessory-view-props.d.ts +7 -0
- package/build/angular/components/input-accessory-view-props.js +9 -0
- package/build/angular/components/input-accessory-view-props.js.map +1 -0
- package/build/angular/components/keyboard-avoiding-view/index.d.ts +2 -1
- package/build/angular/components/keyboard-avoiding-view/index.js +28 -27
- package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
- package/build/angular/components/modal/index.d.ts +2 -0
- package/build/angular/components/modal/index.js +33 -20
- package/build/angular/components/modal/index.js.map +1 -1
- package/build/angular/components/pressable-props.d.ts +32 -0
- package/build/angular/components/pressable-props.js +11 -0
- package/build/angular/components/pressable-props.js.map +1 -0
- package/build/angular/components/refresh-control-props.d.ts +16 -0
- package/build/angular/components/refresh-control-props.js +14 -0
- package/build/angular/components/refresh-control-props.js.map +1 -0
- package/build/angular/components/safe-area-view-props.d.ts +7 -0
- package/build/angular/components/safe-area-view-props.js +11 -0
- package/build/angular/components/safe-area-view-props.js.map +1 -0
- package/build/angular/components/scroll-view-props.d.ts +76 -0
- package/build/angular/components/scroll-view-props.js +18 -0
- package/build/angular/components/scroll-view-props.js.map +1 -0
- package/build/angular/components/section-list/index.d.ts +3 -0
- package/build/angular/components/section-list/index.js +10 -1
- package/build/angular/components/section-list/index.js.map +1 -1
- package/build/angular/components/text-input-props.d.ts +45 -0
- package/build/angular/components/text-input-props.js +18 -0
- package/build/angular/components/text-input-props.js.map +1 -0
- package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.d.ts +6 -0
- package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js +2 -0
- package/build/angular/components/touchable-native-feedback/touchable-native-feedback-props.js.map +1 -0
- package/build/angular/components/touchable-props.d.ts +14 -0
- package/build/angular/components/touchable-props.js +13 -0
- package/build/angular/components/touchable-props.js.map +1 -0
- package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.d.ts +3 -0
- package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js +2 -0
- package/build/angular/components/touchable-without-feedback/touchable-without-feedback-props.js.map +1 -0
- package/build/angular/components/virtualized-list/index.d.ts +8 -1
- package/build/angular/components/virtualized-list/index.js +373 -278
- package/build/angular/components/virtualized-list/index.js.map +1 -1
- package/build/angular/components/virtualized-section-list/index.d.ts +3 -0
- package/build/angular/components/virtualized-section-list/index.js +10 -1
- package/build/angular/components/virtualized-section-list/index.js.map +1 -1
- package/build/angular/components.d.ts +21 -27
- package/build/angular/components.js +13 -15
- package/build/angular/components.js.map +1 -1
- package/build/angular/create-portal/index.d.ts +11 -2
- package/build/angular/create-portal/index.js +37 -11
- package/build/angular/create-portal/index.js.map +1 -1
- package/build/angular/create-tunnel/index.js +1 -1
- package/build/angular/element-props.d.ts +53 -0
- package/build/angular/element-props.js +2 -0
- package/build/angular/element-props.js.map +1 -0
- package/build/angular/elements.d.ts +528 -0
- package/build/angular/elements.js +1444 -0
- package/build/angular/elements.js.map +1 -0
- package/build/angular/gate-demand.d.ts +37 -0
- package/build/angular/gate-demand.js +84 -0
- package/build/angular/gate-demand.js.map +1 -0
- package/build/angular/host-instance/index.js +1 -1
- package/build/angular/index.d.ts +5 -2
- package/build/angular/index.js +16 -1
- package/build/angular/index.js.map +1 -1
- package/build/angular/modules/animated/create-animated-component.d.ts +6 -6
- package/build/angular/modules/animated/create-animated-component.js +73 -81
- package/build/angular/modules/animated/create-animated-component.js.map +1 -1
- package/build/angular/modules/animated/index.js +1 -1
- package/build/angular/modules/animated/index.js.map +1 -1
- package/build/angular/modules/image/index.d.ts +3 -0
- package/build/angular/modules/image/index.js +16 -0
- package/build/angular/modules/image/index.js.map +1 -0
- package/build/angular/primitives/index.d.ts +28 -16
- package/build/angular/primitives/index.js +77 -31
- package/build/angular/primitives/index.js.map +1 -1
- package/build/angular/primitives/shared.d.ts +2 -3
- package/build/angular/primitives/shared.js +8 -53
- package/build/angular/primitives/shared.js.map +1 -1
- package/build/angular/register.d.ts +1 -0
- package/build/angular/register.js +16 -0
- package/build/angular/register.js.map +1 -0
- package/build/angular/render/index.js +4 -2
- package/build/angular/render/index.js.map +1 -1
- package/build/angular/renderer/index.js +207 -60
- package/build/angular/renderer/index.js.map +1 -1
- package/build/angular/renderer/value-change.d.ts +2 -0
- package/build/angular/renderer/value-change.js +9 -0
- package/build/angular/renderer/value-change.js.map +1 -0
- package/metro-config.cjs +23 -5
- package/metro-css-parser.cjs +2 -1
- package/package.json +17 -7
- package/src/anchor-host-registry.ts +1 -15
- package/src/change-detection-flush.ts +120 -0
- package/src/components/activity-indicator-props.ts +21 -0
- package/src/components/button-props.ts +26 -0
- package/src/components/flat-list/index.ts +12 -4
- package/src/components/image-background-props.ts +24 -0
- package/src/components/{image/shared.ts → image-shared.ts} +57 -26
- package/src/components/input-accessory-view-props.ts +21 -0
- package/src/components/keyboard-avoiding-view/index.ts +27 -16
- package/src/components/modal/index.ts +32 -11
- package/src/components/pressable-props.ts +73 -0
- package/src/components/refresh-control-props.ts +43 -0
- package/src/components/safe-area-view-props.ts +28 -0
- package/src/components/scroll-view-props.ts +109 -0
- package/src/components/section-list/index.ts +18 -0
- package/src/components/text-input-props.ts +72 -0
- package/src/components/touchable-native-feedback/touchable-native-feedback-props.ts +23 -0
- package/src/components/touchable-props.ts +30 -0
- package/src/components/touchable-without-feedback/touchable-without-feedback-props.ts +21 -0
- package/src/components/virtualized-list/index.ts +254 -153
- package/src/components/virtualized-section-list/index.ts +18 -0
- package/src/components.ts +86 -35
- package/src/create-portal/index.ts +39 -9
- package/src/create-tunnel/index.ts +1 -1
- package/src/diagnostics.ts +1 -1
- package/src/element-props.ts +90 -0
- package/src/elements.ts +919 -0
- package/src/gate-demand.ts +109 -0
- package/src/host-instance/index.ts +1 -1
- package/src/index.ts +54 -15
- package/src/modules/animated/create-animated-component.ts +73 -59
- package/src/modules/animated/index.ts +1 -1
- package/src/modules/image/index.ts +18 -0
- package/src/primitives/index.ts +47 -16
- package/src/primitives/shared.ts +11 -44
- package/src/register.ts +15 -0
- package/src/render/index.ts +4 -2
- package/src/renderer/index.ts +239 -80
- package/src/renderer/value-change.ts +8 -0
- package/build/angular/components/activity-indicator/index.android.d.ts +0 -13
- package/build/angular/components/activity-indicator/index.android.js +0 -29
- package/build/angular/components/activity-indicator/index.android.js.map +0 -1
- package/build/angular/components/activity-indicator/index.d.ts +0 -1
- package/build/angular/components/activity-indicator/index.ios.d.ts +0 -9
- package/build/angular/components/activity-indicator/index.ios.js +0 -26
- package/build/angular/components/activity-indicator/index.ios.js.map +0 -1
- package/build/angular/components/activity-indicator/index.js +0 -4
- package/build/angular/components/activity-indicator/index.js.map +0 -1
- package/build/angular/components/activity-indicator/shared.d.ts +0 -67
- package/build/angular/components/activity-indicator/shared.js +0 -260
- package/build/angular/components/activity-indicator/shared.js.map +0 -1
- package/build/angular/components/button.d.ts +0 -65
- package/build/angular/components/button.js +0 -351
- package/build/angular/components/button.js.map +0 -1
- package/build/angular/components/image/index.android.d.ts +0 -15
- package/build/angular/components/image/index.android.js +0 -91
- package/build/angular/components/image/index.android.js.map +0 -1
- package/build/angular/components/image/index.d.ts +0 -1
- package/build/angular/components/image/index.ios.d.ts +0 -15
- package/build/angular/components/image/index.ios.js +0 -91
- package/build/angular/components/image/index.ios.js.map +0 -1
- package/build/angular/components/image/index.js +0 -3
- package/build/angular/components/image/index.js.map +0 -1
- package/build/angular/components/image/shared.js.map +0 -1
- package/build/angular/components/image-background.d.ts +0 -82
- package/build/angular/components/image-background.js +0 -434
- package/build/angular/components/image-background.js.map +0 -1
- package/build/angular/components/input-accessory-view/index.d.ts +0 -65
- package/build/angular/components/input-accessory-view/index.js +0 -290
- package/build/angular/components/input-accessory-view/index.js.map +0 -1
- package/build/angular/components/pressable/index.d.ts +0 -129
- package/build/angular/components/pressable/index.js +0 -473
- package/build/angular/components/pressable/index.js.map +0 -1
- package/build/angular/components/refresh-control/index.d.ts +0 -90
- package/build/angular/components/refresh-control/index.js +0 -380
- package/build/angular/components/refresh-control/index.js.map +0 -1
- package/build/angular/components/safe-area-view/index.d.ts +0 -62
- package/build/angular/components/safe-area-view/index.js +0 -287
- package/build/angular/components/safe-area-view/index.js.map +0 -1
- package/build/angular/components/scroll-view/index.android.d.ts +0 -20
- package/build/angular/components/scroll-view/index.android.js +0 -262
- package/build/angular/components/scroll-view/index.android.js.map +0 -1
- package/build/angular/components/scroll-view/index.d.ts +0 -3
- package/build/angular/components/scroll-view/index.ios.d.ts +0 -8
- package/build/angular/components/scroll-view/index.ios.js +0 -92
- package/build/angular/components/scroll-view/index.ios.js.map +0 -1
- package/build/angular/components/scroll-view/index.js +0 -6
- package/build/angular/components/scroll-view/index.js.map +0 -1
- package/build/angular/components/scroll-view/projection.d.ts +0 -67
- package/build/angular/components/scroll-view/projection.js +0 -560
- package/build/angular/components/scroll-view/projection.js.map +0 -1
- package/build/angular/components/scroll-view/shared.d.ts +0 -239
- package/build/angular/components/scroll-view/shared.js +0 -832
- package/build/angular/components/scroll-view/shared.js.map +0 -1
- package/build/angular/components/scroll-view/sticky-header.d.ts +0 -40
- package/build/angular/components/scroll-view/sticky-header.js +0 -224
- package/build/angular/components/scroll-view/sticky-header.js.map +0 -1
- package/build/angular/components/switch/index.android.d.ts +0 -24
- package/build/angular/components/switch/index.android.js +0 -112
- package/build/angular/components/switch/index.android.js.map +0 -1
- package/build/angular/components/switch/index.d.ts +0 -1
- package/build/angular/components/switch/index.ios.d.ts +0 -23
- package/build/angular/components/switch/index.ios.js +0 -111
- package/build/angular/components/switch/index.ios.js.map +0 -1
- package/build/angular/components/switch/index.js +0 -4
- package/build/angular/components/switch/index.js.map +0 -1
- package/build/angular/components/switch/shared.d.ts +0 -49
- package/build/angular/components/switch/shared.js +0 -191
- package/build/angular/components/switch/shared.js.map +0 -1
- package/build/angular/components/text-input.d.ts +0 -161
- package/build/angular/components/text-input.js +0 -659
- package/build/angular/components/text-input.js.map +0 -1
- package/build/angular/components/touchable/index.d.ts +0 -276
- package/build/angular/components/touchable/index.js +0 -1422
- package/build/angular/components/touchable/index.js.map +0 -1
- package/build/angular/components/touchable-native-feedback/index.d.ts +0 -86
- package/build/angular/components/touchable-native-feedback/index.js +0 -407
- package/build/angular/components/touchable-native-feedback/index.js.map +0 -1
- package/src/components/activity-indicator/index.android.ts +0 -23
- package/src/components/activity-indicator/index.ios.ts +0 -21
- package/src/components/activity-indicator/index.ts +0 -4
- package/src/components/activity-indicator/shared.ts +0 -225
- package/src/components/button.ts +0 -220
- package/src/components/image/index.android.ts +0 -99
- package/src/components/image/index.ios.ts +0 -99
- package/src/components/image/index.ts +0 -3
- package/src/components/image-background.ts +0 -290
- package/src/components/input-accessory-view/index.ts +0 -240
- package/src/components/pressable/index.ts +0 -462
- package/src/components/refresh-control/index.ts +0 -340
- package/src/components/safe-area-view/index.ts +0 -231
- package/src/components/scroll-view/index.android.ts +0 -205
- package/src/components/scroll-view/index.ios.ts +0 -81
- package/src/components/scroll-view/index.ts +0 -7
- package/src/components/scroll-view/projection.ts +0 -713
- package/src/components/scroll-view/shared.ts +0 -1066
- package/src/components/scroll-view/sticky-header.ts +0 -267
- package/src/components/switch/index.android.ts +0 -113
- package/src/components/switch/index.ios.ts +0 -112
- package/src/components/switch/index.ts +0 -4
- package/src/components/switch/shared.ts +0 -284
- package/src/components/text-input.ts +0 -613
- package/src/components/touchable/index.ts +0 -913
- package/src/components/touchable-native-feedback/index.ts +0 -317
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
// TouchableNativeFeedback: the Angular lifecycle half. Android's ripple / state-drawable
|
|
2
|
-
// touchable, built on Pressable like the rest of the family. RN realizes its feedback by cloning
|
|
3
|
-
// the child into an RCTView carrying native ripple props; we instead nest the child under a
|
|
4
|
-
// feedback <symbiote-view> that carries those props (nativeBackgroundAndroid /
|
|
5
|
-
// nativeForegroundAndroid), inside a <Pressable> that owns the press wiring. The native props are
|
|
6
|
-
// read by Android's ReactViewManager; on iOS they are inert, so the child still renders with
|
|
7
|
-
// working press wiring. The static factories + background mapping are shared in
|
|
8
|
-
// @symbiote-native/components and reused verbatim. One Fabric path both platforms, so this stays
|
|
9
|
-
// a flat single file, mirroring React/Vue.
|
|
10
|
-
//
|
|
11
|
-
// This component's own press/hover events are real @Output() EventEmitters too, matching
|
|
12
|
-
// Pressable (which it wraps) — `(press)="press.emit($event)"`, never `[onPress]="onPress"`. The
|
|
13
|
-
// a11y identity bag + the four a11y events live on the feedback view — the one host intrinsic here
|
|
14
|
-
// — folded through the shared resolveAccessibilityProps and routed through emit() on the (event)
|
|
15
|
-
// channel (Angular blocks [onX] property bindings on host elements). disabled folds into the a11y
|
|
16
|
-
// state via resolveDisabledAccessibilityState, exactly as Pressable does for its own host.
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
CUSTOM_ELEMENTS_SCHEMA,
|
|
20
|
-
ChangeDetectionStrategy,
|
|
21
|
-
Component,
|
|
22
|
-
ElementRef,
|
|
23
|
-
EventEmitter,
|
|
24
|
-
computed,
|
|
25
|
-
inject,
|
|
26
|
-
Input,
|
|
27
|
-
Output,
|
|
28
|
-
signal,
|
|
29
|
-
type DoCheck,
|
|
30
|
-
type OnChanges,
|
|
31
|
-
} from '@angular/core';
|
|
32
|
-
import {
|
|
33
|
-
backgroundProps,
|
|
34
|
-
canUseNativeForeground,
|
|
35
|
-
resolveAccessibilityProps,
|
|
36
|
-
resolveDisabledAccessibilityState,
|
|
37
|
-
rippleBackground,
|
|
38
|
-
selectableBackground,
|
|
39
|
-
selectableBackgroundBorderless,
|
|
40
|
-
type IAccessibilityProps,
|
|
41
|
-
type IAccessibilityStateValue,
|
|
42
|
-
type IAriaProps,
|
|
43
|
-
type INativeFeedbackBackground,
|
|
44
|
-
type IPressableAndroidRippleConfig,
|
|
45
|
-
type IRectOffset,
|
|
46
|
-
} from '@symbiote-native/components';
|
|
47
|
-
import {
|
|
48
|
-
dlog,
|
|
49
|
-
isSymbioteEvent,
|
|
50
|
-
type ISymbioteEvent,
|
|
51
|
-
} from '@symbiote-native/engine';
|
|
52
|
-
import {
|
|
53
|
-
anchorHostStyle,
|
|
54
|
-
SymbioteHostPropsDirective,
|
|
55
|
-
ViewHost,
|
|
56
|
-
} from '../../primitives';
|
|
57
|
-
import { Pressable, type IAngularPressableInputs } from '../pressable';
|
|
58
|
-
|
|
59
|
-
export type {
|
|
60
|
-
INativeFeedbackBackground,
|
|
61
|
-
IThemeAttrBackground,
|
|
62
|
-
IRippleBackground,
|
|
63
|
-
} from '@symbiote-native/components';
|
|
64
|
-
|
|
65
|
-
// Mirrors React's ITouchableNativeFeedbackProps (Omit<IPressableProps, 'style'> + the native
|
|
66
|
-
// feedback config) minus children (Angular takes children via <ng-content>) and minus the press/
|
|
67
|
-
// hover events (declared as this component's OWN @Output()s below). Declared per-adapter over the
|
|
68
|
-
// shared Pressable INPUT surface.
|
|
69
|
-
export type IAngularTouchableNativeFeedbackProps = Omit<
|
|
70
|
-
IAngularPressableInputs,
|
|
71
|
-
'style'
|
|
72
|
-
> & {
|
|
73
|
-
background?: INativeFeedbackBackground;
|
|
74
|
-
useForeground?: boolean;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
@Component({
|
|
78
|
-
selector: 'TouchableNativeFeedback',
|
|
79
|
-
standalone: true,
|
|
80
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
81
|
-
imports: [Pressable, ViewHost, SymbioteHostPropsDirective],
|
|
82
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
83
|
-
template: `
|
|
84
|
-
<Pressable
|
|
85
|
-
(press)="press.emit($event)"
|
|
86
|
-
(pressIn)="pressIn.emit($event)"
|
|
87
|
-
(pressOut)="pressOut.emit($event)"
|
|
88
|
-
(pressMove)="pressMove.emit($event)"
|
|
89
|
-
(longPress)="longPress.emit($event)"
|
|
90
|
-
(hoverIn)="hoverIn.emit($event)"
|
|
91
|
-
(hoverOut)="hoverOut.emit($event)"
|
|
92
|
-
[delayLongPress]="delayLongPress"
|
|
93
|
-
[delayHoverIn]="delayHoverIn"
|
|
94
|
-
[delayHoverOut]="delayHoverOut"
|
|
95
|
-
[disabled]="disabled"
|
|
96
|
-
[cancelable]="cancelable"
|
|
97
|
-
[hitSlop]="hitSlop"
|
|
98
|
-
[pressRetentionOffset]="pressRetentionOffset"
|
|
99
|
-
[unstable_pressDelay]="unstable_pressDelay"
|
|
100
|
-
[android_ripple]="android_ripple"
|
|
101
|
-
[android_disableSound]="android_disableSound"
|
|
102
|
-
>
|
|
103
|
-
<symbiote-view
|
|
104
|
-
[symbioteHostProps]="hostProps()"
|
|
105
|
-
(accessibilityAction)="emit(accessibilityAction, $event)"
|
|
106
|
-
(accessibilityTap)="emit(accessibilityTap, $event)"
|
|
107
|
-
(magicTap)="emit(magicTap, $event)"
|
|
108
|
-
(accessibilityEscape)="emit(accessibilityEscape, $event)"
|
|
109
|
-
>
|
|
110
|
-
<ng-content></ng-content>
|
|
111
|
-
</symbiote-view>
|
|
112
|
-
</Pressable>
|
|
113
|
-
`,
|
|
114
|
-
})
|
|
115
|
-
export class TouchableNativeFeedback
|
|
116
|
-
implements IAngularTouchableNativeFeedbackProps, OnChanges, DoCheck
|
|
117
|
-
{
|
|
118
|
-
// The static helpers are pure config-dict producers; they live as members on the component class
|
|
119
|
-
// so callers reach them as `TouchableNativeFeedback.Ripple(...)`, exactly like RN.
|
|
120
|
-
static readonly SelectableBackground = selectableBackground;
|
|
121
|
-
static readonly SelectableBackgroundBorderless =
|
|
122
|
-
selectableBackgroundBorderless;
|
|
123
|
-
static readonly Ripple = rippleBackground;
|
|
124
|
-
static readonly canUseNativeForeground = canUseNativeForeground;
|
|
125
|
-
|
|
126
|
-
@Output() readonly press = new EventEmitter<ISymbioteEvent>();
|
|
127
|
-
@Output() readonly pressIn = new EventEmitter<ISymbioteEvent>();
|
|
128
|
-
@Output() readonly pressOut = new EventEmitter<ISymbioteEvent>();
|
|
129
|
-
@Output() readonly pressMove = new EventEmitter<ISymbioteEvent>();
|
|
130
|
-
@Output() readonly longPress = new EventEmitter<ISymbioteEvent>();
|
|
131
|
-
@Output() readonly hoverIn = new EventEmitter<ISymbioteEvent>();
|
|
132
|
-
@Output() readonly hoverOut = new EventEmitter<ISymbioteEvent>();
|
|
133
|
-
@Output() readonly accessibilityAction = new EventEmitter<ISymbioteEvent>();
|
|
134
|
-
@Output() readonly accessibilityTap = new EventEmitter<ISymbioteEvent>();
|
|
135
|
-
@Output() readonly magicTap = new EventEmitter<ISymbioteEvent>();
|
|
136
|
-
@Output() readonly accessibilityEscape = new EventEmitter<ISymbioteEvent>();
|
|
137
|
-
@Input() background?: INativeFeedbackBackground;
|
|
138
|
-
@Input() useForeground?: boolean;
|
|
139
|
-
@Input() delayLongPress?: number;
|
|
140
|
-
@Input() delayHoverIn?: number;
|
|
141
|
-
@Input() delayHoverOut?: number;
|
|
142
|
-
@Input() disabled?: boolean;
|
|
143
|
-
@Input() cancelable?: boolean;
|
|
144
|
-
@Input() hitSlop?: IRectOffset;
|
|
145
|
-
@Input() pressRetentionOffset?: IRectOffset;
|
|
146
|
-
@Input() unstable_pressDelay?: number;
|
|
147
|
-
@Input() android_ripple?: IPressableAndroidRippleConfig;
|
|
148
|
-
@Input() android_disableSound?: boolean;
|
|
149
|
-
@Input() testID?: string;
|
|
150
|
-
@Input() nativeID?: string;
|
|
151
|
-
@Input() accessible?: boolean;
|
|
152
|
-
@Input() accessibilityLabel?: string;
|
|
153
|
-
@Input() accessibilityHint?: string;
|
|
154
|
-
@Input() accessibilityRole?: IAccessibilityProps['accessibilityRole'];
|
|
155
|
-
@Input() accessibilityState?: IAccessibilityStateValue;
|
|
156
|
-
@Input() accessibilityValue?: IAccessibilityProps['accessibilityValue'];
|
|
157
|
-
@Input() accessibilityActions?: IAccessibilityProps['accessibilityActions'];
|
|
158
|
-
@Input() accessibilityLabelledBy?: string | string[];
|
|
159
|
-
@Input()
|
|
160
|
-
importantForAccessibility?: IAccessibilityProps['importantForAccessibility'];
|
|
161
|
-
@Input()
|
|
162
|
-
accessibilityLiveRegion?: IAccessibilityProps['accessibilityLiveRegion'];
|
|
163
|
-
@Input() screenReaderFocusable?: boolean;
|
|
164
|
-
@Input() accessibilityViewIsModal?: boolean;
|
|
165
|
-
@Input() accessibilityElementsHidden?: boolean;
|
|
166
|
-
@Input() accessibilityIgnoresInvertColors?: boolean;
|
|
167
|
-
@Input() accessibilityLanguage?: string;
|
|
168
|
-
@Input() accessibilityRespondsToUserInteraction?: boolean;
|
|
169
|
-
@Input() accessibilityShowsLargeContentViewer?: boolean;
|
|
170
|
-
@Input() accessibilityLargeContentTitle?: string;
|
|
171
|
-
@Input() role?: IAriaProps['role'];
|
|
172
|
-
@Input('aria-label') ariaLabel?: string;
|
|
173
|
-
@Input('aria-labelledby') ariaLabelledBy?: string;
|
|
174
|
-
@Input('aria-live') ariaLive?: IAriaProps['aria-live'];
|
|
175
|
-
@Input('aria-hidden') ariaHidden?: boolean;
|
|
176
|
-
@Input('aria-busy') ariaBusy?: boolean;
|
|
177
|
-
@Input('aria-checked') ariaChecked?: boolean | 'mixed';
|
|
178
|
-
@Input('aria-disabled') ariaDisabled?: boolean;
|
|
179
|
-
@Input('aria-expanded') ariaExpanded?: boolean;
|
|
180
|
-
@Input('aria-selected') ariaSelected?: boolean;
|
|
181
|
-
@Input('aria-modal') ariaModal?: boolean;
|
|
182
|
-
@Input('aria-valuemax') ariaValueMax?: number;
|
|
183
|
-
@Input('aria-valuemin') ariaValueMin?: number;
|
|
184
|
-
@Input('aria-valuenow') ariaValueNow?: number;
|
|
185
|
-
@Input('aria-valuetext') ariaValueText?: string;
|
|
186
|
-
|
|
187
|
-
// This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
|
|
188
|
-
// onto (see anchorHostStyle's doc comment) — NOT the feedback <symbiote-view> one level down.
|
|
189
|
-
// TouchableNativeFeedback has no explicit `style`/`class`-forwarding @Input() of its own (RN's
|
|
190
|
-
// TouchableNativeFeedback takes none either — style/class always came from the child), so the
|
|
191
|
-
// anchor's class-derived style is the ONLY style source for hostProps.style below.
|
|
192
|
-
private readonly elementRef = inject(ElementRef);
|
|
193
|
-
|
|
194
|
-
// Bridges the non-reactive @Input fields above into the reactive graph, so the computed() bag
|
|
195
|
-
// below can memoize a value derived from them. Signal inputs would make this unnecessary, but
|
|
196
|
-
// `input()` is visible only to the AOT compiler and this package's unit suite runs on JIT - see
|
|
197
|
-
// the `angular-adapter-change-detection` skill, §6. Mirrors ScrollView's identical bridge
|
|
198
|
-
// (components/scroll-view/shared.ts), including its constraint: ONLY safe for a bag whose every
|
|
199
|
-
// dependency is an @Input or carries its own signal, never for plain internal mutable state.
|
|
200
|
-
private readonly inputsRevision = signal(0);
|
|
201
|
-
|
|
202
|
-
// The anchor's class-derived style is hostProps' one dependency that is NOT an @Input:
|
|
203
|
-
// `class="..."`/`[class.x]`/`[ngClass]` at the use site resolves through the renderer's
|
|
204
|
-
// addClass/removeClass onto the anchor node (anchorHostStyle's doc comment), so it never appears
|
|
205
|
-
// in SimpleChanges and ngOnChanges cannot cover it. The engine's commitClassStyle allocates a
|
|
206
|
-
// fresh [classStyle, explicitStyle] array on exactly the passes where a class token actually
|
|
207
|
-
// moved, so signal.set's own Object.is check makes an unchanged poll a no-op that dirties nothing.
|
|
208
|
-
private readonly anchorStyle = signal<unknown>(undefined);
|
|
209
|
-
|
|
210
|
-
// ngDoCheck is the only hook that observes the anchor AFTER the parent wrote it. Angular flushes
|
|
211
|
-
// a node's pre-order hooks at the next `advance` PAST it (hooks.ts callHooks runs "until that
|
|
212
|
-
// node index exclusive") or in refreshView's post-template flush - both strictly after the
|
|
213
|
-
// parent's classProp on this element, and strictly before this component's own view refreshes.
|
|
214
|
-
// Angular also nulls the active consumer around lifecycle hooks (render3/hooks.ts), so this
|
|
215
|
-
// write registers no dependency on the caller's view and cannot throw NG0600.
|
|
216
|
-
ngDoCheck(): void {
|
|
217
|
-
this.anchorStyle.set(anchorHostStyle(this.elementRef));
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
ngOnChanges(): void {
|
|
221
|
-
// Tells the computed bag below that an @Input moved - plain class fields are not reactive on
|
|
222
|
-
// their own. Must stay in ngOnChanges: that is the single moment Angular has finished writing
|
|
223
|
-
// every changed input for this pass.
|
|
224
|
-
this.inputsRevision.update(revision => revision + 1);
|
|
225
|
-
dlog(
|
|
226
|
-
`TouchableNativeFeedback render ${this.resolvedBackground.type} useForeground ${this.useForeground === true}`,
|
|
227
|
-
);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// RN defaults a missing background to SelectableBackground() so the touchable always shows
|
|
231
|
-
// feedback; mirror that here.
|
|
232
|
-
private get resolvedBackground(): INativeFeedbackBackground {
|
|
233
|
-
return this.background ?? selectableBackground();
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// backgroundProps picks the foreground slot only where the platform supports it, else the
|
|
237
|
-
// background slot (canUseNativeForeground) — shared with React/Vue. One side is always undefined.
|
|
238
|
-
get feedback(): Record<string, INativeFeedbackBackground> {
|
|
239
|
-
return backgroundProps(
|
|
240
|
-
this.resolvedBackground,
|
|
241
|
-
this.useForeground === true,
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Assembles the SAME resolved values the template used to bind one-by-one into a single
|
|
246
|
-
// flat bag for `[symbioteHostProps]` (Renderer2.setProperty per key) — see primitives/shared.ts.
|
|
247
|
-
//
|
|
248
|
-
// MEASURED 2026-08-16: as a getter this rebuilt the bag on every refresh of this view, and a
|
|
249
|
-
// press dirties this very view (SymbioteHostPropsDirective wraps each flat-bag onX with
|
|
250
|
-
// markForCheck), so `[symbioteHostProps]`'s reference check failed every time and re-pushed
|
|
251
|
-
// every key through Renderer2.setProperty -> routeProp for an identical bag. Memoized, an
|
|
252
|
-
// unchanged bag costs one reference compare. Every dependency below is either an @Input (covered
|
|
253
|
-
// by inputsRevision) or the anchor style (covered by its own signal) - nothing here reads plain
|
|
254
|
-
// internal mutable state, which is what makes memoizing this one safe.
|
|
255
|
-
readonly hostProps = computed<Record<string, unknown>>(() => {
|
|
256
|
-
this.inputsRevision();
|
|
257
|
-
return {
|
|
258
|
-
nativeBackgroundAndroid: this.feedback['nativeBackgroundAndroid'],
|
|
259
|
-
nativeForegroundAndroid: this.feedback['nativeForegroundAndroid'],
|
|
260
|
-
style: this.anchorStyle(),
|
|
261
|
-
testID: this.testID,
|
|
262
|
-
nativeID: this.nativeID,
|
|
263
|
-
accessible: this.accessible,
|
|
264
|
-
...this.folded,
|
|
265
|
-
};
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
// Forward an engine event to the matching @Output(), narrowing the template's untyped $event.
|
|
269
|
-
emit(emitter: EventEmitter<ISymbioteEvent>, event: unknown): void {
|
|
270
|
-
if (isSymbioteEvent(event)) emitter.emit(event);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// Fold the web aria-*/role aliases into the canonical accessibility* props once per render, so the
|
|
274
|
-
// host never sees an aria-* key (native ignores them), and merge `disabled` into the a11y state
|
|
275
|
-
// (resolveDisabledAccessibilityState) the same way Pressable does for its own host.
|
|
276
|
-
get folded(): Partial<IAngularTouchableNativeFeedbackProps> {
|
|
277
|
-
return resolveAccessibilityProps({
|
|
278
|
-
accessibilityLabel: this.accessibilityLabel,
|
|
279
|
-
accessibilityHint: this.accessibilityHint,
|
|
280
|
-
accessibilityRole: this.accessibilityRole,
|
|
281
|
-
accessibilityState: resolveDisabledAccessibilityState(
|
|
282
|
-
this.accessibilityState,
|
|
283
|
-
this.disabled,
|
|
284
|
-
),
|
|
285
|
-
accessibilityValue: this.accessibilityValue,
|
|
286
|
-
accessibilityActions: this.accessibilityActions,
|
|
287
|
-
accessibilityLabelledBy: this.accessibilityLabelledBy,
|
|
288
|
-
importantForAccessibility: this.importantForAccessibility,
|
|
289
|
-
accessibilityLiveRegion: this.accessibilityLiveRegion,
|
|
290
|
-
screenReaderFocusable: this.screenReaderFocusable,
|
|
291
|
-
accessibilityViewIsModal: this.accessibilityViewIsModal,
|
|
292
|
-
accessibilityElementsHidden: this.accessibilityElementsHidden,
|
|
293
|
-
accessibilityIgnoresInvertColors: this.accessibilityIgnoresInvertColors,
|
|
294
|
-
accessibilityLanguage: this.accessibilityLanguage,
|
|
295
|
-
accessibilityRespondsToUserInteraction:
|
|
296
|
-
this.accessibilityRespondsToUserInteraction,
|
|
297
|
-
accessibilityShowsLargeContentViewer:
|
|
298
|
-
this.accessibilityShowsLargeContentViewer,
|
|
299
|
-
accessibilityLargeContentTitle: this.accessibilityLargeContentTitle,
|
|
300
|
-
role: this.role,
|
|
301
|
-
'aria-label': this.ariaLabel,
|
|
302
|
-
'aria-labelledby': this.ariaLabelledBy,
|
|
303
|
-
'aria-live': this.ariaLive,
|
|
304
|
-
'aria-hidden': this.ariaHidden,
|
|
305
|
-
'aria-busy': this.ariaBusy,
|
|
306
|
-
'aria-checked': this.ariaChecked,
|
|
307
|
-
'aria-disabled': this.ariaDisabled,
|
|
308
|
-
'aria-expanded': this.ariaExpanded,
|
|
309
|
-
'aria-selected': this.ariaSelected,
|
|
310
|
-
'aria-modal': this.ariaModal,
|
|
311
|
-
'aria-valuemax': this.ariaValueMax,
|
|
312
|
-
'aria-valuemin': this.ariaValueMin,
|
|
313
|
-
'aria-valuenow': this.ariaValueNow,
|
|
314
|
-
'aria-valuetext': this.ariaValueText,
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
}
|