@symbiote-native/angular 0.1.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/LICENSE +21 -0
- package/README.md +147 -0
- package/build/angular/components/activity-indicator/index.android.d.ts +12 -0
- package/build/angular/components/activity-indicator/index.android.js +21 -0
- package/build/angular/components/activity-indicator/index.android.js.map +1 -0
- package/build/angular/components/activity-indicator/index.d.ts +1 -0
- package/build/angular/components/activity-indicator/index.ios.d.ts +8 -0
- package/build/angular/components/activity-indicator/index.ios.js +21 -0
- package/build/angular/components/activity-indicator/index.ios.js.map +1 -0
- package/build/angular/components/activity-indicator/index.js +4 -0
- package/build/angular/components/activity-indicator/index.js.map +1 -0
- package/build/angular/components/activity-indicator/shared.d.ts +67 -0
- package/build/angular/components/activity-indicator/shared.js +260 -0
- package/build/angular/components/activity-indicator/shared.js.map +1 -0
- package/build/angular/components/button.d.ts +63 -0
- package/build/angular/components/button.js +332 -0
- package/build/angular/components/button.js.map +1 -0
- package/build/angular/components/drawer-layout-android/index.android.d.ts +34 -0
- package/build/angular/components/drawer-layout-android/index.android.js +291 -0
- package/build/angular/components/drawer-layout-android/index.android.js.map +1 -0
- package/build/angular/components/drawer-layout-android/index.d.ts +11 -0
- package/build/angular/components/drawer-layout-android/index.js +109 -0
- package/build/angular/components/drawer-layout-android/index.js.map +1 -0
- package/build/angular/components/drawer-layout-android/shared.d.ts +74 -0
- package/build/angular/components/drawer-layout-android/shared.js +138 -0
- package/build/angular/components/drawer-layout-android/shared.js.map +1 -0
- package/build/angular/components/flat-list/index.d.ts +122 -0
- package/build/angular/components/flat-list/index.js +689 -0
- package/build/angular/components/flat-list/index.js.map +1 -0
- package/build/angular/components/image/index.android.d.ts +10 -0
- package/build/angular/components/image/index.android.js +59 -0
- package/build/angular/components/image/index.android.js.map +1 -0
- package/build/angular/components/image/index.d.ts +1 -0
- package/build/angular/components/image/index.ios.d.ts +10 -0
- package/build/angular/components/image/index.ios.js +59 -0
- package/build/angular/components/image/index.ios.js.map +1 -0
- package/build/angular/components/image/index.js +3 -0
- package/build/angular/components/image/index.js.map +1 -0
- package/build/angular/components/image/shared.d.ts +101 -0
- package/build/angular/components/image/shared.js +408 -0
- package/build/angular/components/image/shared.js.map +1 -0
- package/build/angular/components/image-background.d.ts +81 -0
- package/build/angular/components/image-background.js +418 -0
- package/build/angular/components/image-background.js.map +1 -0
- package/build/angular/components/input-accessory-view.d.ts +59 -0
- package/build/angular/components/input-accessory-view.js +266 -0
- package/build/angular/components/input-accessory-view.js.map +1 -0
- package/build/angular/components/keyboard-avoiding-view.d.ts +82 -0
- package/build/angular/components/keyboard-avoiding-view.js +363 -0
- package/build/angular/components/keyboard-avoiding-view.js.map +1 -0
- package/build/angular/components/modal.d.ts +92 -0
- package/build/angular/components/modal.js +365 -0
- package/build/angular/components/modal.js.map +1 -0
- package/build/angular/components/pressable/index.d.ts +123 -0
- package/build/angular/components/pressable/index.js +421 -0
- package/build/angular/components/pressable/index.js.map +1 -0
- package/build/angular/components/refresh-control.d.ts +86 -0
- package/build/angular/components/refresh-control.js +347 -0
- package/build/angular/components/refresh-control.js.map +1 -0
- package/build/angular/components/safe-area-view.d.ts +57 -0
- package/build/angular/components/safe-area-view.js +253 -0
- package/build/angular/components/safe-area-view.js.map +1 -0
- package/build/angular/components/scroll-view/index.android.d.ts +21 -0
- package/build/angular/components/scroll-view/index.android.js +235 -0
- package/build/angular/components/scroll-view/index.android.js.map +1 -0
- package/build/angular/components/scroll-view/index.d.ts +3 -0
- package/build/angular/components/scroll-view/index.ios.d.ts +9 -0
- package/build/angular/components/scroll-view/index.ios.js +86 -0
- package/build/angular/components/scroll-view/index.ios.js.map +1 -0
- package/build/angular/components/scroll-view/index.js +6 -0
- package/build/angular/components/scroll-view/index.js.map +1 -0
- package/build/angular/components/scroll-view/projection.d.ts +32 -0
- package/build/angular/components/scroll-view/projection.js +312 -0
- package/build/angular/components/scroll-view/projection.js.map +1 -0
- package/build/angular/components/scroll-view/shared.d.ts +230 -0
- package/build/angular/components/scroll-view/shared.js +679 -0
- package/build/angular/components/scroll-view/shared.js.map +1 -0
- package/build/angular/components/scroll-view/sticky-header.d.ts +41 -0
- package/build/angular/components/scroll-view/sticky-header.js +208 -0
- package/build/angular/components/scroll-view/sticky-header.js.map +1 -0
- package/build/angular/components/section-list/index.d.ts +116 -0
- package/build/angular/components/section-list/index.js +641 -0
- package/build/angular/components/section-list/index.js.map +1 -0
- package/build/angular/components/switch/index.android.d.ts +20 -0
- package/build/angular/components/switch/index.android.js +70 -0
- package/build/angular/components/switch/index.android.js.map +1 -0
- package/build/angular/components/switch/index.d.ts +1 -0
- package/build/angular/components/switch/index.ios.d.ts +19 -0
- package/build/angular/components/switch/index.ios.js +69 -0
- package/build/angular/components/switch/index.ios.js.map +1 -0
- package/build/angular/components/switch/index.js +4 -0
- package/build/angular/components/switch/index.js.map +1 -0
- package/build/angular/components/switch/shared.d.ts +40 -0
- package/build/angular/components/switch/shared.js +127 -0
- package/build/angular/components/switch/shared.js.map +1 -0
- package/build/angular/components/text-input.d.ts +153 -0
- package/build/angular/components/text-input.js +604 -0
- package/build/angular/components/text-input.js.map +1 -0
- package/build/angular/components/touchable-native-feedback.d.ts +83 -0
- package/build/angular/components/touchable-native-feedback.js +376 -0
- package/build/angular/components/touchable-native-feedback.js.map +1 -0
- package/build/angular/components/touchable.d.ts +248 -0
- package/build/angular/components/touchable.js +1206 -0
- package/build/angular/components/touchable.js.map +1 -0
- package/build/angular/components/virtualized-list/directives.d.ts +54 -0
- package/build/angular/components/virtualized-list/directives.js +154 -0
- package/build/angular/components/virtualized-list/directives.js.map +1 -0
- package/build/angular/components/virtualized-list/index.d.ts +268 -0
- package/build/angular/components/virtualized-list/index.js +1162 -0
- package/build/angular/components/virtualized-list/index.js.map +1 -0
- package/build/angular/components/virtualized-section-list/directives.d.ts +37 -0
- package/build/angular/components/virtualized-section-list/directives.js +77 -0
- package/build/angular/components/virtualized-section-list/directives.js.map +1 -0
- package/build/angular/components/virtualized-section-list/index.d.ts +178 -0
- package/build/angular/components/virtualized-section-list/index.js +722 -0
- package/build/angular/components/virtualized-section-list/index.js.map +1 -0
- package/build/angular/components.d.ts +39 -0
- package/build/angular/components.js +38 -0
- package/build/angular/components.js.map +1 -0
- package/build/angular/create-portal.d.ts +22 -0
- package/build/angular/create-portal.js +74 -0
- package/build/angular/create-portal.js.map +1 -0
- package/build/angular/create-tunnel.d.ts +34 -0
- package/build/angular/create-tunnel.js +126 -0
- package/build/angular/create-tunnel.js.map +1 -0
- package/build/angular/descriptor-to-angular/index.d.ts +22 -0
- package/build/angular/descriptor-to-angular/index.js +142 -0
- package/build/angular/descriptor-to-angular/index.js.map +1 -0
- package/build/angular/host-instance/index.d.ts +2 -0
- package/build/angular/host-instance/index.js +37 -0
- package/build/angular/host-instance/index.js.map +1 -0
- package/build/angular/index.d.ts +21 -0
- package/build/angular/index.js +42 -0
- package/build/angular/index.js.map +1 -0
- package/build/angular/modules/animated/create-animated-component.d.ts +68 -0
- package/build/angular/modules/animated/create-animated-component.js +429 -0
- package/build/angular/modules/animated/create-animated-component.js.map +1 -0
- package/build/angular/modules/animated/index.d.ts +51 -0
- package/build/angular/modules/animated/index.js +59 -0
- package/build/angular/modules/animated/index.js.map +1 -0
- package/build/angular/modules/app-registry/index.d.ts +7 -0
- package/build/angular/modules/app-registry/index.js +23 -0
- package/build/angular/modules/app-registry/index.js.map +1 -0
- package/build/angular/modules/status-bar.d.ts +20 -0
- package/build/angular/modules/status-bar.js +59 -0
- package/build/angular/modules/status-bar.js.map +1 -0
- package/build/angular/primitives/index.d.ts +63 -0
- package/build/angular/primitives/index.js +189 -0
- package/build/angular/primitives/index.js.map +1 -0
- package/build/angular/primitives/shared.d.ts +89 -0
- package/build/angular/primitives/shared.js +172 -0
- package/build/angular/primitives/shared.js.map +1 -0
- package/build/angular/render.d.ts +11 -0
- package/build/angular/render.js +161 -0
- package/build/angular/render.js.map +1 -0
- package/build/angular/renderer.d.ts +38 -0
- package/build/angular/renderer.js +360 -0
- package/build/angular/renderer.js.map +1 -0
- package/build/angular/services/color-scheme.service.d.ts +16 -0
- package/build/angular/services/color-scheme.service.js +31 -0
- package/build/angular/services/color-scheme.service.js.map +1 -0
- package/build/angular/services/index.d.ts +2 -0
- package/build/angular/services/index.js +3 -0
- package/build/angular/services/index.js.map +1 -0
- package/build/angular/services/window-dimensions.service.d.ts +16 -0
- package/build/angular/services/window-dimensions.service.js +42 -0
- package/build/angular/services/window-dimensions.service.js.map +1 -0
- package/build/components/activity-indicator/index.android.d.ts +9 -0
- package/build/components/activity-indicator/index.android.js +64 -0
- package/build/components/activity-indicator/index.d.ts +1 -0
- package/build/components/activity-indicator/index.ios.d.ts +5 -0
- package/build/components/activity-indicator/index.ios.js +64 -0
- package/build/components/activity-indicator/index.js +3 -0
- package/build/components/activity-indicator/shared.d.ts +64 -0
- package/build/components/activity-indicator/shared.js +424 -0
- package/build/components/button.d.ts +60 -0
- package/build/components/button.js +456 -0
- package/build/components/drawer-layout-android/index.android.d.ts +29 -0
- package/build/components/drawer-layout-android/index.android.js +326 -0
- package/build/components/drawer-layout-android/index.d.ts +8 -0
- package/build/components/drawer-layout-android/index.js +145 -0
- package/build/components/drawer-layout-android/shared.d.ts +71 -0
- package/build/components/drawer-layout-android/shared.js +205 -0
- package/build/components/flat-list/index.d.ts +119 -0
- package/build/components/flat-list/index.js +692 -0
- package/build/components/image/index.android.d.ts +7 -0
- package/build/components/image/index.android.js +88 -0
- package/build/components/image/index.d.ts +1 -0
- package/build/components/image/index.ios.d.ts +7 -0
- package/build/components/image/index.ios.js +88 -0
- package/build/components/image/index.js +2 -0
- package/build/components/image/shared.d.ts +101 -0
- package/build/components/image/shared.js +407 -0
- package/build/components/image-background.d.ts +78 -0
- package/build/components/image-background.js +583 -0
- package/build/components/input-accessory-view.d.ts +56 -0
- package/build/components/input-accessory-view.js +407 -0
- package/build/components/keyboard-avoiding-view.d.ts +79 -0
- package/build/components/keyboard-avoiding-view.js +509 -0
- package/build/components/modal.d.ts +89 -0
- package/build/components/modal.js +534 -0
- package/build/components/pressable/index.d.ts +120 -0
- package/build/components/pressable/index.js +640 -0
- package/build/components/refresh-control.d.ts +83 -0
- package/build/components/refresh-control.js +514 -0
- package/build/components/safe-area-view.d.ts +54 -0
- package/build/components/safe-area-view.js +393 -0
- package/build/components/scroll-view/index.android.d.ts +16 -0
- package/build/components/scroll-view/index.android.js +228 -0
- package/build/components/scroll-view/index.d.ts +3 -0
- package/build/components/scroll-view/index.ios.d.ts +6 -0
- package/build/components/scroll-view/index.ios.js +113 -0
- package/build/components/scroll-view/index.js +5 -0
- package/build/components/scroll-view/projection.d.ts +32 -0
- package/build/components/scroll-view/projection.js +311 -0
- package/build/components/scroll-view/shared.d.ts +225 -0
- package/build/components/scroll-view/shared.js +757 -0
- package/build/components/scroll-view/sticky-header.d.ts +38 -0
- package/build/components/scroll-view/sticky-header.js +257 -0
- package/build/components/section-list/index.d.ts +113 -0
- package/build/components/section-list/index.js +768 -0
- package/build/components/switch/index.android.d.ts +17 -0
- package/build/components/switch/index.android.js +107 -0
- package/build/components/switch/index.d.ts +1 -0
- package/build/components/switch/index.ios.d.ts +16 -0
- package/build/components/switch/index.ios.js +106 -0
- package/build/components/switch/index.js +3 -0
- package/build/components/switch/shared.d.ts +37 -0
- package/build/components/switch/shared.js +176 -0
- package/build/components/text-input.d.ts +150 -0
- package/build/components/text-input.js +826 -0
- package/build/components/touchable-native-feedback.d.ts +80 -0
- package/build/components/touchable-native-feedback.js +550 -0
- package/build/components/touchable.d.ts +241 -0
- package/build/components/touchable.js +1672 -0
- package/build/components/virtualized-list/directives.d.ts +41 -0
- package/build/components/virtualized-list/directives.js +250 -0
- package/build/components/virtualized-list/index.d.ts +265 -0
- package/build/components/virtualized-list/index.js +1344 -0
- package/build/components/virtualized-section-list/directives.d.ts +28 -0
- package/build/components/virtualized-section-list/directives.js +149 -0
- package/build/components/virtualized-section-list/index.d.ts +175 -0
- package/build/components/virtualized-section-list/index.js +854 -0
- package/build/components.d.ts +39 -0
- package/build/components.js +37 -0
- package/build/create-portal.d.ts +17 -0
- package/build/create-portal.js +128 -0
- package/build/create-tunnel.d.ts +29 -0
- package/build/create-tunnel.js +181 -0
- package/build/descriptor-to-angular/index.d.ts +19 -0
- package/build/descriptor-to-angular/index.js +186 -0
- package/build/host-instance/index.d.ts +2 -0
- package/build/host-instance/index.js +36 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +41 -0
- package/build/modules/animated/create-animated-component.d.ts +57 -0
- package/build/modules/animated/create-animated-component.js +490 -0
- package/build/modules/animated/index.d.ts +51 -0
- package/build/modules/animated/index.js +58 -0
- package/build/modules/app-registry/index.d.ts +7 -0
- package/build/modules/app-registry/index.js +22 -0
- package/build/modules/status-bar.d.ts +17 -0
- package/build/modules/status-bar.js +121 -0
- package/build/primitives/index.d.ts +32 -0
- package/build/primitives/index.js +386 -0
- package/build/primitives/shared.d.ts +84 -0
- package/build/primitives/shared.js +231 -0
- package/build/render.d.ts +11 -0
- package/build/render.js +160 -0
- package/build/renderer.d.ts +38 -0
- package/build/renderer.js +359 -0
- package/build/services/color-scheme.service.d.ts +13 -0
- package/build/services/color-scheme.service.js +72 -0
- package/build/services/index.d.ts +2 -0
- package/build/services/index.js +2 -0
- package/build/services/window-dimensions.service.d.ts +13 -0
- package/build/services/window-dimensions.service.js +83 -0
- package/metro-css-parser.cjs +11 -0
- package/package.json +57 -0
- package/src/__tests__/responder-change-detection.test.ts +102 -0
- package/src/__tests__/responder-nested-cd.test.ts +113 -0
- package/src/angular-gaps.test.ts +142 -0
- package/src/angular-imports.test.ts +100 -0
- package/src/components/activity-indicator/activity-indicator-class-style.test.ts +44 -0
- package/src/components/activity-indicator/activity-indicator.test.ts +131 -0
- package/src/components/activity-indicator/index.android.ts +16 -0
- package/src/components/activity-indicator/index.ios.ts +17 -0
- package/src/components/activity-indicator/index.ts +4 -0
- package/src/components/activity-indicator/shared.ts +206 -0
- package/src/components/button.ts +193 -0
- package/src/components/flat-list/column-wrapper-style-class.test.ts +116 -0
- package/src/components/flat-list/flat-list-array-style.test.ts +131 -0
- package/src/components/flat-list/flat-list-class-style.test.ts +74 -0
- package/src/components/flat-list/flat-list-scroll-containment.test.ts +107 -0
- package/src/components/flat-list/flat-list.test.ts +99 -0
- package/src/components/flat-list/index.ts +575 -0
- package/src/components/image/image-class-style.test.ts +46 -0
- package/src/components/image/index.android.ts +48 -0
- package/src/components/image/index.ios.ts +48 -0
- package/src/components/image/index.ts +3 -0
- package/src/components/image/shared.ts +478 -0
- package/src/components/image-background-class-style.test.ts +48 -0
- package/src/components/image-background-style-class.test.ts +79 -0
- package/src/components/image-background.ts +270 -0
- package/src/components/input-accessory-view.test.ts +43 -0
- package/src/components/input-accessory-view.ts +191 -0
- package/src/components/keyboard-avoiding-view.test.ts +54 -0
- package/src/components/keyboard-avoiding-view.ts +308 -0
- package/src/components/modal.test.ts +43 -0
- package/src/components/modal.ts +304 -0
- package/src/components/pressable/index.ts +371 -0
- package/src/components/pressable/pressable.test.ts +85 -0
- package/src/components/refresh-control.test.ts +41 -0
- package/src/components/refresh-control.ts +288 -0
- package/src/components/safe-area-view.test.ts +43 -0
- package/src/components/safe-area-view.ts +178 -0
- package/src/components/scroll-view/android-scroll-view-axis-projection.test.ts +123 -0
- package/src/components/scroll-view/content-container-style-class.test.ts +75 -0
- package/src/components/scroll-view/index.android.ts +190 -0
- package/src/components/scroll-view/index.ios.ts +79 -0
- package/src/components/scroll-view/index.ts +7 -0
- package/src/components/scroll-view/projection.ts +384 -0
- package/src/components/scroll-view/scroll-view-class-style.test.ts +134 -0
- package/src/components/scroll-view/scroll-view-projection.test.ts +194 -0
- package/src/components/scroll-view/shared.ts +836 -0
- package/src/components/scroll-view/sticky-header.ts +230 -0
- package/src/components/section-list/index.ts +445 -0
- package/src/components/switch/android-switch-class.test.ts +42 -0
- package/src/components/switch/index.android.ts +61 -0
- package/src/components/switch/index.ios.ts +60 -0
- package/src/components/switch/index.ts +4 -0
- package/src/components/switch/shared.ts +197 -0
- package/src/components/switch/switch.test.ts +92 -0
- package/src/components/text-input-class-style.test.ts +54 -0
- package/src/components/text-input.ts +536 -0
- package/src/components/touchable-native-feedback.test.ts +49 -0
- package/src/components/touchable-native-feedback.ts +260 -0
- package/src/components/touchable.test.ts +102 -0
- package/src/components/touchable.ts +643 -0
- package/src/components/virtualized-list/directives.ts +169 -0
- package/src/components/virtualized-list/index.ts +1204 -0
- package/src/components/virtualized-list/virtualized-list-class-style.test.ts +76 -0
- package/src/components/virtualized-section-list/directives.ts +91 -0
- package/src/components/virtualized-section-list/index.ts +598 -0
- package/src/components/virtualized-section-list/virtualized-section-list-class-style.test.ts +60 -0
- package/src/components.ts +149 -0
- package/src/create-portal.test.ts +90 -0
- package/src/create-portal.ts +74 -0
- package/src/create-tunnel.test.ts +120 -0
- package/src/create-tunnel.ts +136 -0
- package/src/descriptor-to-angular/descriptor-outlet.test.ts +94 -0
- package/src/descriptor-to-angular/index.ts +190 -0
- package/src/host-instance/host-instance.test.ts +49 -0
- package/src/host-instance/index.ts +36 -0
- package/src/index.ts +257 -0
- package/src/modules/animated/animated-scroll-view.test.ts +85 -0
- package/src/modules/animated/create-animated-component.ts +435 -0
- package/src/modules/animated/index.ts +105 -0
- package/src/modules/app-registry/app-registry.test.ts +106 -0
- package/src/modules/app-registry/index.ts +60 -0
- package/src/modules/status-bar.test.ts +50 -0
- package/src/modules/status-bar.ts +57 -0
- package/src/primitives/index.ts +119 -0
- package/src/primitives/shared.ts +191 -0
- package/src/render.test.ts +147 -0
- package/src/render.ts +224 -0
- package/src/renderer.test.ts +179 -0
- package/src/renderer.ts +407 -0
- package/src/services/color-scheme.service.ts +27 -0
- package/src/services/index.ts +2 -0
- package/src/services/services.test.ts +163 -0
- package/src/services/window-dimensions.service.ts +41 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { AnimatedProps, dlog, isAnchor, reduceProps, routeProp, whenCommitted, createElement, appendChild, insertBefore, removeChild, } from '@symbiote-native/engine';
|
|
2
|
+
import { computeStickyInterpolation, readLayoutNumber, stickyDebounceMs, STICKY_HEADER_Z_INDEX, } from '@symbiote-native/components';
|
|
3
|
+
import { descriptorFor } from '@symbiote-native/components';
|
|
4
|
+
import { Platform } from '@symbiote-native/engine';
|
|
5
|
+
const contentProjection = new WeakMap();
|
|
6
|
+
const projectedWrappers = new WeakMap();
|
|
7
|
+
function createViewNode() {
|
|
8
|
+
const descriptor = descriptorFor('symbiote-view');
|
|
9
|
+
return createElement(descriptor.component, descriptor.isText);
|
|
10
|
+
}
|
|
11
|
+
function directNode(record) {
|
|
12
|
+
return record.wrapper ?? record.child;
|
|
13
|
+
}
|
|
14
|
+
function isProjectedRefreshControl(node) {
|
|
15
|
+
if (node.component === 'PullToRefreshView' || node.component === 'AndroidSwipeRefreshLayout') {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// Angular public <RefreshControl> is an anchor host whose real native refresh node lives inside
|
|
19
|
+
// its component view. Projection filtering must recognize that anchor, otherwise iOS re-renders
|
|
20
|
+
// a RefreshControl sibling and also leaves the projected one inside the scroll content.
|
|
21
|
+
return isAnchor(node) && node.children.some(isProjectedRefreshControl);
|
|
22
|
+
}
|
|
23
|
+
class StickyProjectionWrapper {
|
|
24
|
+
controller;
|
|
25
|
+
childIndex;
|
|
26
|
+
node;
|
|
27
|
+
measured = false;
|
|
28
|
+
layoutY = 0;
|
|
29
|
+
layoutHeight = 0;
|
|
30
|
+
animatedTranslateY;
|
|
31
|
+
animatedProps;
|
|
32
|
+
cancelBind;
|
|
33
|
+
listenerId;
|
|
34
|
+
debounceTimer;
|
|
35
|
+
translateY = null;
|
|
36
|
+
haveReceivedInitialZeroTranslateY = true;
|
|
37
|
+
constructor(controller, childIndex, node) {
|
|
38
|
+
this.controller = controller;
|
|
39
|
+
this.childIndex = childIndex;
|
|
40
|
+
this.node = node;
|
|
41
|
+
this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
|
|
42
|
+
inputRange: [-1, 0],
|
|
43
|
+
outputRange: [0, 0],
|
|
44
|
+
});
|
|
45
|
+
this.rebuild();
|
|
46
|
+
}
|
|
47
|
+
destroy() {
|
|
48
|
+
this.cancelBind?.();
|
|
49
|
+
this.cancelBind = undefined;
|
|
50
|
+
if (this.listenerId !== undefined) {
|
|
51
|
+
this.animatedTranslateY.removeListener(this.listenerId);
|
|
52
|
+
this.listenerId = undefined;
|
|
53
|
+
}
|
|
54
|
+
if (this.debounceTimer !== undefined) {
|
|
55
|
+
clearTimeout(this.debounceTimer);
|
|
56
|
+
this.debounceTimer = undefined;
|
|
57
|
+
}
|
|
58
|
+
if (this.animatedProps !== undefined) {
|
|
59
|
+
this.animatedProps.__detach();
|
|
60
|
+
this.animatedProps = undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
rebuild() {
|
|
64
|
+
if (this.listenerId !== undefined) {
|
|
65
|
+
this.animatedTranslateY.removeListener(this.listenerId);
|
|
66
|
+
this.listenerId = undefined;
|
|
67
|
+
}
|
|
68
|
+
const { inputRange, outputRange } = computeStickyInterpolation({
|
|
69
|
+
measured: this.measured,
|
|
70
|
+
inverted: this.controller.config.invertStickyHeaders,
|
|
71
|
+
scrollViewHeight: this.controller.config.scrollViewHeight,
|
|
72
|
+
layoutY: this.layoutY,
|
|
73
|
+
layoutHeight: this.layoutHeight,
|
|
74
|
+
nextHeaderLayoutY: this.controller.nextStickyHeaderY(this.childIndex),
|
|
75
|
+
});
|
|
76
|
+
this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
|
|
77
|
+
inputRange,
|
|
78
|
+
outputRange,
|
|
79
|
+
});
|
|
80
|
+
this.listenerId = this.animatedTranslateY.addListener(this.animatedValueListener);
|
|
81
|
+
this.applyProps();
|
|
82
|
+
dlog(`Angular ScrollView projection sticky index=${this.childIndex} measured=${this.measured} y=${this.layoutY}`);
|
|
83
|
+
}
|
|
84
|
+
onLayout = (event) => {
|
|
85
|
+
const y = readLayoutNumber(event, 'y');
|
|
86
|
+
const height = readLayoutNumber(event, 'height');
|
|
87
|
+
if (y !== undefined)
|
|
88
|
+
this.layoutY = y;
|
|
89
|
+
if (height !== undefined)
|
|
90
|
+
this.layoutHeight = height;
|
|
91
|
+
this.measured = true;
|
|
92
|
+
this.controller.recordHeaderLayoutY(this.childIndex, this.layoutY);
|
|
93
|
+
this.rebuild();
|
|
94
|
+
};
|
|
95
|
+
animatedValueListener = ({ value }) => {
|
|
96
|
+
if (typeof value !== 'number')
|
|
97
|
+
return;
|
|
98
|
+
if (value === 0 && !this.haveReceivedInitialZeroTranslateY) {
|
|
99
|
+
this.haveReceivedInitialZeroTranslateY = true;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (this.debounceTimer !== undefined)
|
|
103
|
+
clearTimeout(this.debounceTimer);
|
|
104
|
+
this.debounceTimer = setTimeout(() => {
|
|
105
|
+
this.translateY = value;
|
|
106
|
+
if (value !== 0)
|
|
107
|
+
this.haveReceivedInitialZeroTranslateY = false;
|
|
108
|
+
this.applyProps();
|
|
109
|
+
}, stickyDebounceMs(Platform.OS));
|
|
110
|
+
};
|
|
111
|
+
props() {
|
|
112
|
+
const style = {
|
|
113
|
+
transform: [{ translateY: this.animatedTranslateY }],
|
|
114
|
+
zIndex: STICKY_HEADER_Z_INDEX,
|
|
115
|
+
};
|
|
116
|
+
const passthrough = this.translateY === null
|
|
117
|
+
? undefined
|
|
118
|
+
: { transform: [{ translateY: this.translateY }], zIndex: STICKY_HEADER_Z_INDEX };
|
|
119
|
+
return {
|
|
120
|
+
style: passthrough === undefined ? style : [style, passthrough],
|
|
121
|
+
onLayout: this.onLayout,
|
|
122
|
+
collapsable: false,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
applyProps() {
|
|
126
|
+
const props = this.props();
|
|
127
|
+
const reduced = reduceProps(props);
|
|
128
|
+
for (const [key, value] of Object.entries(reduced))
|
|
129
|
+
routeProp(this.node, key, value);
|
|
130
|
+
const next = new AnimatedProps(props);
|
|
131
|
+
next.__attach();
|
|
132
|
+
if (this.animatedProps !== undefined)
|
|
133
|
+
this.animatedProps.__detach();
|
|
134
|
+
this.animatedProps = next;
|
|
135
|
+
this.cancelBind?.();
|
|
136
|
+
this.cancelBind = whenCommitted(this.node, () => next.setNativeView(this.node));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export class ScrollViewProjectionController {
|
|
140
|
+
config;
|
|
141
|
+
contentNode;
|
|
142
|
+
records = [];
|
|
143
|
+
headerLayoutYs = new Map();
|
|
144
|
+
constructor(config) {
|
|
145
|
+
this.config = config;
|
|
146
|
+
}
|
|
147
|
+
update(config) {
|
|
148
|
+
this.config = config;
|
|
149
|
+
this.reconcileStickyRecords();
|
|
150
|
+
}
|
|
151
|
+
bindContentNode(node) {
|
|
152
|
+
dlog(`Angular ScrollView projection bindContentNode node=${node.component} preExistingChildren=${node.children.length} recordsBefore=${this.records.length}`);
|
|
153
|
+
this.contentNode = node;
|
|
154
|
+
contentProjection.set(node, this);
|
|
155
|
+
if (this.records.length === 0 && node.children.length > 0) {
|
|
156
|
+
for (const child of [...node.children]) {
|
|
157
|
+
this.records.push({ child, wrapper: undefined, sticky: undefined, stickyIndex: undefined });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
this.reconcileStickyRecords();
|
|
161
|
+
}
|
|
162
|
+
appendProjectedChild(parent, child, insert) {
|
|
163
|
+
dlog(`Angular ScrollView projection appendProjectedChild parent=${parent.component} child=${child.component} recordsBefore=${this.records.length}`);
|
|
164
|
+
const existing = this.records.find(record => record.child === child);
|
|
165
|
+
if (existing !== undefined)
|
|
166
|
+
this.records.splice(this.records.indexOf(existing), 1);
|
|
167
|
+
const record = {
|
|
168
|
+
child,
|
|
169
|
+
wrapper: undefined,
|
|
170
|
+
sticky: undefined,
|
|
171
|
+
stickyIndex: undefined,
|
|
172
|
+
};
|
|
173
|
+
this.records.push(record);
|
|
174
|
+
this.insertRecord(parent, record, undefined, insert);
|
|
175
|
+
this.reconcileStickyRecords();
|
|
176
|
+
}
|
|
177
|
+
insertProjectedChild(parent, child, beforeChild, insert) {
|
|
178
|
+
dlog(`Angular ScrollView projection insertProjectedChild parent=${parent.component} child=${child.component} before=${beforeChild ? `${beforeChild.component}` : 'null'} recordsBefore=${this.records.length}`);
|
|
179
|
+
const existing = this.records.find(record => record.child === child);
|
|
180
|
+
if (existing !== undefined)
|
|
181
|
+
this.records.splice(this.records.indexOf(existing), 1);
|
|
182
|
+
const beforeRecord = beforeChild === null
|
|
183
|
+
? undefined
|
|
184
|
+
: this.records.find(record => record.child === beforeChild || record.wrapper === beforeChild);
|
|
185
|
+
const record = {
|
|
186
|
+
child,
|
|
187
|
+
wrapper: undefined,
|
|
188
|
+
sticky: undefined,
|
|
189
|
+
stickyIndex: undefined,
|
|
190
|
+
};
|
|
191
|
+
const index = beforeRecord === undefined ? this.records.length : this.records.indexOf(beforeRecord);
|
|
192
|
+
this.records.splice(index, 0, record);
|
|
193
|
+
this.insertRecord(parent, record, beforeRecord, insert);
|
|
194
|
+
this.reconcileStickyRecords();
|
|
195
|
+
}
|
|
196
|
+
removeProjectedChild(child, remove) {
|
|
197
|
+
const record = this.records.find(entry => entry.child === child || entry.wrapper === child);
|
|
198
|
+
if (record === undefined || this.contentNode === undefined)
|
|
199
|
+
return false;
|
|
200
|
+
record.sticky?.destroy();
|
|
201
|
+
projectedWrappers.delete(record.child);
|
|
202
|
+
const direct = directNode(record);
|
|
203
|
+
if (direct.parent === this.contentNode)
|
|
204
|
+
remove(this.contentNode, direct);
|
|
205
|
+
this.records.splice(this.records.indexOf(record), 1);
|
|
206
|
+
this.reconcileStickyRecords();
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
nextStickyHeaderY(index) {
|
|
210
|
+
const stickyIndices = this.config.stickyHeaderIndices ?? [];
|
|
211
|
+
const next = stickyIndices.find(entry => entry > index);
|
|
212
|
+
return next === undefined ? undefined : this.headerLayoutYs.get(next);
|
|
213
|
+
}
|
|
214
|
+
recordHeaderLayoutY(index, y) {
|
|
215
|
+
if (this.headerLayoutYs.get(index) === y)
|
|
216
|
+
return;
|
|
217
|
+
this.headerLayoutYs.set(index, y);
|
|
218
|
+
for (const record of this.records)
|
|
219
|
+
record.sticky?.rebuild();
|
|
220
|
+
}
|
|
221
|
+
insertRecord(parent, record, beforeRecord, insert) {
|
|
222
|
+
const before = beforeRecord === undefined ? undefined : directNode(beforeRecord);
|
|
223
|
+
dlog(`Angular ScrollView projection insertRecord physicalParent=${parent.component} child=${record.child.component} before=${before ? before.component : 'undefined(append)'} parentIsContentNode=${parent === this.contentNode}`);
|
|
224
|
+
if (before === undefined)
|
|
225
|
+
insert(parent, record.child);
|
|
226
|
+
else
|
|
227
|
+
insert(parent, record.child, before);
|
|
228
|
+
}
|
|
229
|
+
reconcileStickyRecords() {
|
|
230
|
+
if (this.contentNode === undefined)
|
|
231
|
+
return;
|
|
232
|
+
dlog(`Angular ScrollView projection reconcile contentNode=${this.contentNode.component} records=${this.records.length} contentNodeActualChildren=${this.contentNode.children.length}`);
|
|
233
|
+
const stickyIndices = new Set(this.config.stickyHeaderIndices ?? []);
|
|
234
|
+
if (this.config.customStickyHeaderComponent !== undefined && stickyIndices.size > 0) {
|
|
235
|
+
dlog('Angular ScrollView projection uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
|
|
236
|
+
}
|
|
237
|
+
let paintIndex = 0;
|
|
238
|
+
for (const record of [...this.records]) {
|
|
239
|
+
if (this.config.excludeRefreshControl && isProjectedRefreshControl(record.child)) {
|
|
240
|
+
this.removeProjectedChild(record.child, (parent, child) => removeChild(parent, child));
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const countsAsChild = !isAnchor(record.child) && !isProjectedRefreshControl(record.child);
|
|
244
|
+
const childIndex = paintIndex;
|
|
245
|
+
if (countsAsChild)
|
|
246
|
+
paintIndex += 1;
|
|
247
|
+
const shouldWrap = countsAsChild && stickyIndices.has(childIndex);
|
|
248
|
+
if (shouldWrap && record.wrapper === undefined)
|
|
249
|
+
this.wrapRecord(record, childIndex);
|
|
250
|
+
else if (!shouldWrap && record.wrapper !== undefined)
|
|
251
|
+
this.unwrapRecord(record);
|
|
252
|
+
else if (shouldWrap && record.stickyIndex !== childIndex) {
|
|
253
|
+
record.sticky?.destroy();
|
|
254
|
+
record.sticky = new StickyProjectionWrapper(this, childIndex, directNode(record));
|
|
255
|
+
record.stickyIndex = childIndex;
|
|
256
|
+
}
|
|
257
|
+
else if (shouldWrap)
|
|
258
|
+
record.sticky?.rebuild();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Auto projection runs after Angular has already created projected child host nodes. At this
|
|
262
|
+
// renderer boundary we can AOT-safely rearrange engine nodes, but we cannot instantiate an
|
|
263
|
+
// arbitrary Angular component class as a wrapper without owning a ViewContainerRef/injector and
|
|
264
|
+
// Angular projectable nodes for its <ng-content>. Therefore the automatic sticky path always uses
|
|
265
|
+
// the built-in engine-node wrapper; custom StickyHeaderComponent wrappers remain supported by
|
|
266
|
+
// explicit Angular composition with <ScrollViewStickyHeader>/<symbiote-sticky-header> or a user
|
|
267
|
+
// component that composes it in the template.
|
|
268
|
+
wrapRecord(record, childIndex) {
|
|
269
|
+
if (this.contentNode === undefined)
|
|
270
|
+
return;
|
|
271
|
+
const wrapper = createViewNode();
|
|
272
|
+
const currentParent = record.child.parent;
|
|
273
|
+
const currentIndex = currentParent?.children.indexOf(record.child) ?? -1;
|
|
274
|
+
if (currentParent === this.contentNode && currentIndex >= 0) {
|
|
275
|
+
insertBefore(this.contentNode, wrapper, record.child);
|
|
276
|
+
removeChild(this.contentNode, record.child);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
appendChild(this.contentNode, wrapper);
|
|
280
|
+
}
|
|
281
|
+
appendChild(wrapper, record.child);
|
|
282
|
+
record.wrapper = wrapper;
|
|
283
|
+
record.sticky = new StickyProjectionWrapper(this, childIndex, wrapper);
|
|
284
|
+
record.stickyIndex = childIndex;
|
|
285
|
+
projectedWrappers.set(record.child, record);
|
|
286
|
+
}
|
|
287
|
+
unwrapRecord(record) {
|
|
288
|
+
if (this.contentNode === undefined || record.wrapper === undefined)
|
|
289
|
+
return;
|
|
290
|
+
record.sticky?.destroy();
|
|
291
|
+
record.sticky = undefined;
|
|
292
|
+
record.stickyIndex = undefined;
|
|
293
|
+
const wrapper = record.wrapper;
|
|
294
|
+
insertBefore(this.contentNode, record.child, wrapper);
|
|
295
|
+
removeChild(this.contentNode, wrapper);
|
|
296
|
+
record.wrapper = undefined;
|
|
297
|
+
projectedWrappers.delete(record.child);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
export function getScrollViewProjection(node) {
|
|
301
|
+
return contentProjection.get(node);
|
|
302
|
+
}
|
|
303
|
+
export function removeScrollViewProjectedChild(child, remove) {
|
|
304
|
+
const record = projectedWrappers.get(child);
|
|
305
|
+
if (record === undefined)
|
|
306
|
+
return false;
|
|
307
|
+
const controller = record.wrapper?.parent
|
|
308
|
+
? contentProjection.get(record.wrapper.parent)
|
|
309
|
+
: undefined;
|
|
310
|
+
return controller?.removeProjectedChild(child, remove) ?? false;
|
|
311
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { EventEmitter, type AfterViewInit, type OnDestroy } from '@angular/core';
|
|
2
|
+
import { type IAccessibilityProps, type IAccessibilityStateValue, type IAriaProps, type IContentSize } from '@symbiote-native/components';
|
|
3
|
+
import { AnimatedValue, type IStyleProp, type ISymbioteEvent, type ISymbioteNode, type IViewStyle } from '@symbiote-native/engine';
|
|
4
|
+
import { RefreshControl } from '../refresh-control';
|
|
5
|
+
import { ScrollViewProjectionController } from './projection';
|
|
6
|
+
export type { IScrollViewHandle } from '@symbiote-native/components';
|
|
7
|
+
type IScrollHandler = (event: ISymbioteEvent) => void;
|
|
8
|
+
type IContentSizeHandler = (width: number, height: number) => void;
|
|
9
|
+
export declare const SCROLL_VIEW_INPUTS: string[];
|
|
10
|
+
export interface IAngularScrollViewProps extends IAccessibilityProps, IAriaProps {
|
|
11
|
+
style?: IStyleProp<IViewStyle>;
|
|
12
|
+
contentContainerStyle?: IStyleProp<IViewStyle> | string;
|
|
13
|
+
horizontal?: boolean;
|
|
14
|
+
scrollEnabled?: boolean;
|
|
15
|
+
showsVerticalScrollIndicator?: boolean;
|
|
16
|
+
showsHorizontalScrollIndicator?: boolean;
|
|
17
|
+
pagingEnabled?: boolean;
|
|
18
|
+
bounces?: boolean;
|
|
19
|
+
decelerationRate?: 'normal' | 'fast' | number;
|
|
20
|
+
scrollEventThrottle?: number;
|
|
21
|
+
contentInset?: {
|
|
22
|
+
top?: number;
|
|
23
|
+
left?: number;
|
|
24
|
+
bottom?: number;
|
|
25
|
+
right?: number;
|
|
26
|
+
};
|
|
27
|
+
contentOffset?: {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
};
|
|
31
|
+
removeClippedSubviews?: boolean;
|
|
32
|
+
snapToInterval?: number;
|
|
33
|
+
snapToOffsets?: number[];
|
|
34
|
+
snapToAlignment?: 'start' | 'center' | 'end';
|
|
35
|
+
snapToStart?: boolean;
|
|
36
|
+
snapToEnd?: boolean;
|
|
37
|
+
disableIntervalMomentum?: boolean;
|
|
38
|
+
stickyHeaderIndices?: number[];
|
|
39
|
+
invertStickyHeaders?: boolean;
|
|
40
|
+
StickyHeaderComponent?: unknown;
|
|
41
|
+
keyboardDismissMode?: 'none' | 'on-drag' | 'interactive';
|
|
42
|
+
keyboardShouldPersistTaps?: boolean | 'always' | 'never' | 'handled';
|
|
43
|
+
maintainVisibleContentPosition?: {
|
|
44
|
+
minIndexForVisible: number;
|
|
45
|
+
autoscrollToTopThreshold?: number;
|
|
46
|
+
};
|
|
47
|
+
alwaysBounceHorizontal?: boolean;
|
|
48
|
+
alwaysBounceVertical?: boolean;
|
|
49
|
+
centerContent?: boolean;
|
|
50
|
+
scrollIndicatorInsets?: {
|
|
51
|
+
top?: number;
|
|
52
|
+
left?: number;
|
|
53
|
+
bottom?: number;
|
|
54
|
+
right?: number;
|
|
55
|
+
};
|
|
56
|
+
indicatorStyle?: 'default' | 'black' | 'white';
|
|
57
|
+
directionalLockEnabled?: boolean;
|
|
58
|
+
automaticallyAdjustKeyboardInsets?: boolean;
|
|
59
|
+
contentInsetAdjustmentBehavior?: 'automatic' | 'scrollableAxes' | 'never' | 'always';
|
|
60
|
+
minimumZoomScale?: number;
|
|
61
|
+
maximumZoomScale?: number;
|
|
62
|
+
zoomScale?: number;
|
|
63
|
+
bouncesZoom?: boolean;
|
|
64
|
+
pinchGestureEnabled?: boolean;
|
|
65
|
+
nestedScrollEnabled?: boolean;
|
|
66
|
+
overScrollMode?: 'auto' | 'always' | 'never';
|
|
67
|
+
fadingEdgeLength?: number;
|
|
68
|
+
persistentScrollbar?: boolean;
|
|
69
|
+
endFillColor?: string;
|
|
70
|
+
onLayout?: IScrollHandler;
|
|
71
|
+
onScroll?: IScrollHandler;
|
|
72
|
+
onScrollBeginDrag?: IScrollHandler;
|
|
73
|
+
onScrollEndDrag?: IScrollHandler;
|
|
74
|
+
onMomentumScrollBegin?: IScrollHandler;
|
|
75
|
+
onMomentumScrollEnd?: IScrollHandler;
|
|
76
|
+
onScrollToTop?: IScrollHandler;
|
|
77
|
+
onContentSizeChange?: IContentSizeHandler;
|
|
78
|
+
onAccessibilityAction?: (event: ISymbioteEvent) => void;
|
|
79
|
+
onAccessibilityTap?: (event: ISymbioteEvent) => void;
|
|
80
|
+
onMagicTap?: (event: ISymbioteEvent) => void;
|
|
81
|
+
onAccessibilityEscape?: (event: ISymbioteEvent) => void;
|
|
82
|
+
}
|
|
83
|
+
export type IAngularScrollViewInputs = Omit<IAngularScrollViewProps, 'onLayout' | 'onScrollToTop' | 'onContentSizeChange' | 'onAccessibilityAction' | 'onAccessibilityTap' | 'onMagicTap' | 'onAccessibilityEscape'>;
|
|
84
|
+
export declare class ScrollViewProjectionDirective {
|
|
85
|
+
private readonly elementRef;
|
|
86
|
+
set symbioteScrollViewProjection(controller: ScrollViewProjectionController);
|
|
87
|
+
}
|
|
88
|
+
export declare abstract class ScrollViewBase implements IAngularScrollViewInputs, AfterViewInit, OnDestroy {
|
|
89
|
+
style: IStyleProp<IViewStyle> | undefined;
|
|
90
|
+
contentContainerStyle: IStyleProp<IViewStyle> | string | undefined;
|
|
91
|
+
horizontal: boolean | undefined;
|
|
92
|
+
scrollEnabled: boolean | undefined;
|
|
93
|
+
showsVerticalScrollIndicator: boolean | undefined;
|
|
94
|
+
showsHorizontalScrollIndicator: boolean | undefined;
|
|
95
|
+
pagingEnabled: boolean | undefined;
|
|
96
|
+
bounces: boolean | undefined;
|
|
97
|
+
decelerationRate: 'normal' | 'fast' | number | undefined;
|
|
98
|
+
scrollEventThrottle: number | undefined;
|
|
99
|
+
contentInset: IAngularScrollViewProps['contentInset'];
|
|
100
|
+
contentOffset: IAngularScrollViewProps['contentOffset'];
|
|
101
|
+
removeClippedSubviews: boolean | undefined;
|
|
102
|
+
snapToInterval: number | undefined;
|
|
103
|
+
snapToOffsets: number[] | undefined;
|
|
104
|
+
snapToAlignment: IAngularScrollViewProps['snapToAlignment'];
|
|
105
|
+
snapToStart: boolean | undefined;
|
|
106
|
+
snapToEnd: boolean | undefined;
|
|
107
|
+
disableIntervalMomentum: boolean | undefined;
|
|
108
|
+
stickyHeaderIndices: number[] | undefined;
|
|
109
|
+
invertStickyHeaders: boolean | undefined;
|
|
110
|
+
StickyHeaderComponent: unknown;
|
|
111
|
+
keyboardDismissMode: IAngularScrollViewProps['keyboardDismissMode'];
|
|
112
|
+
keyboardShouldPersistTaps: IAngularScrollViewProps['keyboardShouldPersistTaps'];
|
|
113
|
+
maintainVisibleContentPosition: IAngularScrollViewProps['maintainVisibleContentPosition'];
|
|
114
|
+
alwaysBounceHorizontal: boolean | undefined;
|
|
115
|
+
alwaysBounceVertical: boolean | undefined;
|
|
116
|
+
centerContent: boolean | undefined;
|
|
117
|
+
scrollIndicatorInsets: IAngularScrollViewProps['scrollIndicatorInsets'];
|
|
118
|
+
indicatorStyle: IAngularScrollViewProps['indicatorStyle'];
|
|
119
|
+
directionalLockEnabled: boolean | undefined;
|
|
120
|
+
automaticallyAdjustKeyboardInsets: boolean | undefined;
|
|
121
|
+
contentInsetAdjustmentBehavior: IAngularScrollViewProps['contentInsetAdjustmentBehavior'];
|
|
122
|
+
minimumZoomScale: number | undefined;
|
|
123
|
+
maximumZoomScale: number | undefined;
|
|
124
|
+
zoomScale: number | undefined;
|
|
125
|
+
bouncesZoom: boolean | undefined;
|
|
126
|
+
pinchGestureEnabled: boolean | undefined;
|
|
127
|
+
nestedScrollEnabled: boolean | undefined;
|
|
128
|
+
overScrollMode: IAngularScrollViewProps['overScrollMode'];
|
|
129
|
+
fadingEdgeLength: number | undefined;
|
|
130
|
+
persistentScrollbar: boolean | undefined;
|
|
131
|
+
endFillColor: string | undefined;
|
|
132
|
+
onScroll: IScrollHandler | undefined;
|
|
133
|
+
onScrollBeginDrag: IScrollHandler | undefined;
|
|
134
|
+
onScrollEndDrag: IScrollHandler | undefined;
|
|
135
|
+
onMomentumScrollBegin: IScrollHandler | undefined;
|
|
136
|
+
onMomentumScrollEnd: IScrollHandler | undefined;
|
|
137
|
+
readonly layout: EventEmitter<ISymbioteEvent>;
|
|
138
|
+
readonly scrollToTop: EventEmitter<ISymbioteEvent>;
|
|
139
|
+
readonly contentSizeChange: EventEmitter<IContentSize>;
|
|
140
|
+
readonly accessibilityAction: EventEmitter<ISymbioteEvent>;
|
|
141
|
+
readonly accessibilityTap: EventEmitter<ISymbioteEvent>;
|
|
142
|
+
readonly magicTap: EventEmitter<ISymbioteEvent>;
|
|
143
|
+
readonly accessibilityEscape: EventEmitter<ISymbioteEvent>;
|
|
144
|
+
testID: string | undefined;
|
|
145
|
+
nativeID: string | undefined;
|
|
146
|
+
accessible: boolean | undefined;
|
|
147
|
+
accessibilityLabel: string | undefined;
|
|
148
|
+
accessibilityHint: string | undefined;
|
|
149
|
+
accessibilityRole: IAccessibilityProps['accessibilityRole'];
|
|
150
|
+
accessibilityState: IAccessibilityStateValue | undefined;
|
|
151
|
+
accessibilityValue: IAccessibilityProps['accessibilityValue'];
|
|
152
|
+
accessibilityActions: IAccessibilityProps['accessibilityActions'];
|
|
153
|
+
accessibilityLabelledBy: string | string[] | undefined;
|
|
154
|
+
importantForAccessibility: IAccessibilityProps['importantForAccessibility'];
|
|
155
|
+
accessibilityLiveRegion: IAccessibilityProps['accessibilityLiveRegion'];
|
|
156
|
+
screenReaderFocusable: boolean | undefined;
|
|
157
|
+
accessibilityViewIsModal: boolean | undefined;
|
|
158
|
+
accessibilityElementsHidden: boolean | undefined;
|
|
159
|
+
accessibilityIgnoresInvertColors: boolean | undefined;
|
|
160
|
+
accessibilityLanguage: string | undefined;
|
|
161
|
+
accessibilityRespondsToUserInteraction: boolean | undefined;
|
|
162
|
+
accessibilityShowsLargeContentViewer: boolean | undefined;
|
|
163
|
+
accessibilityLargeContentTitle: string | undefined;
|
|
164
|
+
role: IAriaProps['role'];
|
|
165
|
+
'aria-label': string | undefined;
|
|
166
|
+
'aria-labelledby': string | undefined;
|
|
167
|
+
'aria-live': IAriaProps['aria-live'];
|
|
168
|
+
'aria-hidden': boolean | undefined;
|
|
169
|
+
'aria-busy': boolean | undefined;
|
|
170
|
+
'aria-checked': boolean | 'mixed' | undefined;
|
|
171
|
+
'aria-disabled': boolean | undefined;
|
|
172
|
+
'aria-expanded': boolean | undefined;
|
|
173
|
+
'aria-selected': boolean | undefined;
|
|
174
|
+
'aria-modal': boolean | undefined;
|
|
175
|
+
'aria-valuemax': number | undefined;
|
|
176
|
+
'aria-valuemin': number | undefined;
|
|
177
|
+
'aria-valuenow': number | undefined;
|
|
178
|
+
'aria-valuetext': string | undefined;
|
|
179
|
+
private hostDirective?;
|
|
180
|
+
protected projectedRefreshControl?: RefreshControl;
|
|
181
|
+
protected readonly scrollAnimatedValue: AnimatedValue;
|
|
182
|
+
private lastContentSize;
|
|
183
|
+
private viewportHeight;
|
|
184
|
+
protected readonly projectionController: ScrollViewProjectionController;
|
|
185
|
+
private detachStickyScroll;
|
|
186
|
+
private cancelStickyBind;
|
|
187
|
+
private lastLoggedIsHorizontal;
|
|
188
|
+
private readonly handleInvertedStickyLayout;
|
|
189
|
+
private readonly handleContentLayout;
|
|
190
|
+
private readonly emitterCallbackCache;
|
|
191
|
+
private cachedStickyOnScrollSource;
|
|
192
|
+
private cachedStickyOnScrollHandler;
|
|
193
|
+
get isHorizontal(): boolean;
|
|
194
|
+
private get hasStickyHeaders();
|
|
195
|
+
private get resolvedContentContainerStyle();
|
|
196
|
+
private get scrollViewBaseStyle();
|
|
197
|
+
get scrollProps(): Record<string, unknown>;
|
|
198
|
+
protected get layoutSplitStyle(): IStyleProp<IViewStyle>;
|
|
199
|
+
get androidWrappedScrollProps(): Record<string, unknown>;
|
|
200
|
+
get iosRefreshControlProps(): Record<string, unknown>;
|
|
201
|
+
get androidRefreshControlProps(): Record<string, unknown>;
|
|
202
|
+
protected handleProjectedRefresh(nativeNode: unknown): void;
|
|
203
|
+
private refreshControlProps;
|
|
204
|
+
get hasProjectedRefreshControl(): boolean;
|
|
205
|
+
get contentProps(): Record<string, unknown>;
|
|
206
|
+
private emitterCallback;
|
|
207
|
+
private stickyOnScrollHandler;
|
|
208
|
+
private get hostNode();
|
|
209
|
+
private readonly handle;
|
|
210
|
+
scrollTo(options?: {
|
|
211
|
+
x?: number;
|
|
212
|
+
y?: number;
|
|
213
|
+
animated?: boolean;
|
|
214
|
+
}): void;
|
|
215
|
+
scrollToEnd(options?: {
|
|
216
|
+
animated?: boolean;
|
|
217
|
+
}): void;
|
|
218
|
+
flashScrollIndicators(): void;
|
|
219
|
+
getScrollNode(): ISymbioteNode | null;
|
|
220
|
+
ngAfterViewInit(): void;
|
|
221
|
+
private attachSticky;
|
|
222
|
+
ngOnDestroy(): void;
|
|
223
|
+
private updateProjectionController;
|
|
224
|
+
private accessibilityInputs;
|
|
225
|
+
}
|