@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.
Files changed (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/build/angular/components/activity-indicator/index.android.d.ts +12 -0
  4. package/build/angular/components/activity-indicator/index.android.js +21 -0
  5. package/build/angular/components/activity-indicator/index.android.js.map +1 -0
  6. package/build/angular/components/activity-indicator/index.d.ts +1 -0
  7. package/build/angular/components/activity-indicator/index.ios.d.ts +8 -0
  8. package/build/angular/components/activity-indicator/index.ios.js +21 -0
  9. package/build/angular/components/activity-indicator/index.ios.js.map +1 -0
  10. package/build/angular/components/activity-indicator/index.js +4 -0
  11. package/build/angular/components/activity-indicator/index.js.map +1 -0
  12. package/build/angular/components/activity-indicator/shared.d.ts +67 -0
  13. package/build/angular/components/activity-indicator/shared.js +260 -0
  14. package/build/angular/components/activity-indicator/shared.js.map +1 -0
  15. package/build/angular/components/button.d.ts +63 -0
  16. package/build/angular/components/button.js +332 -0
  17. package/build/angular/components/button.js.map +1 -0
  18. package/build/angular/components/drawer-layout-android/index.android.d.ts +34 -0
  19. package/build/angular/components/drawer-layout-android/index.android.js +291 -0
  20. package/build/angular/components/drawer-layout-android/index.android.js.map +1 -0
  21. package/build/angular/components/drawer-layout-android/index.d.ts +11 -0
  22. package/build/angular/components/drawer-layout-android/index.js +109 -0
  23. package/build/angular/components/drawer-layout-android/index.js.map +1 -0
  24. package/build/angular/components/drawer-layout-android/shared.d.ts +74 -0
  25. package/build/angular/components/drawer-layout-android/shared.js +138 -0
  26. package/build/angular/components/drawer-layout-android/shared.js.map +1 -0
  27. package/build/angular/components/flat-list/index.d.ts +122 -0
  28. package/build/angular/components/flat-list/index.js +689 -0
  29. package/build/angular/components/flat-list/index.js.map +1 -0
  30. package/build/angular/components/image/index.android.d.ts +10 -0
  31. package/build/angular/components/image/index.android.js +59 -0
  32. package/build/angular/components/image/index.android.js.map +1 -0
  33. package/build/angular/components/image/index.d.ts +1 -0
  34. package/build/angular/components/image/index.ios.d.ts +10 -0
  35. package/build/angular/components/image/index.ios.js +59 -0
  36. package/build/angular/components/image/index.ios.js.map +1 -0
  37. package/build/angular/components/image/index.js +3 -0
  38. package/build/angular/components/image/index.js.map +1 -0
  39. package/build/angular/components/image/shared.d.ts +101 -0
  40. package/build/angular/components/image/shared.js +408 -0
  41. package/build/angular/components/image/shared.js.map +1 -0
  42. package/build/angular/components/image-background.d.ts +81 -0
  43. package/build/angular/components/image-background.js +418 -0
  44. package/build/angular/components/image-background.js.map +1 -0
  45. package/build/angular/components/input-accessory-view.d.ts +59 -0
  46. package/build/angular/components/input-accessory-view.js +266 -0
  47. package/build/angular/components/input-accessory-view.js.map +1 -0
  48. package/build/angular/components/keyboard-avoiding-view.d.ts +82 -0
  49. package/build/angular/components/keyboard-avoiding-view.js +363 -0
  50. package/build/angular/components/keyboard-avoiding-view.js.map +1 -0
  51. package/build/angular/components/modal.d.ts +92 -0
  52. package/build/angular/components/modal.js +365 -0
  53. package/build/angular/components/modal.js.map +1 -0
  54. package/build/angular/components/pressable/index.d.ts +123 -0
  55. package/build/angular/components/pressable/index.js +421 -0
  56. package/build/angular/components/pressable/index.js.map +1 -0
  57. package/build/angular/components/refresh-control.d.ts +86 -0
  58. package/build/angular/components/refresh-control.js +347 -0
  59. package/build/angular/components/refresh-control.js.map +1 -0
  60. package/build/angular/components/safe-area-view.d.ts +57 -0
  61. package/build/angular/components/safe-area-view.js +253 -0
  62. package/build/angular/components/safe-area-view.js.map +1 -0
  63. package/build/angular/components/scroll-view/index.android.d.ts +21 -0
  64. package/build/angular/components/scroll-view/index.android.js +235 -0
  65. package/build/angular/components/scroll-view/index.android.js.map +1 -0
  66. package/build/angular/components/scroll-view/index.d.ts +3 -0
  67. package/build/angular/components/scroll-view/index.ios.d.ts +9 -0
  68. package/build/angular/components/scroll-view/index.ios.js +86 -0
  69. package/build/angular/components/scroll-view/index.ios.js.map +1 -0
  70. package/build/angular/components/scroll-view/index.js +6 -0
  71. package/build/angular/components/scroll-view/index.js.map +1 -0
  72. package/build/angular/components/scroll-view/projection.d.ts +32 -0
  73. package/build/angular/components/scroll-view/projection.js +312 -0
  74. package/build/angular/components/scroll-view/projection.js.map +1 -0
  75. package/build/angular/components/scroll-view/shared.d.ts +230 -0
  76. package/build/angular/components/scroll-view/shared.js +679 -0
  77. package/build/angular/components/scroll-view/shared.js.map +1 -0
  78. package/build/angular/components/scroll-view/sticky-header.d.ts +41 -0
  79. package/build/angular/components/scroll-view/sticky-header.js +208 -0
  80. package/build/angular/components/scroll-view/sticky-header.js.map +1 -0
  81. package/build/angular/components/section-list/index.d.ts +116 -0
  82. package/build/angular/components/section-list/index.js +641 -0
  83. package/build/angular/components/section-list/index.js.map +1 -0
  84. package/build/angular/components/switch/index.android.d.ts +20 -0
  85. package/build/angular/components/switch/index.android.js +70 -0
  86. package/build/angular/components/switch/index.android.js.map +1 -0
  87. package/build/angular/components/switch/index.d.ts +1 -0
  88. package/build/angular/components/switch/index.ios.d.ts +19 -0
  89. package/build/angular/components/switch/index.ios.js +69 -0
  90. package/build/angular/components/switch/index.ios.js.map +1 -0
  91. package/build/angular/components/switch/index.js +4 -0
  92. package/build/angular/components/switch/index.js.map +1 -0
  93. package/build/angular/components/switch/shared.d.ts +40 -0
  94. package/build/angular/components/switch/shared.js +127 -0
  95. package/build/angular/components/switch/shared.js.map +1 -0
  96. package/build/angular/components/text-input.d.ts +153 -0
  97. package/build/angular/components/text-input.js +604 -0
  98. package/build/angular/components/text-input.js.map +1 -0
  99. package/build/angular/components/touchable-native-feedback.d.ts +83 -0
  100. package/build/angular/components/touchable-native-feedback.js +376 -0
  101. package/build/angular/components/touchable-native-feedback.js.map +1 -0
  102. package/build/angular/components/touchable.d.ts +248 -0
  103. package/build/angular/components/touchable.js +1206 -0
  104. package/build/angular/components/touchable.js.map +1 -0
  105. package/build/angular/components/virtualized-list/directives.d.ts +54 -0
  106. package/build/angular/components/virtualized-list/directives.js +154 -0
  107. package/build/angular/components/virtualized-list/directives.js.map +1 -0
  108. package/build/angular/components/virtualized-list/index.d.ts +268 -0
  109. package/build/angular/components/virtualized-list/index.js +1162 -0
  110. package/build/angular/components/virtualized-list/index.js.map +1 -0
  111. package/build/angular/components/virtualized-section-list/directives.d.ts +37 -0
  112. package/build/angular/components/virtualized-section-list/directives.js +77 -0
  113. package/build/angular/components/virtualized-section-list/directives.js.map +1 -0
  114. package/build/angular/components/virtualized-section-list/index.d.ts +178 -0
  115. package/build/angular/components/virtualized-section-list/index.js +722 -0
  116. package/build/angular/components/virtualized-section-list/index.js.map +1 -0
  117. package/build/angular/components.d.ts +39 -0
  118. package/build/angular/components.js +38 -0
  119. package/build/angular/components.js.map +1 -0
  120. package/build/angular/create-portal.d.ts +22 -0
  121. package/build/angular/create-portal.js +74 -0
  122. package/build/angular/create-portal.js.map +1 -0
  123. package/build/angular/create-tunnel.d.ts +34 -0
  124. package/build/angular/create-tunnel.js +126 -0
  125. package/build/angular/create-tunnel.js.map +1 -0
  126. package/build/angular/descriptor-to-angular/index.d.ts +22 -0
  127. package/build/angular/descriptor-to-angular/index.js +142 -0
  128. package/build/angular/descriptor-to-angular/index.js.map +1 -0
  129. package/build/angular/host-instance/index.d.ts +2 -0
  130. package/build/angular/host-instance/index.js +37 -0
  131. package/build/angular/host-instance/index.js.map +1 -0
  132. package/build/angular/index.d.ts +21 -0
  133. package/build/angular/index.js +42 -0
  134. package/build/angular/index.js.map +1 -0
  135. package/build/angular/modules/animated/create-animated-component.d.ts +68 -0
  136. package/build/angular/modules/animated/create-animated-component.js +429 -0
  137. package/build/angular/modules/animated/create-animated-component.js.map +1 -0
  138. package/build/angular/modules/animated/index.d.ts +51 -0
  139. package/build/angular/modules/animated/index.js +59 -0
  140. package/build/angular/modules/animated/index.js.map +1 -0
  141. package/build/angular/modules/app-registry/index.d.ts +7 -0
  142. package/build/angular/modules/app-registry/index.js +23 -0
  143. package/build/angular/modules/app-registry/index.js.map +1 -0
  144. package/build/angular/modules/status-bar.d.ts +20 -0
  145. package/build/angular/modules/status-bar.js +59 -0
  146. package/build/angular/modules/status-bar.js.map +1 -0
  147. package/build/angular/primitives/index.d.ts +63 -0
  148. package/build/angular/primitives/index.js +189 -0
  149. package/build/angular/primitives/index.js.map +1 -0
  150. package/build/angular/primitives/shared.d.ts +89 -0
  151. package/build/angular/primitives/shared.js +172 -0
  152. package/build/angular/primitives/shared.js.map +1 -0
  153. package/build/angular/render.d.ts +11 -0
  154. package/build/angular/render.js +161 -0
  155. package/build/angular/render.js.map +1 -0
  156. package/build/angular/renderer.d.ts +38 -0
  157. package/build/angular/renderer.js +360 -0
  158. package/build/angular/renderer.js.map +1 -0
  159. package/build/angular/services/color-scheme.service.d.ts +16 -0
  160. package/build/angular/services/color-scheme.service.js +31 -0
  161. package/build/angular/services/color-scheme.service.js.map +1 -0
  162. package/build/angular/services/index.d.ts +2 -0
  163. package/build/angular/services/index.js +3 -0
  164. package/build/angular/services/index.js.map +1 -0
  165. package/build/angular/services/window-dimensions.service.d.ts +16 -0
  166. package/build/angular/services/window-dimensions.service.js +42 -0
  167. package/build/angular/services/window-dimensions.service.js.map +1 -0
  168. package/build/components/activity-indicator/index.android.d.ts +9 -0
  169. package/build/components/activity-indicator/index.android.js +64 -0
  170. package/build/components/activity-indicator/index.d.ts +1 -0
  171. package/build/components/activity-indicator/index.ios.d.ts +5 -0
  172. package/build/components/activity-indicator/index.ios.js +64 -0
  173. package/build/components/activity-indicator/index.js +3 -0
  174. package/build/components/activity-indicator/shared.d.ts +64 -0
  175. package/build/components/activity-indicator/shared.js +424 -0
  176. package/build/components/button.d.ts +60 -0
  177. package/build/components/button.js +456 -0
  178. package/build/components/drawer-layout-android/index.android.d.ts +29 -0
  179. package/build/components/drawer-layout-android/index.android.js +326 -0
  180. package/build/components/drawer-layout-android/index.d.ts +8 -0
  181. package/build/components/drawer-layout-android/index.js +145 -0
  182. package/build/components/drawer-layout-android/shared.d.ts +71 -0
  183. package/build/components/drawer-layout-android/shared.js +205 -0
  184. package/build/components/flat-list/index.d.ts +119 -0
  185. package/build/components/flat-list/index.js +692 -0
  186. package/build/components/image/index.android.d.ts +7 -0
  187. package/build/components/image/index.android.js +88 -0
  188. package/build/components/image/index.d.ts +1 -0
  189. package/build/components/image/index.ios.d.ts +7 -0
  190. package/build/components/image/index.ios.js +88 -0
  191. package/build/components/image/index.js +2 -0
  192. package/build/components/image/shared.d.ts +101 -0
  193. package/build/components/image/shared.js +407 -0
  194. package/build/components/image-background.d.ts +78 -0
  195. package/build/components/image-background.js +583 -0
  196. package/build/components/input-accessory-view.d.ts +56 -0
  197. package/build/components/input-accessory-view.js +407 -0
  198. package/build/components/keyboard-avoiding-view.d.ts +79 -0
  199. package/build/components/keyboard-avoiding-view.js +509 -0
  200. package/build/components/modal.d.ts +89 -0
  201. package/build/components/modal.js +534 -0
  202. package/build/components/pressable/index.d.ts +120 -0
  203. package/build/components/pressable/index.js +640 -0
  204. package/build/components/refresh-control.d.ts +83 -0
  205. package/build/components/refresh-control.js +514 -0
  206. package/build/components/safe-area-view.d.ts +54 -0
  207. package/build/components/safe-area-view.js +393 -0
  208. package/build/components/scroll-view/index.android.d.ts +16 -0
  209. package/build/components/scroll-view/index.android.js +228 -0
  210. package/build/components/scroll-view/index.d.ts +3 -0
  211. package/build/components/scroll-view/index.ios.d.ts +6 -0
  212. package/build/components/scroll-view/index.ios.js +113 -0
  213. package/build/components/scroll-view/index.js +5 -0
  214. package/build/components/scroll-view/projection.d.ts +32 -0
  215. package/build/components/scroll-view/projection.js +311 -0
  216. package/build/components/scroll-view/shared.d.ts +225 -0
  217. package/build/components/scroll-view/shared.js +757 -0
  218. package/build/components/scroll-view/sticky-header.d.ts +38 -0
  219. package/build/components/scroll-view/sticky-header.js +257 -0
  220. package/build/components/section-list/index.d.ts +113 -0
  221. package/build/components/section-list/index.js +768 -0
  222. package/build/components/switch/index.android.d.ts +17 -0
  223. package/build/components/switch/index.android.js +107 -0
  224. package/build/components/switch/index.d.ts +1 -0
  225. package/build/components/switch/index.ios.d.ts +16 -0
  226. package/build/components/switch/index.ios.js +106 -0
  227. package/build/components/switch/index.js +3 -0
  228. package/build/components/switch/shared.d.ts +37 -0
  229. package/build/components/switch/shared.js +176 -0
  230. package/build/components/text-input.d.ts +150 -0
  231. package/build/components/text-input.js +826 -0
  232. package/build/components/touchable-native-feedback.d.ts +80 -0
  233. package/build/components/touchable-native-feedback.js +550 -0
  234. package/build/components/touchable.d.ts +241 -0
  235. package/build/components/touchable.js +1672 -0
  236. package/build/components/virtualized-list/directives.d.ts +41 -0
  237. package/build/components/virtualized-list/directives.js +250 -0
  238. package/build/components/virtualized-list/index.d.ts +265 -0
  239. package/build/components/virtualized-list/index.js +1344 -0
  240. package/build/components/virtualized-section-list/directives.d.ts +28 -0
  241. package/build/components/virtualized-section-list/directives.js +149 -0
  242. package/build/components/virtualized-section-list/index.d.ts +175 -0
  243. package/build/components/virtualized-section-list/index.js +854 -0
  244. package/build/components.d.ts +39 -0
  245. package/build/components.js +37 -0
  246. package/build/create-portal.d.ts +17 -0
  247. package/build/create-portal.js +128 -0
  248. package/build/create-tunnel.d.ts +29 -0
  249. package/build/create-tunnel.js +181 -0
  250. package/build/descriptor-to-angular/index.d.ts +19 -0
  251. package/build/descriptor-to-angular/index.js +186 -0
  252. package/build/host-instance/index.d.ts +2 -0
  253. package/build/host-instance/index.js +36 -0
  254. package/build/index.d.ts +21 -0
  255. package/build/index.js +41 -0
  256. package/build/modules/animated/create-animated-component.d.ts +57 -0
  257. package/build/modules/animated/create-animated-component.js +490 -0
  258. package/build/modules/animated/index.d.ts +51 -0
  259. package/build/modules/animated/index.js +58 -0
  260. package/build/modules/app-registry/index.d.ts +7 -0
  261. package/build/modules/app-registry/index.js +22 -0
  262. package/build/modules/status-bar.d.ts +17 -0
  263. package/build/modules/status-bar.js +121 -0
  264. package/build/primitives/index.d.ts +32 -0
  265. package/build/primitives/index.js +386 -0
  266. package/build/primitives/shared.d.ts +84 -0
  267. package/build/primitives/shared.js +231 -0
  268. package/build/render.d.ts +11 -0
  269. package/build/render.js +160 -0
  270. package/build/renderer.d.ts +38 -0
  271. package/build/renderer.js +359 -0
  272. package/build/services/color-scheme.service.d.ts +13 -0
  273. package/build/services/color-scheme.service.js +72 -0
  274. package/build/services/index.d.ts +2 -0
  275. package/build/services/index.js +2 -0
  276. package/build/services/window-dimensions.service.d.ts +13 -0
  277. package/build/services/window-dimensions.service.js +83 -0
  278. package/metro-css-parser.cjs +11 -0
  279. package/package.json +57 -0
  280. package/src/__tests__/responder-change-detection.test.ts +102 -0
  281. package/src/__tests__/responder-nested-cd.test.ts +113 -0
  282. package/src/angular-gaps.test.ts +142 -0
  283. package/src/angular-imports.test.ts +100 -0
  284. package/src/components/activity-indicator/activity-indicator-class-style.test.ts +44 -0
  285. package/src/components/activity-indicator/activity-indicator.test.ts +131 -0
  286. package/src/components/activity-indicator/index.android.ts +16 -0
  287. package/src/components/activity-indicator/index.ios.ts +17 -0
  288. package/src/components/activity-indicator/index.ts +4 -0
  289. package/src/components/activity-indicator/shared.ts +206 -0
  290. package/src/components/button.ts +193 -0
  291. package/src/components/flat-list/column-wrapper-style-class.test.ts +116 -0
  292. package/src/components/flat-list/flat-list-array-style.test.ts +131 -0
  293. package/src/components/flat-list/flat-list-class-style.test.ts +74 -0
  294. package/src/components/flat-list/flat-list-scroll-containment.test.ts +107 -0
  295. package/src/components/flat-list/flat-list.test.ts +99 -0
  296. package/src/components/flat-list/index.ts +575 -0
  297. package/src/components/image/image-class-style.test.ts +46 -0
  298. package/src/components/image/index.android.ts +48 -0
  299. package/src/components/image/index.ios.ts +48 -0
  300. package/src/components/image/index.ts +3 -0
  301. package/src/components/image/shared.ts +478 -0
  302. package/src/components/image-background-class-style.test.ts +48 -0
  303. package/src/components/image-background-style-class.test.ts +79 -0
  304. package/src/components/image-background.ts +270 -0
  305. package/src/components/input-accessory-view.test.ts +43 -0
  306. package/src/components/input-accessory-view.ts +191 -0
  307. package/src/components/keyboard-avoiding-view.test.ts +54 -0
  308. package/src/components/keyboard-avoiding-view.ts +308 -0
  309. package/src/components/modal.test.ts +43 -0
  310. package/src/components/modal.ts +304 -0
  311. package/src/components/pressable/index.ts +371 -0
  312. package/src/components/pressable/pressable.test.ts +85 -0
  313. package/src/components/refresh-control.test.ts +41 -0
  314. package/src/components/refresh-control.ts +288 -0
  315. package/src/components/safe-area-view.test.ts +43 -0
  316. package/src/components/safe-area-view.ts +178 -0
  317. package/src/components/scroll-view/android-scroll-view-axis-projection.test.ts +123 -0
  318. package/src/components/scroll-view/content-container-style-class.test.ts +75 -0
  319. package/src/components/scroll-view/index.android.ts +190 -0
  320. package/src/components/scroll-view/index.ios.ts +79 -0
  321. package/src/components/scroll-view/index.ts +7 -0
  322. package/src/components/scroll-view/projection.ts +384 -0
  323. package/src/components/scroll-view/scroll-view-class-style.test.ts +134 -0
  324. package/src/components/scroll-view/scroll-view-projection.test.ts +194 -0
  325. package/src/components/scroll-view/shared.ts +836 -0
  326. package/src/components/scroll-view/sticky-header.ts +230 -0
  327. package/src/components/section-list/index.ts +445 -0
  328. package/src/components/switch/android-switch-class.test.ts +42 -0
  329. package/src/components/switch/index.android.ts +61 -0
  330. package/src/components/switch/index.ios.ts +60 -0
  331. package/src/components/switch/index.ts +4 -0
  332. package/src/components/switch/shared.ts +197 -0
  333. package/src/components/switch/switch.test.ts +92 -0
  334. package/src/components/text-input-class-style.test.ts +54 -0
  335. package/src/components/text-input.ts +536 -0
  336. package/src/components/touchable-native-feedback.test.ts +49 -0
  337. package/src/components/touchable-native-feedback.ts +260 -0
  338. package/src/components/touchable.test.ts +102 -0
  339. package/src/components/touchable.ts +643 -0
  340. package/src/components/virtualized-list/directives.ts +169 -0
  341. package/src/components/virtualized-list/index.ts +1204 -0
  342. package/src/components/virtualized-list/virtualized-list-class-style.test.ts +76 -0
  343. package/src/components/virtualized-section-list/directives.ts +91 -0
  344. package/src/components/virtualized-section-list/index.ts +598 -0
  345. package/src/components/virtualized-section-list/virtualized-section-list-class-style.test.ts +60 -0
  346. package/src/components.ts +149 -0
  347. package/src/create-portal.test.ts +90 -0
  348. package/src/create-portal.ts +74 -0
  349. package/src/create-tunnel.test.ts +120 -0
  350. package/src/create-tunnel.ts +136 -0
  351. package/src/descriptor-to-angular/descriptor-outlet.test.ts +94 -0
  352. package/src/descriptor-to-angular/index.ts +190 -0
  353. package/src/host-instance/host-instance.test.ts +49 -0
  354. package/src/host-instance/index.ts +36 -0
  355. package/src/index.ts +257 -0
  356. package/src/modules/animated/animated-scroll-view.test.ts +85 -0
  357. package/src/modules/animated/create-animated-component.ts +435 -0
  358. package/src/modules/animated/index.ts +105 -0
  359. package/src/modules/app-registry/app-registry.test.ts +106 -0
  360. package/src/modules/app-registry/index.ts +60 -0
  361. package/src/modules/status-bar.test.ts +50 -0
  362. package/src/modules/status-bar.ts +57 -0
  363. package/src/primitives/index.ts +119 -0
  364. package/src/primitives/shared.ts +191 -0
  365. package/src/render.test.ts +147 -0
  366. package/src/render.ts +224 -0
  367. package/src/renderer.test.ts +179 -0
  368. package/src/renderer.ts +407 -0
  369. package/src/services/color-scheme.service.ts +27 -0
  370. package/src/services/index.ts +2 -0
  371. package/src/services/services.test.ts +163 -0
  372. 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
+ }